From 65c1d746a7731278a188b84bde35ca66965d9f57 Mon Sep 17 00:00:00 2001 From: Henrik Wahlqvist Date: Tue, 28 May 2024 13:05:22 +0200 Subject: [PATCH] Copy from Volvo Cars local project We don't transfer git history since it may contain proprietary data that we cannot have in an open sources version. Change-Id: I9586124c1720db69a76b9390e208e9f0ba3b86d4 --- .gitignore | 29 + CODE_OF_CONDUCT.md | 128 + CONTRIBUTING.md | 55 + LICENSE | 202 + MANIFEST.in | 21 + NOTICE | 3122 ++ README.md | 47 + docs/build_cmd.md | 20 + docs/design_standards.md | 84 + docs/images/DD_class_example.PNG | Bin 0 -> 29271 bytes docs/images/DuplicatedDefines.PNG | Bin 0 -> 7486 bytes docs/images/MissingSignals.PNG | Bin 0 -> 7883 bytes docs/images/SignalFlow.PNG | Bin 0 -> 25110 bytes docs/images/TL-DD-MACRO.jpg | Bin 0 -> 26704 bytes docs/images/TL-DD-preprocessor1.jpg | Bin 0 -> 13831 bytes docs/images/TL-DD-preprocessor2.jpg | Bin 0 -> 13806 bytes docs/images/TL-preproc-lib.jpg | Bin 0 -> 10356 bytes docs/images/UnusedSignals.PNG | Bin 0 -> 6514 bytes docs/images/add-preproc-block.jpg | Bin 0 -> 27950 bytes docs/images/change_to_actionport.jpg | Bin 0 -> 13226 bytes docs/images/connect_to_subsystem.jpg | Bin 0 -> 5620 bytes docs/images/new_build_system.PNG | Bin 0 -> 75140 bytes docs/images/old_build_system.PNG | Bin 0 -> 77455 bytes docs/images/powertrain_build-ECM-white.jpg | Bin 0 -> 39424 bytes docs/images/powertrain_build-ECM.drawio | 1 + docs/images/powertrain_build-hi-white.jpg | Bin 0 -> 40553 bytes docs/images/powertrain_build-hi.drawio | 1 + docs/images/powertrain_build-hp-white.jpg | Bin 0 -> 44867 bytes docs/images/powertrain_build.png | Bin 0 -> 107789 bytes docs/images/powertrain_buildDependencies.svg | 1460 + .../powertrain_build_gen_service_black.jpg | Bin 0 -> 356511 bytes docs/images/powertrain_build_legacy.png | Bin 0 -> 116051 bytes docs/images/reset_port_SL_example.PNG | Bin 0 -> 81716 bytes docs/images/reset_port_workaround.PNG | Bin 0 -> 4547 bytes .../signal_inconsistency_log_example.png | Bin 0 -> 153284 bytes .../signal_inconsistency_project_index.png | Bin 0 -> 48583 bytes ...l_inconsistency_unconsumed_csv_example.png | Bin 0 -> 61808 bytes docs/images/supplier-consumer_Model.PNG | Bin 0 -> 3504 bytes docs/images/ts_change.PNG | Bin 0 -> 42739 bytes docs/index.md | 9 + docs/intro.md | 92 + docs/model_changes.md | 71 + docs/powertrain_build.md | 203 + docs/powertrain_build_architecture.md | 162 + docs/powertrain_build_deployment.md | 76 + docs/powertrain_build_introduction.md | 32 + docs/project_config.md | 207 + docs/signal_consistency_in_check.md | 83 + docs/signal_interface_tool.md | 37 + docs/signaling_in_powertrain_build.md | 102 + docs/todo_list.md | 246 + docs/unit_config.md | 255 + pybuild/__init__.py | 37 + pybuild/a2l.py | 582 + pybuild/a2l_merge.py | 650 + pybuild/a2l_templates.py | 717 + pybuild/build.py | 946 + pybuild/build_defs.py | 309 + pybuild/build_proj_config.py | 606 + pybuild/check_interface.py | 563 + pybuild/config.py | 526 + pybuild/core.py | 296 + pybuild/core_dummy.py | 358 + pybuild/create_conversion_table.py | 61 + pybuild/dids.py | 604 + pybuild/dummy.py | 159 + pybuild/dummy_spm.py | 252 + pybuild/environmentcheck.py | 52 + pybuild/ext_dbg.py | 249 + pybuild/ext_var.py | 296 + pybuild/feature_configs.py | 301 + pybuild/gen_allsysteminfo.py | 227 + pybuild/gen_label_split.py | 449 + pybuild/handcode_replacer.py | 124 + pybuild/html_report.py | 133 + pybuild/interface/README.md | 19 + pybuild/interface/__init__.py | 4 + pybuild/interface/application.py | 511 + pybuild/interface/base.py | 500 + pybuild/interface/csp_api.py | 490 + pybuild/interface/device_proxy.py | 677 + pybuild/interface/ems.py | 67 + pybuild/interface/export_global_vars.py | 98 + pybuild/interface/generate_adapters.py | 125 + pybuild/interface/generate_hi_interface.py | 74 + pybuild/interface/generate_service.py | 60 + pybuild/interface/generate_wrappers.py | 134 + pybuild/interface/generation_utils.py | 144 + pybuild/interface/hal.py | 194 + pybuild/interface/model_yaml_verification.py | 342 + pybuild/interface/service.py | 296 + pybuild/interface/simulink.py | 249 + pybuild/interface/update_call_sources.py | 173 + pybuild/interface/update_model_yaml.py | 179 + pybuild/interface/zone_controller.py | 350 + pybuild/lib/__init__.py | 4 + pybuild/lib/helper_functions.py | 127 + pybuild/lib/logger.py | 55 + .../CodeGen/BuildAutomationPyBuild.m | 78 + pybuild/matlab_scripts/CodeGen/Generate_A2L.m | 125 + .../matlab_scripts/CodeGen/generateTLUnit.m | 239 + .../CodeGen/getAsilClassification.m | 28 + .../CodeGen/modelConfiguredForTL.m | 28 + .../matlab_scripts/CodeGen/moveDefOutports.m | 88 + .../matlab_scripts/CodeGen/parseCalMeasData.m | 406 + .../CodeGen/parseCoreIdentifiers.m | 139 + pybuild/matlab_scripts/CodeGen/parseDIDs.m | 141 + pybuild/matlab_scripts/CodeGen/parseInPorts.m | 106 + .../CodeGen/parseIncludeConfigs.m | 25 + .../matlab_scripts/CodeGen/parseModelInfo.m | 38 + pybuild/matlab_scripts/CodeGen/parseNVM.m | 82 + .../matlab_scripts/CodeGen/parseOutPorts.m | 120 + .../matlab_scripts/CodeGen/parsePreProcBlks.m | 23 + pybuild/matlab_scripts/CodeGen/struct2JSON.m | 128 + .../CodeGen/updateCodeSwConfig.m | 38 + pybuild/matlab_scripts/Init_PyBuild.m | 91 + pybuild/matlab_scripts/__init__.py | 2 + .../helperFunctions/Get_Full_Name.m | 46 + .../helperFunctions/Get_SrcLines.m | 12 + .../helperFunctions/Init_Models.m | 78 + .../helperFunctions/Init_Projects.m | 67 + .../helperFunctions/Read_Units.m | 34 + .../helperFunctions/SetProjectTimeSamples.m | 27 + .../helperFunctions/Strip_Suffix.m | 16 + .../helperFunctions/followLink.m | 119 + .../helperFunctions/getCodeSwitches.m | 50 + .../helperFunctions/getConsumerBlocks.m | 30 + .../helperFunctions/getDefBlock.m | 40 + .../helperFunctions/getDefOutport.m | 58 + .../helperFunctions/getDstBlocks.m | 19 + .../helperFunctions/getDstLines.m | 13 + .../helperFunctions/getInterfaceSignals.m | 37 + .../matlab_scripts/helperFunctions/getName.m | 37 + .../matlab_scripts/helperFunctions/getPath.m | 6 + .../helperFunctions/getProperValue.m | 21 + .../helperFunctions/getSrcBlocks.m | 19 + .../helperFunctions/getSrcLines.m | 13 + .../helperFunctions/loadLibraries.m | 11 + .../matlab_scripts/helperFunctions/loadjson.m | 6 + .../helperFunctions/modifyEnumStructField.m | 21 + .../helperFunctions/removeConfigDuplicates.m | 32 + .../helperFunctions/sortSystemByClass.m | 26 + .../helperFunctions/tl_getfast.m | 89 + .../helperFunctions/topLevelSystem.m | 21 + .../helperFunctions/updateModels.m | 131 + pybuild/memory_section.py | 224 + pybuild/nvm_def.py | 568 + pybuild/problem_logger.py | 86 + pybuild/pt_matlab.py | 428 + pybuild/pt_win32.py | 144 + pybuild/replace_compu_tab_ref.py | 92 + pybuild/sched_funcs.py | 173 + pybuild/signal.py | 7 + pybuild/signal_if_html_rep.py | 221 + pybuild/signal_if_html_rep_all.py | 302 + pybuild/signal_incons_html_rep.py | 180 + pybuild/signal_incons_html_rep_all.py | 366 + pybuild/signal_incons_html_rep_base.py | 168 + pybuild/signal_inconsistency_check.py | 623 + pybuild/signal_interfaces.py | 864 + pybuild/templates/Index_SigCheck_All.html | 23 + pybuild/templates/Index_SigIf_All.html | 20 + pybuild/types.py | 218 + pybuild/unit_configs.py | 420 + pybuild/user_defined_types.py | 559 + pybuild/versioncheck.py | 66 + pybuild/wrapper.py | 502 + pybuild/xlrd_csv.py | 87 + pybuild/zone_controller/__init__.py | 4 + pybuild/zone_controller/calibration.py | 157 + pybuild/zone_controller/composition_yaml.py | 575 + requirements.txt | 10 + setup.cfg | 33 + setup.py | 14 + test-requirements.txt | 3 + .../expected_result.json | 51 + .../test_generate_hi_interface/test_case.json | 162 + .../add_api_expected_result.json | 14 + ...d_api_with_data_types_expected_result.json | 27 + .../test_simulink/add_dp_expected_result.json | 27 + ...dd_dp_with_data_types_expected_result.json | 30 + .../add_method_expected_methods.json | 21 + .../add_method_expected_result.json | 22 + .../test_simulink/add_method_output.json | 14 + .../extend_adapters_expected_result.json | 18 + .../extend_adapters_interface.json | 14 + .../get_interface_dp_expected_result.json | 43 + .../get_interface_hal_expected_result.json | 14 + .../get_interface_sfw_expected_result.json | 14 + ...rface_with_data_types_expected_result.json | 50 + ...face_with_double_enum_expected_result.json | 52 + .../split_interface_expected_result.json | 50 + .../interface/test_simulink/test_case.json | 213 + .../test_update_call_sources/test_case.json | 47 + .../test_composition_yaml/composition_yaml.py | 39 + .../composition_yaml_setup.py | 371 + .../composition_yaml_with_a2l_axis_data.py | 365 + .../composition_yaml_with_calls_all_fields.py | 46 + ...tion_yaml_with_calls_no_optional_fields.py | 45 + tests/__init__.py | 2 + tests/interface/__init__.py | 4 + tests/interface/test_export_global_vars.py | 46 + tests/interface/test_generate_hi_interface.py | 36 + tests/interface/test_generation_utils.py | 226 + tests/interface/test_interface.py | 176 + tests/interface/test_interface_application.py | 194 + .../interface/test_interface_device_proxy.py | 689 + tests/interface/test_interface_hal.py | 153 + tests/interface/test_interface_service.py | 786 + .../interface/test_model_yaml_verification.py | 318 + tests/interface/test_simulink.py | 150 + tests/interface/test_update_call_sources.py | 89 + tests/interface/test_update_model_yaml.py | 50 + tests/lib/__init__.py | 4 + tests/lib/test_helper_functions.py | 136 + tests/lib/test_logger.py | 10 + tests/pybuild/.pylintrc | 561 + tests/pybuild/__init__.py | 4 + tests/pybuild/a2l_merge_data.py | 10207 ++++++ .../cnfg_files/ActiveInterfaces/CAN-Input.csv | 11 + .../ActiveInterfaces/CAN-Output.csv | 10 + .../cnfg_files/ActiveInterfaces/EMS-Input.csv | 11 + .../ActiveInterfaces/EMS-Output.csv | 11 + .../cnfg_files/ActiveInterfaces/LIN-Input.csv | 9 + .../ActiveInterfaces/LIN-Output.csv | 9 + .../cnfg_files/ActiveInterfaces/Legend.csv | 14 + .../ActiveInterfaces/Private CAN-Input.csv | 5 + .../ActiveInterfaces/Private CAN-Output.csv | 9 + tests/pybuild/cnfg_files/BaseConfig.json | 27 + .../CoreIdNameDefinition_EventIDs.csv | 5 + .../CoreIdNameDefinition_FunctionIDs.csv | 5 + .../cnfg_files/CoreIdNameDefinition_IUMPR.csv | 5 + .../CoreIdNameDefinition_Mode$06.csv | 5 + .../CoreIdNameDefinition_Ranking.csv | 5 + .../cnfg_files/DIDIds_FullRange_Float32.csv | 5 + .../cnfg_files/DIDIds_FullRange_UInt32.csv | 5 + tests/pybuild/cnfg_files/LabelsplitCfg.json | 15 + .../Mock-gen_allsysteminfo-_get_core_ids.json | 278 + .../Mock-gen_allsysteminfo-_get_dids.json | 13 + .../Mock-unit_configs-get_per_unit_cfg.json | 13208 ++++++++ tests/pybuild/cnfg_files/ProjectCfg.json | 14 + ...MSInterfaceRequirements_ExportedToCSV.xlsm | Bin 0 -> 449555 bytes .../cnfg_files/SPM_Codeswitch_Setup.csv | 563 + .../cnfg_files/SPM_Codeswitch_Setup_PVC.csv | 25 + tests/pybuild/cnfg_files/VcAesSupM.a2l | 2296 ++ tests/pybuild/cnfg_files/VcVmcPmm.c | 27815 ++++++++++++++++ tests/pybuild/cnfg_files/VcVmcPmm.e | 14438 ++++++++ .../VcVmcPmm__HEP7_OPortMvd_LocalDefs.h | 17 + .../conf.local/interface_data_types.yml | 33 + .../cnfg_files/config_VcVmcPmm__HEP7.json | 17196 ++++++++++ .../expected_signals_in_nvm_structs.json | 1 + .../config_ invalid name.json | 171 + .../config_InvalidConfig.json | 168 + .../config_InvalidJsonData.json | 15 + tests/pybuild/cnfg_files/label_split_cfg.json | 29 + .../cnfg_files/nvm_structs_ref_critical.json | 68 + .../nvm_structs_ref_critical_duplicate.json | 87 + .../cnfg_files/nvm_structs_ref_dcl.json | 109 + .../cnfg_files/nvm_structs_ref_empty.json | 90 + .../nvm_structs_ref_empty_small.json | 90 + .../nvm_structs_ref_single_signal.json | 97 + .../cnfg_files/nvm_structs_ref_small.json | 132 + .../nvm_structs_ref_used_positions.json | 121 + .../nvm_structs_ref_wrong_type.json | 90 + tests/pybuild/cnfg_files/rasters.json | 14 + tests/pybuild/cnfg_files/signalinterface.yaml | 841 + .../test-repo/ConfigDocuments/BaseConfig.json | 28 + .../IF/VcTestRx/pybuild_cfg/VcTestRx.yaml | 514 + .../VcTestRx/pybuild_cfg/config_VcTestRx.json | 7432 +++++ .../IF/VcTestTx/pybuild_cfg/VcTestTx.yaml | 237 + .../VcTestTx/pybuild_cfg/config_VcTestTx.json | 3308 ++ .../ConfigDocuments/CSP_Codeswitch_Setup.csv | 636 + .../CSP_Codeswitch_Setup_Thermal.csv | 31 + .../CoreIdNameDefinition_EventIDs.csv | 4 + .../CoreIdNameDefinition_FunctionIDs.csv | 581 + .../CoreIdNameDefinition_IUMPR.csv | 206 + .../CoreIdNameDefinition_IUMPRDen.csv | 64 + .../CoreIdNameDefinition_Mode$06.csv | 101 + .../CoreIdNameDefinition_Ranking.csv | 511 + .../CATC/ConfigDocuments/DIDIds_Float32.csv | 51 + .../DIDIds_FullRange_Float32.csv | 385 + .../DIDIds_FullRange_UInt32.csv | 132 + .../CATC/ConfigDocuments/DIDIds_UInt32.csv | 8 + .../Projects/CSP/CATC/ProjectCfg.json | 74 + .../CSP/CATC/conf.local/DeviceDomains.json | 9 + .../CATC/conf.local/ServiceInterfaces.json | 5 + .../CSP/CATC/conf.local/cs-module.yml | 68 + .../CSP/CATC/conf.local/nvm_structs.json | 1 + .../CSP/CATC/conf.local/project_defaults.txt | 7 + .../Projects/CSP/CATC/conf.local/rasters.json | 69 + .../test-repo/Projects/CSP/hal_list.yaml | 8 + tests/pybuild/cnfg_files/test.a2l | 1545 + tests/pybuild/cnfg_files/test_consumer.a2l | 23 + tests/pybuild/cnfg_files/test_mrg__kalle.a2l | 2284 ++ tests/pybuild/cnfg_files/test_producer.a2l | 23 + .../cnfg_files/tl_aux_defines_VmcPmm__HE.h | 709 + .../unit_cfgs/Invalid_If_LocalDefs.h | 5 + .../unit_cfgs/Invalid_Include_LocalDefs.h | 5 + .../Valid_Local_Reference_LocalDefs.h | 5 + .../unit_cfgs/Valid_Reference_LocalDefs.h | 5 + .../VcAesSupM__gen3_OPortMvd_LocalDefs.h | 5 + .../unit_cfgs/VcDeDa_OPortMvd_LocalDefs.h | 13 + .../unit_cfgs/config_VcAesSupM__gen3.json | 171 + .../VcAesSupM__gen3_OPortMvd_LocalDefs.h | 5 + .../unit_cfgs_ec/config_VcAesSupM__gen3.json | 172 + .../pybuild/common_src_files/Tab1DIntpI1T0.c | 229 + tests/pybuild/core_cnfg.py | 67 + tests/pybuild/core_dummy_cnfg.py | 572 + tests/pybuild/io_cnfg.py | 282 + .../reference_files/EmptySigCheck.html | 65 + tests/pybuild/reference_files/EnumTest.m | 27 + tests/pybuild/reference_files/OPort_defs.json | 17 + .../SS1/test_model/VcTestModel.h | 109 + .../SS1/test_model/VcTestModel_par.m | 6 + .../SS1/test_model/VcTestModel_sgp.xml | 1027 + .../SS1/test_model/udt_VcTestModel.h | 52 + .../SS1/test_model1/VcTestModel1.h | 104 + .../SS1/test_model1/VcTestModel1_par.m | 4 + .../SS1/test_model1/udt_VcTestModel1.h | 43 + .../SS1/test_model2/VcTestModel2.h | 114 + .../SS1/test_model2/udt_VcTestModel2.h | 55 + .../SS1/test_model3/VcTestModel3.h | 0 .../SS1/test_model3/udt_VcTestModel3.h | 34 + tests/pybuild/reference_files/SigIf.html | 133 + tests/pybuild/reference_files/SigIfAll.html | 78 + tests/pybuild/reference_files/SimulinkEnum.m | 24 + .../pybuild/reference_files/VEA_VED4_SPA.a2l | 82 + tests/pybuild/reference_files/VcDummy_spm.c | 6 + tests/pybuild/reference_files/VcDummy_spm.h | 10 + .../reference_files/VcDummy_spm_with_enum.h | 11 + tests/pybuild/reference_files/VcExtINI.c | 9 + .../reference_files/WrongFileNameEnum.m | 24 + .../reference_files/config_OPort_defs.json | 17 + .../config_VcVmcPmm_OPort.json | 20581 ++++++++++++ .../config_VcVmcPmm__HEP7.json | 14720 ++++++++ .../reference_files/config_aux_defs.json | 38 + .../reference_files/config_combined.json | 14720 ++++++++ .../config_combined_header.json | 53 + .../reference_files/config_local_defs.json | 38 + .../reference_files/nvm_structs_ref_dcl.json | 147 + tests/pybuild/reference_files/ts_test.h | 4 + .../reference_files/vcc_nvm_struct_ref.a2l | 117 + .../reference_files/vcc_nvm_struct_ref.c | 26 + .../reference_files/vcc_nvm_struct_ref.h | 68 + .../vcc_nvm_struct_ref_critical_duplicate.a2l | 82 + .../vcc_nvm_struct_ref_critical_duplicate.h | 48 + .../vcc_nvm_struct_ref_critical_remove.a2l | 63 + .../vcc_nvm_struct_ref_critical_remove.h | 46 + .../vcc_nvm_structs_critical.c | 18 + .../vcc_nvm_structs_critical.h | 48 + .../vcc_nvm_structs_critical_bosch.a2l | 82 + .../vcc_nvm_structs_critical_denso.a2l | 82 + .../vcc_nvm_structs_ref_used_positions.h | 68 + tests/pybuild/src_files/mdl/C.mdl | 1 + tests/pybuild/src_files/mdl/C_par.m | 1 + tests/pybuild/src_files/mdl/SSA/A/A.mdl | 1 + tests/pybuild/src_files/mdl/SSA/A/A_par.m | 1 + tests/pybuild/src_files/mdl/SSB/B/B.mdl | 1 + tests/pybuild/src_files/mdl/SSB/B/B_par.m | 1 + tests/pybuild/src_files/mdl/SSB/B/test/BB.mdl | 1 + .../pybuild/src_files/mdl/SSB/B/test/BB_par.m | 1 + tests/pybuild/src_files/mdl/SSB/B1/B1.mdl | 1 + tests/pybuild/src_files/mdl/SSB/B1/B1_par.m | 1 + tests/pybuild/src_files/src_file1.c | 3 + tests/pybuild/src_files/src_file1.h | 6 + tests/pybuild/sw_cnfg.py | 1794 + tests/pybuild/test_a2l.py | 663 + tests/pybuild/test_a2l_merge.py | 1038 + tests/pybuild/test_a2l_templates.py | 764 + tests/pybuild/test_build.py | 345 + tests/pybuild/test_build_proj_configs.py | 32 + tests/pybuild/test_check_interface.py | 108 + tests/pybuild/test_config.py | 153 + tests/pybuild/test_core.py | 208 + tests/pybuild/test_core_dummy.py | 410 + tests/pybuild/test_create_conversion_table.py | 60 + tests/pybuild/test_dids.py | 968 + tests/pybuild/test_dummy_spm.py | 162 + tests/pybuild/test_environmentcheck.py | 59 + tests/pybuild/test_ext_dbg.py | 57 + tests/pybuild/test_ext_var.py | 205 + tests/pybuild/test_feature_configs.py | 156 + tests/pybuild/test_gen_allsysteminfo.py | 110 + tests/pybuild/test_gen_label_split.py | 331 + tests/pybuild/test_handcode_replacer.py | 85 + tests/pybuild/test_memory_section.py | 374 + tests/pybuild/test_nvm_def.py | 855 + tests/pybuild/test_pt_matlab.py | 134 + tests/pybuild/test_pt_win32.py | 77 + tests/pybuild/test_read_feat_cnfgs.py | 133 + tests/pybuild/test_read_sig_ifs.py | 180 + tests/pybuild/test_sched_funcs.py | 69 + tests/pybuild/test_sig_if_html_rep.py | 469 + tests/pybuild/test_sig_if_html_rep_all.py | 512 + tests/pybuild/test_sig_ifs.py | 857 + tests/pybuild/test_sig_incons_html_rep.py | 312 + tests/pybuild/test_sig_incons_html_rep_all.py | 368 + .../test_signal_inconsistency_check.py | 648 + tests/pybuild/test_signal_interfaces_yaml.py | 59 + tests/pybuild/test_signals.py | 91 + tests/pybuild/test_unit_configs.py | 472 + tests/pybuild/test_user_defined_types.py | 924 + tests/pybuild/test_versioncheck.py | 68 + tests/test_dummy.py | 2 - tests/zone_controller/test_calibration.py | 105 + .../zone_controller/test_composition_yaml.py | 157 + tox.ini | 3 +- 407 files changed, 212313 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 MANIFEST.in create mode 100644 NOTICE create mode 100644 README.md create mode 100644 docs/build_cmd.md create mode 100644 docs/design_standards.md create mode 100644 docs/images/DD_class_example.PNG create mode 100644 docs/images/DuplicatedDefines.PNG create mode 100644 docs/images/MissingSignals.PNG create mode 100644 docs/images/SignalFlow.PNG create mode 100644 docs/images/TL-DD-MACRO.jpg create mode 100644 docs/images/TL-DD-preprocessor1.jpg create mode 100644 docs/images/TL-DD-preprocessor2.jpg create mode 100644 docs/images/TL-preproc-lib.jpg create mode 100644 docs/images/UnusedSignals.PNG create mode 100644 docs/images/add-preproc-block.jpg create mode 100644 docs/images/change_to_actionport.jpg create mode 100644 docs/images/connect_to_subsystem.jpg create mode 100644 docs/images/new_build_system.PNG create mode 100644 docs/images/old_build_system.PNG create mode 100644 docs/images/powertrain_build-ECM-white.jpg create mode 100644 docs/images/powertrain_build-ECM.drawio create mode 100644 docs/images/powertrain_build-hi-white.jpg create mode 100644 docs/images/powertrain_build-hi.drawio create mode 100644 docs/images/powertrain_build-hp-white.jpg create mode 100644 docs/images/powertrain_build.png create mode 100644 docs/images/powertrain_buildDependencies.svg create mode 100644 docs/images/powertrain_build_gen_service_black.jpg create mode 100644 docs/images/powertrain_build_legacy.png create mode 100644 docs/images/reset_port_SL_example.PNG create mode 100644 docs/images/reset_port_workaround.PNG create mode 100644 docs/images/signal_inconsistency_log_example.png create mode 100644 docs/images/signal_inconsistency_project_index.png create mode 100644 docs/images/signal_inconsistency_unconsumed_csv_example.png create mode 100644 docs/images/supplier-consumer_Model.PNG create mode 100644 docs/images/ts_change.PNG create mode 100644 docs/index.md create mode 100644 docs/intro.md create mode 100644 docs/model_changes.md create mode 100644 docs/powertrain_build.md create mode 100644 docs/powertrain_build_architecture.md create mode 100644 docs/powertrain_build_deployment.md create mode 100644 docs/powertrain_build_introduction.md create mode 100644 docs/project_config.md create mode 100644 docs/signal_consistency_in_check.md create mode 100644 docs/signal_interface_tool.md create mode 100644 docs/signaling_in_powertrain_build.md create mode 100644 docs/todo_list.md create mode 100644 docs/unit_config.md create mode 100644 pybuild/__init__.py create mode 100644 pybuild/a2l.py create mode 100644 pybuild/a2l_merge.py create mode 100644 pybuild/a2l_templates.py create mode 100644 pybuild/build.py create mode 100644 pybuild/build_defs.py create mode 100644 pybuild/build_proj_config.py create mode 100644 pybuild/check_interface.py create mode 100644 pybuild/config.py create mode 100644 pybuild/core.py create mode 100644 pybuild/core_dummy.py create mode 100644 pybuild/create_conversion_table.py create mode 100644 pybuild/dids.py create mode 100644 pybuild/dummy.py create mode 100644 pybuild/dummy_spm.py create mode 100644 pybuild/environmentcheck.py create mode 100644 pybuild/ext_dbg.py create mode 100644 pybuild/ext_var.py create mode 100644 pybuild/feature_configs.py create mode 100644 pybuild/gen_allsysteminfo.py create mode 100644 pybuild/gen_label_split.py create mode 100644 pybuild/handcode_replacer.py create mode 100644 pybuild/html_report.py create mode 100644 pybuild/interface/README.md create mode 100644 pybuild/interface/__init__.py create mode 100644 pybuild/interface/application.py create mode 100644 pybuild/interface/base.py create mode 100644 pybuild/interface/csp_api.py create mode 100644 pybuild/interface/device_proxy.py create mode 100644 pybuild/interface/ems.py create mode 100644 pybuild/interface/export_global_vars.py create mode 100644 pybuild/interface/generate_adapters.py create mode 100644 pybuild/interface/generate_hi_interface.py create mode 100644 pybuild/interface/generate_service.py create mode 100644 pybuild/interface/generate_wrappers.py create mode 100644 pybuild/interface/generation_utils.py create mode 100644 pybuild/interface/hal.py create mode 100644 pybuild/interface/model_yaml_verification.py create mode 100644 pybuild/interface/service.py create mode 100644 pybuild/interface/simulink.py create mode 100644 pybuild/interface/update_call_sources.py create mode 100644 pybuild/interface/update_model_yaml.py create mode 100644 pybuild/interface/zone_controller.py create mode 100644 pybuild/lib/__init__.py create mode 100644 pybuild/lib/helper_functions.py create mode 100644 pybuild/lib/logger.py create mode 100644 pybuild/matlab_scripts/CodeGen/BuildAutomationPyBuild.m create mode 100644 pybuild/matlab_scripts/CodeGen/Generate_A2L.m create mode 100644 pybuild/matlab_scripts/CodeGen/generateTLUnit.m create mode 100644 pybuild/matlab_scripts/CodeGen/getAsilClassification.m create mode 100644 pybuild/matlab_scripts/CodeGen/modelConfiguredForTL.m create mode 100644 pybuild/matlab_scripts/CodeGen/moveDefOutports.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseCalMeasData.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseCoreIdentifiers.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseDIDs.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseInPorts.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseIncludeConfigs.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseModelInfo.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseNVM.m create mode 100644 pybuild/matlab_scripts/CodeGen/parseOutPorts.m create mode 100644 pybuild/matlab_scripts/CodeGen/parsePreProcBlks.m create mode 100644 pybuild/matlab_scripts/CodeGen/struct2JSON.m create mode 100644 pybuild/matlab_scripts/CodeGen/updateCodeSwConfig.m create mode 100644 pybuild/matlab_scripts/Init_PyBuild.m create mode 100644 pybuild/matlab_scripts/__init__.py create mode 100644 pybuild/matlab_scripts/helperFunctions/Get_Full_Name.m create mode 100644 pybuild/matlab_scripts/helperFunctions/Get_SrcLines.m create mode 100644 pybuild/matlab_scripts/helperFunctions/Init_Models.m create mode 100644 pybuild/matlab_scripts/helperFunctions/Init_Projects.m create mode 100644 pybuild/matlab_scripts/helperFunctions/Read_Units.m create mode 100644 pybuild/matlab_scripts/helperFunctions/SetProjectTimeSamples.m create mode 100644 pybuild/matlab_scripts/helperFunctions/Strip_Suffix.m create mode 100644 pybuild/matlab_scripts/helperFunctions/followLink.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getCodeSwitches.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getConsumerBlocks.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getDefBlock.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getDefOutport.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getDstBlocks.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getDstLines.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getInterfaceSignals.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getName.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getPath.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getProperValue.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getSrcBlocks.m create mode 100644 pybuild/matlab_scripts/helperFunctions/getSrcLines.m create mode 100644 pybuild/matlab_scripts/helperFunctions/loadLibraries.m create mode 100644 pybuild/matlab_scripts/helperFunctions/loadjson.m create mode 100644 pybuild/matlab_scripts/helperFunctions/modifyEnumStructField.m create mode 100644 pybuild/matlab_scripts/helperFunctions/removeConfigDuplicates.m create mode 100644 pybuild/matlab_scripts/helperFunctions/sortSystemByClass.m create mode 100644 pybuild/matlab_scripts/helperFunctions/tl_getfast.m create mode 100644 pybuild/matlab_scripts/helperFunctions/topLevelSystem.m create mode 100644 pybuild/matlab_scripts/helperFunctions/updateModels.m create mode 100644 pybuild/memory_section.py create mode 100644 pybuild/nvm_def.py create mode 100644 pybuild/problem_logger.py create mode 100644 pybuild/pt_matlab.py create mode 100644 pybuild/pt_win32.py create mode 100644 pybuild/replace_compu_tab_ref.py create mode 100644 pybuild/sched_funcs.py create mode 100644 pybuild/signal.py create mode 100644 pybuild/signal_if_html_rep.py create mode 100644 pybuild/signal_if_html_rep_all.py create mode 100644 pybuild/signal_incons_html_rep.py create mode 100644 pybuild/signal_incons_html_rep_all.py create mode 100644 pybuild/signal_incons_html_rep_base.py create mode 100644 pybuild/signal_inconsistency_check.py create mode 100644 pybuild/signal_interfaces.py create mode 100644 pybuild/templates/Index_SigCheck_All.html create mode 100644 pybuild/templates/Index_SigIf_All.html create mode 100644 pybuild/types.py create mode 100644 pybuild/unit_configs.py create mode 100644 pybuild/user_defined_types.py create mode 100644 pybuild/versioncheck.py create mode 100644 pybuild/wrapper.py create mode 100644 pybuild/xlrd_csv.py create mode 100644 pybuild/zone_controller/__init__.py create mode 100644 pybuild/zone_controller/calibration.py create mode 100644 pybuild/zone_controller/composition_yaml.py create mode 100644 requirements.txt create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 test_data/interface/test_generate_hi_interface/expected_result.json create mode 100644 test_data/interface/test_generate_hi_interface/test_case.json create mode 100644 test_data/interface/test_simulink/add_api_expected_result.json create mode 100644 test_data/interface/test_simulink/add_api_with_data_types_expected_result.json create mode 100644 test_data/interface/test_simulink/add_dp_expected_result.json create mode 100644 test_data/interface/test_simulink/add_dp_with_data_types_expected_result.json create mode 100644 test_data/interface/test_simulink/add_method_expected_methods.json create mode 100644 test_data/interface/test_simulink/add_method_expected_result.json create mode 100644 test_data/interface/test_simulink/add_method_output.json create mode 100644 test_data/interface/test_simulink/extend_adapters_expected_result.json create mode 100644 test_data/interface/test_simulink/extend_adapters_interface.json create mode 100644 test_data/interface/test_simulink/get_interface_dp_expected_result.json create mode 100644 test_data/interface/test_simulink/get_interface_hal_expected_result.json create mode 100644 test_data/interface/test_simulink/get_interface_sfw_expected_result.json create mode 100644 test_data/interface/test_simulink/get_interface_with_data_types_expected_result.json create mode 100644 test_data/interface/test_simulink/get_interface_with_double_enum_expected_result.json create mode 100644 test_data/interface/test_simulink/split_interface_expected_result.json create mode 100644 test_data/interface/test_simulink/test_case.json create mode 100644 test_data/interface/test_update_call_sources/test_case.json create mode 100644 test_data/zone_controller/test_composition_yaml/composition_yaml.py create mode 100644 test_data/zone_controller/test_composition_yaml/composition_yaml_setup.py create mode 100644 test_data/zone_controller/test_composition_yaml/composition_yaml_with_a2l_axis_data.py create mode 100644 test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_all_fields.py create mode 100644 test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_no_optional_fields.py create mode 100644 tests/interface/__init__.py create mode 100644 tests/interface/test_export_global_vars.py create mode 100644 tests/interface/test_generate_hi_interface.py create mode 100644 tests/interface/test_generation_utils.py create mode 100644 tests/interface/test_interface.py create mode 100644 tests/interface/test_interface_application.py create mode 100644 tests/interface/test_interface_device_proxy.py create mode 100644 tests/interface/test_interface_hal.py create mode 100644 tests/interface/test_interface_service.py create mode 100644 tests/interface/test_model_yaml_verification.py create mode 100644 tests/interface/test_simulink.py create mode 100644 tests/interface/test_update_call_sources.py create mode 100644 tests/interface/test_update_model_yaml.py create mode 100644 tests/lib/__init__.py create mode 100644 tests/lib/test_helper_functions.py create mode 100644 tests/lib/test_logger.py create mode 100644 tests/pybuild/.pylintrc create mode 100644 tests/pybuild/__init__.py create mode 100644 tests/pybuild/a2l_merge_data.py create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Input.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Output.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Input.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Output.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Input.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Output.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/Legend.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Input.csv create mode 100644 tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Output.csv create mode 100644 tests/pybuild/cnfg_files/BaseConfig.json create mode 100644 tests/pybuild/cnfg_files/CoreIdNameDefinition_EventIDs.csv create mode 100644 tests/pybuild/cnfg_files/CoreIdNameDefinition_FunctionIDs.csv create mode 100644 tests/pybuild/cnfg_files/CoreIdNameDefinition_IUMPR.csv create mode 100644 tests/pybuild/cnfg_files/CoreIdNameDefinition_Mode$06.csv create mode 100644 tests/pybuild/cnfg_files/CoreIdNameDefinition_Ranking.csv create mode 100644 tests/pybuild/cnfg_files/DIDIds_FullRange_Float32.csv create mode 100644 tests/pybuild/cnfg_files/DIDIds_FullRange_UInt32.csv create mode 100644 tests/pybuild/cnfg_files/LabelsplitCfg.json create mode 100644 tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_core_ids.json create mode 100644 tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_dids.json create mode 100644 tests/pybuild/cnfg_files/Mock-unit_configs-get_per_unit_cfg.json create mode 100644 tests/pybuild/cnfg_files/ProjectCfg.json create mode 100644 tests/pybuild/cnfg_files/SPMEMSInterfaceRequirements_ExportedToCSV.xlsm create mode 100644 tests/pybuild/cnfg_files/SPM_Codeswitch_Setup.csv create mode 100644 tests/pybuild/cnfg_files/SPM_Codeswitch_Setup_PVC.csv create mode 100644 tests/pybuild/cnfg_files/VcAesSupM.a2l create mode 100644 tests/pybuild/cnfg_files/VcVmcPmm.c create mode 100644 tests/pybuild/cnfg_files/VcVmcPmm.e create mode 100644 tests/pybuild/cnfg_files/VcVmcPmm__HEP7_OPortMvd_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/conf.local/interface_data_types.yml create mode 100644 tests/pybuild/cnfg_files/config_VcVmcPmm__HEP7.json create mode 100644 tests/pybuild/cnfg_files/expected_signals_in_nvm_structs.json create mode 100644 tests/pybuild/cnfg_files/invalid_unit_cfgs/config_ invalid name.json create mode 100644 tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidConfig.json create mode 100644 tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidJsonData.json create mode 100644 tests/pybuild/cnfg_files/label_split_cfg.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_critical.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_critical_duplicate.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_dcl.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_empty.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_empty_small.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_single_signal.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_small.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_used_positions.json create mode 100644 tests/pybuild/cnfg_files/nvm_structs_ref_wrong_type.json create mode 100644 tests/pybuild/cnfg_files/rasters.json create mode 100644 tests/pybuild/cnfg_files/signalinterface.yaml create mode 100644 tests/pybuild/cnfg_files/test-repo/ConfigDocuments/BaseConfig.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/VcTestRx.yaml create mode 100644 tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/config_VcTestRx.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/VcTestTx.yaml create mode 100644 tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/config_VcTestTx.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup_Thermal.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_EventIDs.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_FunctionIDs.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPR.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPRDen.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Mode$06.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Ranking.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_Float32.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_Float32.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_UInt32.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_UInt32.csv create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ProjectCfg.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/DeviceDomains.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/ServiceInterfaces.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/cs-module.yml create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/nvm_structs.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/project_defaults.txt create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/rasters.json create mode 100644 tests/pybuild/cnfg_files/test-repo/Projects/CSP/hal_list.yaml create mode 100644 tests/pybuild/cnfg_files/test.a2l create mode 100644 tests/pybuild/cnfg_files/test_consumer.a2l create mode 100644 tests/pybuild/cnfg_files/test_mrg__kalle.a2l create mode 100644 tests/pybuild/cnfg_files/test_producer.a2l create mode 100644 tests/pybuild/cnfg_files/tl_aux_defines_VmcPmm__HE.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/Invalid_If_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/Invalid_Include_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/Valid_Local_Reference_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/Valid_Reference_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/VcAesSupM__gen3_OPortMvd_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/VcDeDa_OPortMvd_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs/config_VcAesSupM__gen3.json create mode 100644 tests/pybuild/cnfg_files/unit_cfgs_ec/VcAesSupM__gen3_OPortMvd_LocalDefs.h create mode 100644 tests/pybuild/cnfg_files/unit_cfgs_ec/config_VcAesSupM__gen3.json create mode 100644 tests/pybuild/common_src_files/Tab1DIntpI1T0.c create mode 100644 tests/pybuild/core_cnfg.py create mode 100644 tests/pybuild/core_dummy_cnfg.py create mode 100644 tests/pybuild/io_cnfg.py create mode 100644 tests/pybuild/reference_files/EmptySigCheck.html create mode 100644 tests/pybuild/reference_files/EnumTest.m create mode 100644 tests/pybuild/reference_files/OPort_defs.json create mode 100644 tests/pybuild/reference_files/SS1/test_model/VcTestModel.h create mode 100644 tests/pybuild/reference_files/SS1/test_model/VcTestModel_par.m create mode 100644 tests/pybuild/reference_files/SS1/test_model/VcTestModel_sgp.xml create mode 100644 tests/pybuild/reference_files/SS1/test_model/udt_VcTestModel.h create mode 100644 tests/pybuild/reference_files/SS1/test_model1/VcTestModel1.h create mode 100644 tests/pybuild/reference_files/SS1/test_model1/VcTestModel1_par.m create mode 100644 tests/pybuild/reference_files/SS1/test_model1/udt_VcTestModel1.h create mode 100644 tests/pybuild/reference_files/SS1/test_model2/VcTestModel2.h create mode 100644 tests/pybuild/reference_files/SS1/test_model2/udt_VcTestModel2.h rename powertrain_build/__init__.py => tests/pybuild/reference_files/SS1/test_model3/VcTestModel3.h (100%) create mode 100644 tests/pybuild/reference_files/SS1/test_model3/udt_VcTestModel3.h create mode 100644 tests/pybuild/reference_files/SigIf.html create mode 100644 tests/pybuild/reference_files/SigIfAll.html create mode 100644 tests/pybuild/reference_files/SimulinkEnum.m create mode 100644 tests/pybuild/reference_files/VEA_VED4_SPA.a2l create mode 100644 tests/pybuild/reference_files/VcDummy_spm.c create mode 100644 tests/pybuild/reference_files/VcDummy_spm.h create mode 100644 tests/pybuild/reference_files/VcDummy_spm_with_enum.h create mode 100644 tests/pybuild/reference_files/VcExtINI.c create mode 100644 tests/pybuild/reference_files/WrongFileNameEnum.m create mode 100644 tests/pybuild/reference_files/config_OPort_defs.json create mode 100644 tests/pybuild/reference_files/config_VcVmcPmm_OPort.json create mode 100644 tests/pybuild/reference_files/config_VcVmcPmm__HEP7.json create mode 100644 tests/pybuild/reference_files/config_aux_defs.json create mode 100644 tests/pybuild/reference_files/config_combined.json create mode 100644 tests/pybuild/reference_files/config_combined_header.json create mode 100644 tests/pybuild/reference_files/config_local_defs.json create mode 100644 tests/pybuild/reference_files/nvm_structs_ref_dcl.json create mode 100644 tests/pybuild/reference_files/ts_test.h create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref.a2l create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref.c create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref.h create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.a2l create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.h create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.a2l create mode 100644 tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.h create mode 100644 tests/pybuild/reference_files/vcc_nvm_structs_critical.c create mode 100644 tests/pybuild/reference_files/vcc_nvm_structs_critical.h create mode 100644 tests/pybuild/reference_files/vcc_nvm_structs_critical_bosch.a2l create mode 100644 tests/pybuild/reference_files/vcc_nvm_structs_critical_denso.a2l create mode 100644 tests/pybuild/reference_files/vcc_nvm_structs_ref_used_positions.h create mode 100644 tests/pybuild/src_files/mdl/C.mdl create mode 100644 tests/pybuild/src_files/mdl/C_par.m create mode 100644 tests/pybuild/src_files/mdl/SSA/A/A.mdl create mode 100644 tests/pybuild/src_files/mdl/SSA/A/A_par.m create mode 100644 tests/pybuild/src_files/mdl/SSB/B/B.mdl create mode 100644 tests/pybuild/src_files/mdl/SSB/B/B_par.m create mode 100644 tests/pybuild/src_files/mdl/SSB/B/test/BB.mdl create mode 100644 tests/pybuild/src_files/mdl/SSB/B/test/BB_par.m create mode 100644 tests/pybuild/src_files/mdl/SSB/B1/B1.mdl create mode 100644 tests/pybuild/src_files/mdl/SSB/B1/B1_par.m create mode 100644 tests/pybuild/src_files/src_file1.c create mode 100644 tests/pybuild/src_files/src_file1.h create mode 100644 tests/pybuild/sw_cnfg.py create mode 100644 tests/pybuild/test_a2l.py create mode 100644 tests/pybuild/test_a2l_merge.py create mode 100644 tests/pybuild/test_a2l_templates.py create mode 100644 tests/pybuild/test_build.py create mode 100644 tests/pybuild/test_build_proj_configs.py create mode 100644 tests/pybuild/test_check_interface.py create mode 100644 tests/pybuild/test_config.py create mode 100644 tests/pybuild/test_core.py create mode 100644 tests/pybuild/test_core_dummy.py create mode 100644 tests/pybuild/test_create_conversion_table.py create mode 100644 tests/pybuild/test_dids.py create mode 100644 tests/pybuild/test_dummy_spm.py create mode 100644 tests/pybuild/test_environmentcheck.py create mode 100644 tests/pybuild/test_ext_dbg.py create mode 100644 tests/pybuild/test_ext_var.py create mode 100644 tests/pybuild/test_feature_configs.py create mode 100644 tests/pybuild/test_gen_allsysteminfo.py create mode 100644 tests/pybuild/test_gen_label_split.py create mode 100644 tests/pybuild/test_handcode_replacer.py create mode 100644 tests/pybuild/test_memory_section.py create mode 100644 tests/pybuild/test_nvm_def.py create mode 100644 tests/pybuild/test_pt_matlab.py create mode 100644 tests/pybuild/test_pt_win32.py create mode 100644 tests/pybuild/test_read_feat_cnfgs.py create mode 100644 tests/pybuild/test_read_sig_ifs.py create mode 100644 tests/pybuild/test_sched_funcs.py create mode 100644 tests/pybuild/test_sig_if_html_rep.py create mode 100644 tests/pybuild/test_sig_if_html_rep_all.py create mode 100644 tests/pybuild/test_sig_ifs.py create mode 100644 tests/pybuild/test_sig_incons_html_rep.py create mode 100644 tests/pybuild/test_sig_incons_html_rep_all.py create mode 100644 tests/pybuild/test_signal_inconsistency_check.py create mode 100644 tests/pybuild/test_signal_interfaces_yaml.py create mode 100644 tests/pybuild/test_signals.py create mode 100644 tests/pybuild/test_unit_configs.py create mode 100644 tests/pybuild/test_user_defined_types.py create mode 100644 tests/pybuild/test_versioncheck.py delete mode 100644 tests/test_dummy.py create mode 100644 tests/zone_controller/test_calibration.py create mode 100644 tests/zone_controller/test_composition_yaml.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7bc5498 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Ignore python files. +*.pyc +.tox +.cache +.pytest_cache +.coverage +.venv + +# Ignore IDE files. +.idea +.vscode + +# Ignore pytest generate files. +**/output/ + +# Ignore generated signal check reports. +**/Reports + +# Ignore setuptools distribution folder. +/dist/ +/build/ + +# Ignore python egg metadata, regenerated from source files by setuptools. +/*.egg-info +/.eggs/ + +# Ignore files generated by pbr +AUTHORS +ChangeLog diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..199214d --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +. Translations are available at +. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2b8b4f9 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing to Our Project + +We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features +- Becoming a maintainer + +## We Develop with Gerrit + +We use Gerrit for code review. You can propose changes by submitting a patch to Gerrit. + +## We Use [Coding Conventions](#) + +To ensure consistency throughout the source code, please follow these coding conventions. + +## Report bugs using Storyboard + +We use [Storyboard](https://storyboard.openstack.org/#!/project/volvocars/powertrain-build) issues to track public bugs. Report a bug by opening a new issue. + +## Write bug reports with detail, background, and sample code + +A bug report with an isolated way to reproduce the problem is ideal. Here's an example: + +> Short and descriptive example bug report title +> +> A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. +> +> 1. This is the first step +> 2. This is the second step +> 3. Further steps, etc. +> +> `` +> +> Any other information you want to share that is relevant to the issue being reported. + +## Use a Consistent Coding Style + +We are using a specific coding style. Please follow it to make the codebase easier to read and maintain. + +## License + +By contributing, you agree that your contributions will be licensed under its existing license. + +## References + +Include any references or links that contributors may find useful, such as: + +- Gerrit documentation +- Coding style guidelines +- Other reference material + +Thank you for contributing! diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..480a86e --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright 2024 Volvo Car Corporation + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..e939f9e --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,21 @@ +include pybuild/templates/*.html +include pybuild/static_code/DIDApiTL/* +include pybuild/static_code/DIDApiEC/* +include pybuild/static_code/bosch_headers/* +include pybuild/static_code/csp_headers/* +include pybuild/static_code/denso_headers/* +include pybuild/static_code/hi_headers/* +include pybuild/static_code/BoschCoreAPIEC/* +include pybuild/static_code/BoschCoreAPITL/* +include pybuild/static_code/CSPCoreAPITL/* +include pybuild/static_code/CSPCoreAPIEC/* +include pybuild/static_code/DensoCoreAPIEC/* +include pybuild/static_code/DensoCoreAPITL/* +include test-requirements.txt +include pybuild/matlab_scripts/CodeGen/* +include pybuild/matlab_scripts/helperFunctions/* +include pybuild/matlab_scripts/* +include requirements.txt +prune pybuild/test +prune pybuild/interface/test +prune pybuild/lib/test diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..902a289 --- /dev/null +++ b/NOTICE @@ -0,0 +1,3122 @@ +Copyright 2024 + +[pybuild : ci] + +Phase: DEVELOPMENT +Distribution: EXTERNAL + +Components: + +exceptiongroup 1.2.1 : MIT License +flake8 7.0.0 : MIT License +gitdb 4.0.11 : BSD 3-clause "New" or "Revised" License +GitPython 3.1.43 : BSD 3-clause "New" or "Revised" License +importlib-resources 5.4.0 : Apache License 2.0 +mccabe 0.7.0 : Expat License +NumPy 1.24.4 : BSD 3-clause "New" or "Revised" License +Packaging 24.0 : Apache License 2.0 +pbr 6.0.0 : Apache License 2.0 +pycodestyle 2.11.1 : MIT License +Pyflakes 3.2.0 : MIT License +python-pluggy 1.5.0 : Expat License +RonnyPfannschmidt/iniconfig 2.0.0 : MIT License +ruamel-yaml 0.18.6 : MIT License +ruamel.yaml.clib 0.2.8 : MIT License +SciPy: Scientific Library for Python 1.9.1 : BSD 3-clause "New" or "Revised" License +smmap 5.0.1 : BSD 3-clause "New" or "Revised" License +tomli 2.0.1 : MIT License +voluptuous 0.14.2 : BSD 3-clause "New" or "Revised" License +zipp 3.18.2 : MIT License + +Copyright Text: + +exceptiongroup 1.2.1 pypi:exceptiongroup/1.2.1 + Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, + Copyright (c) 2022 Alex Gr +gitdb 4.0.11 pypi:gitdb/4.0.11 + Copyright (C) 2010, 2011 Sebastian Thiel and contributorsAll rights reserved + Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors + Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +GitPython 3.1.43 pypi:GitPython/3.1.43 + Copyright (C) 2008, 2009 Michael Trier and contributors, 2010-2015 Sebastian Thiel" + Copyright (C) 2008, 2009 Michael Trier and contributorsAll rights reserved + Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors +mccabe 0.7.0 pypi:mccabe/0.7.0 + Copyright © 2011-2013 Tarek Ziade + Copyright © 2013 Florent Xicluna + Copyright © Ned Batchelder +NumPy 1.24.4 pypi:numpy/1.24.4 + (C) assert_equal(type(c + (C) assert_equal(type(c # check that accessing nested structures keep record type, but # not for subarrays, non-void structures, non-structured voids test_dtype = + (C) assert_equal(type(np.polyval( + (C) assert_equal(type(np.polyval( def test_polyvalfromroots(self): + (C)np.asanyarray(A)np.asanyarray(B)np.asanyarray(B, dtype=int) + (C)np.ascontiguousarray(A)np.ascontiguousarray(B) + (C)np.asfortranarray(A)np.asfortranarray(B) + (C)np.atleast_1d(A)np.atleast_1d(C, C)np.atleast_1d(C, A)np.atleast_1d(A, A) + (C)np.atleast_3d(C)np.vstack([C, C])np.vstack([C, A])np.vstack([A, A]) + (C)np.empty_like(B)np.empty_like(B, dtype=np.int64)np.full_like(A, i8)np.full_like(C, i8)np.full_like(B, i8)np.full_like(B, i8, dtype=np.int64) + (C)np.linspace(0, 2)np.linspace(0.5, [0, 1, 2])np.linspace([0, 1, 2], 3)np.linspace(0j, 2)np.linspace(0, 2, num=10)np.linspace(0, 2, endpoint=True)np.linspace(0, 2, retstep=True)np.l + (C)np.ones_like(B)np.ones_like(B, dtype=np.int64)np.empty_like(A) + (C)np.require(A)np.require(B)np.require(B, dtype=int)np.require(B, requirements=None)np.require(B, requirements="E")np.require(B, requirements=["ENSUREARRAY"])np.require(B, requirement + (C)np.zeros_like(B)np.zeros_like(B, dtype=np.int64)np.ones_like(A) + Copyright 1999, 2000, 2001 Regents of the University of California.Released for unlimited redistribution. + Copyright 1999, 2000, 2001 Regents of the University of California.Released for unlimited redistribution.* Adapted for numpy_core 2005 by Travis Oliphant and (mainly) Paul Dubois.* Subclassing + Copyright 1999,2000 Pearu Peterson all rights reserved + Copyright 1999-2004 Pearu Peterson all rights reserved + Copyright 1999 - 2011 Pearu Peterson all rights reserved + Copyright 1999--2011 Pearu Peterson all rights reserved + Copyright 2000 Pearu Peterson all rights reserved + Copyright 2001-2005 Pearu Peterson all rights reserved + Copyright 2002 Pearu Peterson all rights reserved + copyright 2010 DavidWolever . All rights reserved + copyright 2010 DavidWolever . All rights reserved + Copyright Absoft Corporation 1994-1998 mV2; Cray Research, Inc. 1994-1996 CF90 (2.x.x.x f36t87) Version 2.3 Wed Apr 19, 2006 13:05:16 + Copyright Absoft Corporation 1994-1998 mV2; Cray Research, Inc. 1994-1996 CF90 (2.x.x.x f36t87) Version 2.3 Wed Apr 19, 2006 13:05:16 # samt5735(8)$ f90 -V -c dummy.f + Copyright Absoft Corporation 1994-2002; Absoft Pro FORTRAN Version 8.0 # Note that fink installs g77 as f77, so need to use f90 for detection. + Copyright Absoft Corporation 1994-2002; Absoft Pro FORTRAN Version 8.0 # Note that fink installs g77 as f77, so need to use f90 for detection. executables = { 'version_cmd' : Non + Copyright Absoft Corporation. r' (?P[^\s*,]*)(.*?Absoft Corp|)' + Copyright Absoft Corporation. r' (?P[^\s*,]*)(.*?Absoft Corp|)' # on windows: f90 -V -c dummy.f + COPYRIGHT$ Additional copyrights may follow $HEADER$ + Copyright (c) 1992-2013 The University of Tennessee and The University of Tennessee Research Foundation. All rights reserved. + Copyright (c) 1992-2013 The University of Tennessee and The University of Tennessee Research Foundation. All rights reserved. + Copyright (c) 2000-2013 The University of California Berkeley. All rights reserved. + Copyright (c) 2000-2013 The University of California Berkeley. All rights reserved. + Copyright (C) 2002-2017 Free Software Foundation, Inc. + Copyright (C) 2002-2017 Free Software Foundation, Inc. + Copyright (c) 2005-2022, NumPy Developers.All rights reserved + Copyright (c) 2005-2022, NumPy Developers.All rights reserved + Copyright (c) 2006-2013 The University of Colorado Denver. All rights reserved. + Copyright (c) 2006-2013 The University of Colorado Denver. All rights reserved. + Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2010 - 2019 ridiculous_fish, + Copyright (C) 2010 - 2019 ridiculous_fish, + Copyright (c) 2011-2014, The OpenBLAS Project All rights reserved + Copyright (c) 2011-2014, The OpenBLAS Project All rights reserved + Copyright (C) 2016 - 2019 Kim Walisch, + Copyright (C) 2016 - 2019 Kim Walisch, + Copyright (C) 2016 - 2019 Kim Walisch, + Copyright (C) 2016 - 2019 Kim Walisch, This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any + Copyright (c) Donald Stufft and individual contributors.# All rights reserved + Copyright (c) Donald Stufft and individual contributors.# All rights reserved + (C) or column-major (Fortran) order. The function * array_from_pyobj is very flexible about its Python object argument * that can be any number, list, tuple, or array. * * array_from_pyobj is + (C) or column-major (Fortran) order. The function * array_from_pyobj is very flexible about its Python object argument * that can be any number, list, tuple, or array. * * array_from_pyobj is used + (C) The data is in a single, C-style contiguous segment. F_CONTIGUOUS (F) The data is in a single, Fortran-style contiguous segment. OWNDATA (O) The array owns the + (C) The data is in a single, C-style contiguous segment. F_CONTIGUOUS (F) The data is in a single, Fortran-style contiguous segment. OWNDATA (O) The array owns the memo + (C) want = np.array( assert_equal(have, want) + (C) want = np.array( assert_equal(have, want) def test_for_equal_names(self): +Packaging 24.0 pypi:packaging/24.0 + copyright = ABOUT + Copyright (c) Donald Stufft and individual contributors.All rights reserved +pbr 6.0.0 pypi:pbr/6.0.0 + Copyright 2010-2011 OpenStack Foundation + Copyright 2011 OpenStack Foundation + Copyright 2012-2013 Hewlett-Packard Development Company, L.P. + Copyright 2012 OpenStack Foundation + Copyright 2012 Red Hat, Inc. + Copyright 2013 Hewlett-Packard Development Company, L.P. + copyright = '2013, OpenStack Foundation + Copyright 2014 Hewlett-Packard Development Company, L.P. + Copyright 2018 Red Hat, Inc. + Copyright 2021 Monty Taylor + Copyright (c) 2011 OpenStack Foundation + Copyright (C) 2013 Association of Universities for Research in Astronomy# (AURA) + Copyright (c) 2013 Hewlett-Packard Development Company, L.P. + Copyright (c) 2013 New Dream Network, LLC (DreamHost) + Copyright (c) 2013 Testrepository Contributors + Copyright (c) 2015 Hewlett-Packard Development Company, L.P. (HP) + Copyright (C) 2020 Red Hat, Inc. +pycodestyle 2.11.1 pypi:pycodestyle/2.11.1 + Copyright © 2006-2009 Johann C. Rocholl + Copyright © 2009-2014 Florent Xicluna + Copyright © 2014-2020 Ian Lee + Copyright (C) 2006-2009 Johann C. Rocholl + Copyright (C) 2009-2014 Florent Xicluna + Copyright (C) 2014-2016 Ian Lee +RonnyPfannschmidt/iniconfig 2.0.0 pypi:iniconfig/2.0.0 + (C) Ronny Pfannschmidt, Holger Krekel -- MIT licensed"""from __future__ import annotationsfrom typing import ( Callable, Iterator, Mapping, Optional, Tuple, TypeVar, Uni +ruamel.yaml.clib 0.2.8 pypi:ruamel.yaml.clib/0.2.8 + Copyright (c) 2006 Kirill Simonov + Copyright (c) 2019-2023 Anthon van der Neut, Ruamel bvba +SciPy: Scientific Library for Python 1.9.1 pypi:scipy/1.9.1 + (C) 2003, C. Bond. All rights reserved + (C) 2015-2020 Niall Douglas (7 commits)File Created: August 2015 + (C) 2017-2020 Niall Douglas (10 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (10 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (11 commits)File Created: July 2017 + (C) 2017-2020 Niall Douglas (12 commits)File Created: Nov 2017 + (C) 2017-2020 Niall Douglas (12 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (13 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (14 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (1 commit)File Created: June 2017 + (C) 2017-2020 Niall Douglas (20 commits)File Created: July 2017 + (C) 2017-2020 Niall Douglas (20 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (21 commits)File Created: July 2017 + (C) 2017-2020 Niall Douglas (225 commits) + (C) 2017-2020 Niall Douglas (24 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (25 commits)File Created: July 2017 + (C) 2017-2020 Niall Douglas (2 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (2 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (3 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (4 commits) + (C) 2017-2020 Niall Douglas (5 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (6 commits) and Andrzej KrzemieFile Created: Oct 2017 + (C) 2017-2020 Niall Douglas (6 commits)File Created: Aug 2017 + (C) 2017-2020 Niall Douglas (6 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (6 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (7 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (7 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (8 commits)File Created: June 2017 + (C) 2017-2020 Niall Douglas (8 commits)File Created: Oct 2017 + (C) 2017-2020 Niall Douglas (9 commits)File Created: Oct 2017 + (C) 2018 - 2019 Niall Douglas (5 commits)File Created: Feb 2018 + (C) 2018-2020 Niall Douglas (11 commits)File Created: Apr 2018 + (C) 2018-2020 Niall Douglas (17 commits)File Created: Apr 2018 + (C) 2018-2020 Niall Douglas (3 commits)File Created: March 2018 + (C) 2018-2020 Niall Douglas (4 commits)File Created: Mar 2018 + (C) 2018-2020 Niall Douglas (4 commits)File Created: Sep 2018 + (C) 2018-2020 Niall Douglas (5 commits)File Created: Aug 2018 + (C) 2018 - 2020 Niall Douglas (5 commits)File Created: Feb 2018 + (C) 2018-2020 Niall Douglas (5 commits)File Created: Feb 2018 + (C) 2018-2020 Niall Douglas (5 commits)File Created: Jun 2018 + (C) 2018-2020 Niall Douglas (5 commits)File Created: June 2018 + (C) 2018 - 2020 Niall Douglas (5 commits)File Created: May 2020 + (C) 2018-2020 Niall Douglas (5 commits)File Created: Sep 2018 + (C) 2018-2020 Niall Douglas (6 commits)File Created: March 2018 + (C) 2018-2020 Niall Douglas (8 commits)File Created: March 2018 + (C) 2019-2020 Niall Douglas (12 commits)File Created: Oct 2019 + (C) 2020 Niall Douglas (11 commits)File Created: Jan 2020 + (C) 2020 Niall Douglas (5 commits)File Created: Jan 2020 + (C) A = A + (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469 + (C) and B by diag(R) + (C) as c: del c + (C) as c: ... # do something ... del c + (C) as c: ... # do something ... del c Traceback (most recent call last): ... + (C) as c: pass + (C) assert_array_equal(C + (C) assert_array_equal(C.A, D.A) + (C) assert_array_equal(C assert_array_equal(C[:, [2]], D[:, 2].toarray()) + (C) assert_array_equal(row_ind, np.arange(n)) assert_array_equal(col_ind, np.arange(n)) + (C) assert len(row_ind) == 0 assert len(col_ind) == 0 + (C)*B; * if A->Stype = SLU_NR: + (C)*B; * if A->Stype = SLU_NR: + (C)*B (if options->Trans * = TRANS or CONJ). * * 1.2. Permute columns of A, forming A*Pc, where Pc is a permutation * matrix that usually preserves sparsity. * + (C)*B (if options->Trans * = TRANS or CONJ). * * 1.2. Permute columns of A, forming A*Pc, where Pc is a permutation * matrix that usually preserves sparsity. * For more details of + (C)*B; * if options->Trans = TRANS or CONJ and equed = 'R' of 'B', * B is overwritten by diag(R)*B. * * X (output) SuperMatrix* * X has types: Stype = + (C)*B; * if options->Trans = TRANS or CONJ and equed = 'R' of 'B', * B is overwritten by diag(R)*B. * * X (output) SuperMatrix* * X has types: Stype = SLU_DN, Dtype = SLU_C, Mtype = + (C)*B; * if options->Trans = TRANS or CONJ and equed = 'R' of 'B', * B is overwritten by diag(R)*B. * * X (output) SuperMatrix* * X has types: Stype = SLU_DN, Dtype = SLU_D, Mtype = + (C)*B; * if options->Trans = TRANS or CONJ and equed = 'R' of 'B', * B is overwritten by diag(R)*B. * * X (output) SuperMatrix* * X has types: Stype = SLU_DN, Dtype = SLU_S, Mtype = + (C)*B; * if options->Trans = TRANS or CONJ and equed = 'R' of 'B', * B is overwritten by diag(R)*B. * * X (output) SuperMatrix* * X has types: Stype = SLU_DN, Dtype = SLU_Z, Mtype = + (C)*B (if trans = * * 2.2. Permute columns of transpose(A) (rows of A), * forming transpose(A)*Pc, where Pc is a permutation matrix that * usually preserves sparsity. * + (C)*B (if trans = * * 2.2. Permute columns of transpose(A) (rows of A), * forming transpose(A)*Pc, where Pc is a permutation matrix that * usually preserves sparsity. * For more de + (C)* BOOST_CONTRACT_DETAIL_NAME1(obj) \ BOOST_CONTRACT_DETAIL_TVARIADIC_COMMA(arity) \ BOOST_CONTRACT_DETAIL_TVARIADIC_FPARAMS_Z(z, arity, \ BOOST_CONTRACT_DETA + (C) BOOST_MPL_AUX_VALUE_WKND(C)#else + (C)*B * options->Trans = CONJ: + (C)*B * options->Trans = CONJ: + (C)*B * Whether or not the system will be equilibrated depends on the * scaling of the matrix A, but if equilibration is used, A is + (C)*B * Whether or not the system will be equilibrated depends on the * scaling of the matrix A, but if equilibration is used, A' is + (C)*B * Whether or not the system will be equilibrated depends on the * scaling of the matrix A, but if equilibration is used, A is + (C)*B * Whether or not the system will be equilibrated depends on the * scaling of the matrix A, but if equilibration is used, A' is + (C) C# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) \ ::boost::mpl::aux::value_wknd< C > \/**/#endif + (C) Copyright 2002, 2003 Beman Dawes Boost.Filesystem + (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal. + (C) Copyright 2002-2008 Robert Ramey and Joaquin M Lopez Munoz + (C) Copyright 2002-2009 Robert Ramey - http://www.rrsd.com . + (C) Copyright 2002-2014 Robert Ramey - http://www.rrsd.com . + (C) Copyright 2002-2020 Robert Ramey - http://www.rrsd.com . + (C) Copyright 2002-4 Pavel Vozenilek . + (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey + (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . + (C) Copyright 2003-2007 Jonathan Turkanis + (C) Copyright 2003-4 Pavel Vozenilek and Robert Ramey - http://www.rrsd.com. + (C) Copyright 2004-2007 Jonathan Turkanis + (C) Copyright 2004-2009 Robert Ramey, Martin Ecker and Takatoshi Kondo + (C) Copyright 2004 Pavel Vozenilek. + (C) Copyright 2004 Robert Ramey and Martin Ecker + (C) Copyright 2004 Robert Ramey - http://www.rrsd.com . + (C) Copyright 2005-2006 Matthias Troyer + (C) Copyright 2005-2007 Jonathan Turkanis + (C) Copyright 2005-2007 Matthias Troyer + (C) Copyright 2005-7 Anthony Williams + (C) Copyright 2005-8 Anthony Williams + (C) Copyright 2005 John Maddock + (C) Copyright 2005 Matthias Troyer + (C) Copyright 2005 Matthias Troyer . + (C) Copyright 2005 Matthias Troyer + (C) Copyright 2005 Matthias Troyer and Dave Abrahams + (C) Copyright 2005 Robert Ramey - http://www.rrsd.com . + (C) Copyright 2005 Robert Ramey - http://www.rrsd.com + (C) Copyright 2006-7 Anthony Williams + (C) Copyright 2006-8 Anthony Williams + (C) Copyright 2006 David Abrahams - http://www.boost.org.// implementation of class export functionality. This is an alternative to// "forward declaration" method to provoke instantiation of derive + (C) Copyright 2006 Douglas Gregor + (C) Copyright 2006 Douglas Gregor + (C) Copyright 2007-10 Anthony Williams + (C) Copyright 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker + (C) Copyright 2007-2009 Andrew Sutton + (C) Copyright 2007-2010 Anthony Williams + (C) Copyright 2007-8 Anthony Williams + (C) Copyright 2007-8 Anthony Williams + (C) Copyright 2007-9 Anthony Williams + (C) Copyright 2007-9 Anthony Williams + (C) Copyright 2007 Andrew Sutton + (C) Copyright 2007 Anthony Williams + (C) Copyright 2007 Anthony Williams#ifndef THREAD_HEAP_ALLOC_HPP#define THREAD_HEAP_ALLOC_HPP#include #include #include Stype = SLU_NR: + (C) * equed = * If A->Stype = SLU_NR: + (C) * equed = * * If options->RowPerm = LargeDiag_MC64, MC64 is used to scale and permute * the matrix to an I-matrix, that is A is modified as follows: + (C) * equed = * * perm_c (input/output) int* * If A->Stype = SLU_NC, Column permutation vector of size A->ncol, * which defines the permutation matrix Pc; perm_c[i] = j mean + (C) # fails if sparse or scalar; that # this is only needed for original simplex (never sparse) except TypeError: + (C) @f //! `Applicative` `F` is also a `Monad`, such functions taking normal //! values but returning monadic values are called _monadic functions_. //! To compose them, we obviously can't + (C) @f //! @f$ g : A \to M(B) @f$, the signature is //! @f$ //! \mathtt{monadic\_compose} //! : (B \to M(C)) \times (A \to M(B)) \to (A \to M(C)) //! @f$. //! / + (C) @f //! must be satisfied: + (C) @f //! //! @param g //! A monadic function with signature @f$ A \to M(B) @f$. + (C) @f //! we could simply set //! @code //! monadic_compose(g, f)(x) = joker(transform(f(x), g)) //! @endcode //! //! and we would be happy. It turns out that `flatten` is + (C) IF (DABS((WA-WA0)/WA).LT.EPS.AND.K.GT.10) GO TO 3010 WA0=WA ELSE IF (W0.GT.2.5.AND.W0.LT.4.5) THEN M=85 C=Z0 CF1=Z0 CF + (C) (if options->Trans = NOTRANS) or diag(R) * (if options->Trans = TRANS or CONJ) so that it solves the * original system before equilibration. * * 1.9. options for ILU only * 1) + (C) (if options->Trans = NOTRANS) or diag(R) * (if options->Trans = TRANS or CONJ) so that it solves the * original system before equilibration. * * 2. If A is stored row-wis + (C) (if options->Trans = NOTRANS) or diag(R) * (if options->Trans = TRANS or CONJ) so that it solves the * original system before equilibration. * * See supermatrix.h for the + (C) (if options->Trans = NOTRANS) or diag(R) * (if options->Trans = TRANS or CONJ) so that it solves the * original system before equilibration. * * See supermatrix.h for the definitio + (C) if sps.issparse(A) else A c = c*C + (C) # improve precision of result for i in range(2): + (C) * in order to obtain the solution to the original system. * * FERR (output) double*, dimension (B->ncol) * The estimated forward error bound for each solution v + (C) * in order to obtain the solution to the original system. * * FERR (output) float*, dimension (B->ncol) * The estimated forward error bound for each solution ve + (C) *inv(diag(C)) * options->Trans = TRANS: + (C) *inv(diag(C)) * options->Trans = TRANS: + (C) is not known a priori, a conservative bound is: * nnz(C) <= nnz(A) + nnz(B) * * Note: + (C) MD, ND = _shape_or_none(D) + (C) needs to be assigned for the test # to function correctly. It is assigned to c, but c itself is # not referenced in the body of the with, it is only there for # the refcou + (C) NM2=2 CALL KMN(M,N,C,CV,KD,DF,DN,CK1,CK2) CALL LPMNS(M,NM2,X,PM,PD) CALL LQMNS(M,NM2,X,QM,QD) SU0=0.0D0 SW=0.0D0 DO 10 K=1,NM J=2* + Copyright 1984, 1987, 1988, 1992, 2000 by Stephen L. Moshier*/ + Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984, 1987, 1988, 2000 by Stephen L. Moshier */ + Copyright 1984, 1987, 1988, 2000 by Stephen L. Moshier * * And other parts: * + Copyright 1984, 1987, 1988 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984, 1987, 1988 by Stephen L. MoshierDirect inquiries to 30 Frost Street, Cambridge, MA 02140*/ + Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier */ + Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier*/ + Copyright 1984, 1987, 1989, 1992 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984, 1987, 1989, 1995 by Stephen L. Moshier */ + Copyright 1984, 1987, 1989, 1995 by Stephen L. Moshier*/ + Copyright 1984, 1987, 1989, 2000 by Stephen L. Moshier */ + Copyright 1984, 1987, 1989, 2000 by Stephen L. Moshier*/ + Copyright 1984, 1987, 1989 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984, 1987, 1989 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 * * Feb, 2002: altered by Travis Oliphant * so that it is called with argument m * (wh + Copyright 1984, 1987, 1989 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */#include #include + Copyright 1984, 1987, 1992, 2000 by Stephen L. Moshier */ + Copyright 1984, 1987, 1993 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984, 1987, 1995 by Stephen L. Moshier */ + Copyright 1984, 1987, 2000 by Stephen L. Moshier */ + Copyright 1984, 1987 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984, 1991 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1984 - 1994 by Stephen L. Moshier * * * Alternatively, we also can use the functions from the Rmath library + Copyright 1984, 1995, 2000 by Stephen L. Moshier + Copyright 1984, 1995, 2000 by Stephen L. Moshier*/ + Copyright 1984, 1995 by Stephen L. Moshier */ + Copyright 1984, 1996 by Stephen L. Moshier */ + Copyright 1985, 1987, 1989 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1985, 1987, 2000 by Stephen L. Moshier */ + Copyright 1985, 1987, 2000 by Stephen L. Moshier*/ + Copyright 1985, 1987 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1985, 1987 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1985 by Stephen L. Moshier * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 */ + Copyright 1987-, A. Volgenant/Amsterdam School of Economics, + Copyright 1991: Dieter Kraft, FHMC* *C*********************************************************************** + Copyright 1997, 1998, 1999, 2000 University of Notre Dame. + Copyright 1997, 1998, 1999, 2000 University of Notre Dame.// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek + Copyright 1997-2001 University of Notre Dame. + Copyright 1997-2008 by Agner Fog. + Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) + Copyright 1999-2003 Aleksey Gurtovoy. Use, modification, and distribution are + Copyright 1999 Travis Oliphant + Copyright 2000 by Alan Genz. + Copyright 2000 Jens Maurer + Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu) + Copyright 2000 John Maddock (john@johnmaddock.co.uk) + Copyright 2000 University of Notre Dame. + Copyright 2001, 2003, 2004, 2012 Daryle Walker. Use, modification, and + Copyright 2001, 2004, 2011 Daryle Walker. + Copyright 2001 Indiana University + Copyright 2001 John Maddock. + Copyright 2001 Universite Joseph Fourier, Grenoble. + Copyright 2001 University of Notre Dame. + Copyright 2002-2003 Guillaume Melquiond + Copyright 2002-2003 Herv + Copyright 2002, 2005 Daryle Walker + Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution + Copyright 2002-2006 Andreas Huber Doenni + Copyright 2002-2007 Andreas Huber Doenni + Copyright 2002-2008 Andreas Huber Doenni + Copyright 2002-2008 by Agner Fog. + Copyright 2002, 2009, 2014 Peter Dimov + Copyright 2002, 2009 Peter Dimov + Copyright 2002-2010 Andreas Huber Doenni + Copyright 2002-2014 by Agner Fog. + Copyright 2002-2016 The SciPy Developers + Copyright 2002-2018 Peter Dimov + Copyright 2002, 2020 Peter Dimov + Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com) + Copyright 2002 Brad King and Douglas Gregor + Copyright 2002 Daryle Walker + Copyright 2002 Gary Strangman. All rights reserved + Copyright 2002 Herv + Copyright 2002 H Lohninger, TU Wein + Copyright 2002 Indiana University. + Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch) + Copyright 2002 Pearu Peterson all rights reserved + Copyright 2002 Rensselaer Polytechnic Institute + Copyright 2002 The Trustees of Indiana University. + Copyright 2002 The Trustees of Indiana University. + Copyright 2003-2005 Peter Dimov + Copyright 2003-2008 Joaquin M Lopez Munoz. + Copyright 2003 - 2011 LASMEA UMR 6602 CNRS/Univ. Clermont II + Copyright 2003-2013 Joaquin M Lopez Munoz. + Copyright 2003-2014 Joaquin M Lopez Munoz. + Copyright 2003-2015 Joaquin M Lopez Munoz. + Copyright 2003-2016 Joaquin M Lopez Munoz. + Copyright 2003-2017 Joaquin M Lopez Munoz. + Copyright 2003-2018 Joaquin M Lopez Munoz. + Copyright 2003-2019 Joaquin M Lopez Munoz. + Copyright 2003-2020 Joaquin M Lopez Munoz. + Copyright 2003 Bruce Barr + Copyright 2003 (c) The Trustees of Indiana University. + Copyright 2003 Guillaume Melquiond + Copyright 2003 Guillaume Melquiond, Sylvain Pion + Copyright 2003 Jeremy Siek + Copyright 2003 The Trustees of Indiana University + Copyright 2004-2005 by Enthought, Inc. + Copyright 2004-2005 by Enthought, Inc. + Copyright 2004-2005 Peter Dimov + Copyright 2004, 2005 The Trustees of Indiana University. + Copyright 2004, 2005 Trustees of Indiana University + Copyright 2004-2006 Peter Dimov + Copyright 2004-2006 The Trustees of Indiana University. + Copyright 2004-2008 by Agner Fog. + Copyright 2004-2008 Peter Dimov + Copyright 2004-2013 by Agner Fog. + Copyright 2004-5 The Trustees of Indiana University. + Copyright 2004-9 Trustees of Indiana University + copyright 2004 Brian Ravnsgaard Riis + Copyright 2004 Eric Niebler + Copyright 2004 Eric Niebler. + Copyright 2004 Eric Niebler/////////////////////////////////////////////////////////////////////////////// + Copyright 2004 The Trustees of Indiana University. + Copyright 2004 The Trustees of Indiana University + Copyright 2005-2006 Andreas Huber Doenni + Copyright 2005-2007 Adobe Systems Incorporated + Copyright 2005-2008 Andreas Huber Doenni + Copyright 2005-2009 Daniel James. + Copyright 2005-2009 The Trustees of Indiana University. + Copyright 2005-2011 Daniel James. + Copyright 2005-2012 Daniel James. + Copyright 2005-2013 Peter Dimov + Copyright 2005-2014 Daniel James. + Copyright 2005, 2014 Peter Dimov + Copyright 2005 Alexander Nasonov. + Copyright 2005 Ben Hutchings + Copyright 2005 Daniel Egloff. Distributed under the Boost + Copyright 2005 Daniel Egloff, Eric Niebler. Distributed under the Boost + Copyright 2005 Daniel Egloff, Olivier Gygi. Distributed under the Boost + Copyright 2005 Daniel Wallin. + Copyright 2005 Dan Marsden. + Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed + Copyright 2005 Douglas Gregor. + Copyright 2005 Eric Niebler. + Copyright 2005 Eric Niebler, Daniel Egloff. Distributed under the Boost + Copyright 2005 Eric Niebler. Distributed under the Boost + Copyright 2005 Eric Niebler, Michael Gauckler. Distributed under the Boost + Copyright 2005 Felix H + Copyright 2005 Guillaume Melquiond + Copyright 2005 Jeremy G. Siek + Copyright 2005 Joel de Guzman. + Copyright 2005 Matthias Troyer. + Copyright 2005 Peter Dimov + Copyright 2005 The Trustees of Indiana University. + Copyright 2005 Travis Oliphant + Copyright 2005 Trustees of Indiana University + Copyright 2006-2007 Boris Gubenko + Copyright 2006-2008 Joaquin M Lopez Munoz. + Copyright 2006-2009 Joaquin M Lopez Munoz. + Copyright 2006-2011 Joaquin M Lopez Munoz. + Copyright 2006-2013 Joaquin M Lopez Munoz. + Copyright 2006-2014 Joaquin M Lopez Munoz. + Copyright 2006-2015 Joaquin M Lopez Munoz. + Copyright 2006-2018 Joaquin M Lopez Munoz. + Copyright 2006-2019 Joaquin M Lopez Munoz. + Copyright 2006-2020 Joaquin M Lopez Munoz. + Copyright 2006, 2020 Peter Dimov + Copyright 2006 Andy Tompkins. + Copyright 2006 Daniel Egloff, Olivier Gygi. Distributed under the Boost + Copyright 2006 Douglas Gregor . + Copyright 2006 Eric Niebler. Distributed under the Boost + Copyright 2006 Eric Niebler, Olivier Gygi. Distributed under the Boost + Copyright 2006, Eric Niebler, Olivier Gygi. Distributed under the Boost + Copyright 2006 Ion Gaztanaga + Copyright 2006 Johan Rade + Copyright 2006 John Maddock + Copyright 2006 Michael van der Westhuizen + Copyright 2006 Olivier Gygi, Daniel Egloff. Distributed under the Boost + Copyright 2006 Roland Schwarz. + Copyright 2006 The Trustees of Indiana University. + Copyright 2006 Thorsten Ottosen. + Copyright 2006 Trustees of Indiana University + Copyright 2007-2008 Andreas Pokorny, Christian Henning + Copyright 2007-2008 Christian Henning + Copyright 2007-2008 Christian Henning, Andreas Pokorny + Copyright 2007-2008 Christian Henning, Andreas Pokorny, Lubomir Bourdev + Copyright: 2007-2008 CodeRage, LLC + Copyright: 2007-2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com + Copyright: 2007-2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com */ + Copyright: 2007-2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the function boost::iostreams::detail::absolute_path, used for * deb + Copyright: 2007-2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the function boost::iostreams::detail::current_directory, used by * + Copyright: 2007-2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the preprocessor symbol BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS for * pla + Copyright: 2007-2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * If included with the macro BOOST_IOSTREAMS_RESTRICT undefined, defines the * + Copyright 2007-2012 Christian Henning, Andreas Pokorny + Copyright 2007-2012 Christian Henning, Andreas Pokorny, Lubomir Bourdev + Copyright 2007-2012 Christian Henning, Lubomir Bourdev + Copyright 2007-2012 Ion Gaztanaga + Copyright 2007, 2014 Peter Dimov + Copyright 2007, 2019 Peter Dimov + Copyright 2007, 2020 Peter Dimov + Copyright 2007 Aaron Windsor + Copyright 2007 Alexandre Courpron + Copyright 2007 Andy Tompkins. + Copyright 2007 Baruch Zilber + Copyright 2007 Boris Gubenko + Copyright 2007 Christian Henning + Copyright 2007 David Jenkins. + Copyright 2007 Eric Niebler. + Copyright 2007 Peter Dimov + Copyright 2007 Stanford University + Copyright 2007 Tobias Schwinger + Copyright 2007 University of Karlsruhe + copyright = '2008- + Copyright 2008 + Copyright 2008-2009 Frank Mori Hess + Copyright 2008-2010 Gordon Woodhull + Copyright 2008,2012 Peter Dimov + Copyright 2008, 2020 Peter Dimov + Copyright 2008, 2020 Peter Dimov + Copyright 2008 Adobe Systems Incorporated + Copyright 2008 Andreas Huber Doenni + Copyright 2008 Beman Dawes + Copyright 2008 Christian Henning + Copyright 2008 Christian Henning, Lubomir Bourdev + Copyright 2008 Christophe Henry + Copyright 2008 Christophe Henry// henry UNDERSCORE christophe AT hotmail DOT com// This is taken from Boost.Proto's documentation + Copyright: 2008 CodeRage, LLC 2004-2007 Jonathan Turkanis * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the class template boost::iostr + Copyright: 2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the class boost::iostreams::detail::path, for storing a * a std::string o + Copyright: 2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the class template basic_grep_filter and its specializations * grep_filter + Copyright: 2008 CodeRage, LLC * Author: Jonathan Turkanis * Contact: turkanis at coderage dot com * * Defines the type boost::iostreams::detail::file_handle, representing an * operatin + Copyright 2008 David Jenkins. + Copyright 2008 Eric Niebler. + Copyright 2008 Eric Niebler. Distributed + Copyright 2008 Eric Niebler. Distributed under the Boost + Copyright 2008 Gautam Sewani + Copyright 2008 Hartmut Kaiser. + Copyright 2008 Howard Hinnant + Copyright 2008 Intel Corporation + Copyright 2008 Joaquin M Lopez Munoz. + Copyright 2008 John Maddock + Copyright 2008 Peter Dimov + Copyright 2009-2010 Vicente J. Botet Escriba + Copyright 2009-2010 Vicente J. Botet Escriba + Copyright 2009-2011 Karsten Ahnert + Copyright 2009 - 2011 LRI UMR 8623 CNRS/Univ Paris Sud XI + Copyright 2009-2011 Mario Mulansky + Copyright 2009-2011 Vicente J. Botet Escriba + Copyright 2009-2012 Karsten Ahnert + Copyright 2009-2012 Mario Mulansky + Copyright 2009-2012 Vicente J. Botet Escriba + Copyright 2009-2013 Karsten Ahnert + Copyright 2009-2013 Mario Mulansky + Copyright 2009-2014 Neil Groves. + Copyright 2009-2015 Mario Mulansky + Copyright 2009, Andrew Sutton + Copyright 2009 Andy Tompkins. + Copyright 2009 (C) Dean Michael Berris + Copyright 2009 Christian Henning + Copyright 2009 Eric Niebler. Distributed under the Boost + Copyright 2009 Neil Groves. + Copyright 2009 Steven Watanabe + Copyright 2009 The Trustees of Indiana University. + Copyright 2009 Trustees of Indiana University. + Copyright 2009 Trustees of Indiana University + Copyright 2009 Vicente J. Botet Escriba + Copyright 2010-2011 Karsten Ahnert + Copyright 2010-2011 Mario Mulansky + Copyright 2010-2012, D. E. Shaw Research. // All rights reserved + Copyright 2010-2012 Karsten Ahnert + Copyright 2010-2012 Kenneth Riddile, Christian Henning + Copyright 2010-2012 Mario Mulansky + Copyright 2010-2013 Karsten Ahnert + Copyright 2010-2013 Mario Mulansky + Copyright 2010-2014 Mario Mulansky + Copyright 2010-2015 Mario Mulansky + Copyright 2010 Andy Tompkins. + Copyright 2010 Beman Dawes + Copyright 2010 Christian Henning + Copyright 2010 Daniel Wallin, Eric Niebler. Distributed under the Boost + Copyright 2010 Eric Niebler. + Copyright 2010 Eric Niebler. Distributed under the Boost + Copyright 2010 Fabien Castan, Christian Henning + Copyright 2010 Gaetano Mendola, 2011 Simon West. Distributed under the Boost + Copyright 2010 John Maddock + Copyright 2010 Kenneth Riddile + Copyright 2010 Mario Mulansky + Copyright 2010 Paul A. Bristow + Copyright 2010 The Trustees of Indiana University. + Copyright 2010 Thomas Claveirole + Copyright 2010 Vicente J. Botet Escriba + Copyright 2011-2012 Karsten Ahnert + Copyright 2011-2012 Mario Mulansky + Copyright 2011, 2012 Paul A. Bristow + Copyright 2011-2012 Steven Watanabe + Copyright 2011 - 2013 John Maddock. Distributed under the Boost + Copyright 2011 -2013 John Maddock. Distributed under the Boost + Copyright 2011-2013 Karsten Ahnert + Copyright 2011-2013 Mario Mulansky + Copyright 2011-2013 Thorsten Ottosen + Copyright 2011-2015 Mario Mulansky + Copyright 2011 Christophe Henry + Copyright 2011 Eric Niebler + Copyright 2011 Eric Niebler. Distributed under the Boost + Copyright 2011 Garmin Ltd. or its subsidiaries + Copyright 2011 John Maddock + Copyright 2011 John Maddock. Distributed under the Boost + Copyright 2011 Karsten Ahnert + Copyright 2011 Mario Mulansky + Copyright 2011 Paul A. Bristow + Copyright 2011 Paul A. Bristow To incorporate into Boost.Math + Copyright 2011 Simon West. Distributed under the Boost + Copyright 2011 Steven Watanabe + Copyright 2011 Vicente J. Botet Escriba + Copyright 2012-2013 Andreas Angelopoulos + Copyright 2012-2013 Karsten Ahnert + Copyright 2012-2013 Mario Mulansky + Copyright 2012-2013 Steven Watanabe + Copyright 2012-2015 Mario Mulansky + Copyright 2012-2019 Glen Joseph Fernandes + Copyright 2012-2020 Antony Polukhin. + Copyright 2012-2020 Antony Polukhin. + Copyright 2012-2020 John Maddock. + Copyright 2012-20 John Maddock. + Copyright 2012 Andreas Pokorny + Copyright 2012 (C) Google, Inc. + Copyright 2012 Christian Henning + Copyright 2012 Christian Henning, Andreas Pokorny, Lubomir Bourdev + Copyright 2012 Christoph Koke + Copyright 2012 Chung-Lin Wen + Copyright 2012 Chung-Lin Wen, Davide Anastasia + Copyright 2012 (C) Jeffrey Lee Hellrung, Jr. + Copyright 2012 Denis Demidov + Copyright 2012 Eric Niebler. Distributed under the Boost + Copyright 2012 Fernando Vilas + Copyright 2012 IBM Corp. + Copyright 2012 John Maddock. + Copyright 2012 John Maddock. Distributed under the Boost + Copyright 2012 Karsten Ahnert + Copyright 2012 Kenneth Riddile, Christian Henning + Copyright 2012 K R Walker + Copyright 2012 Lucanus Simonson + Copyright 2012 Mario Mulansky + Copyright 2012 Olivier Tournaire + Copyright 2012 Olivier Tournaire, Christian Henning + Copyright 2012 Paul A. Bristow with new tests. + Copyright 2012, Philipp Moeller + Copyright 2012 Steven Watanabe + Copyright 2012 The Trustees of Indiana University. + Copyright 2012 Vicente J. Botet Escriba + Copyright 2013-2014 Karsten Ahnert + Copyright 2013-2014 Mario Mulansky + Copyright 2013, 2017-2018 Cray, Inc. + Copyright 2013, 2017 Andrey Semashev + Copyright 2013-2020 Antony Polukhin. + Copyright 2013 Andrea GavanaAuthor: + Copyright 2013 Andrey Semashev + Copyright 2013 Ankur Sinha + Copyright 2013 Christian Henning + Copyright 2013 Christian Henning and Juan V. Puertos + Copyright 2013 Christian Shelton + Copyright 2013 Christopher Kormanyos + Copyright 2013 Cromwell D. Enage + Copyright 2013 John Maddock + Copyright 2013 John Maddock. Distributed under the Boost + Copyright 2013 Juan V. Puertos G-Cluster, Christian Henning + Copyright 2013 Karsten Ahnert + Copyright 2013 Kyle Lutz + Copyright 2013 Maciej Piechotka + Copyright 2013 Mario Mulansky + Copyright 2013 Nikhar Agrawal + Copyright 2013 Pascal Germroth + Copyright 2013 Paul Bristow + Copyright 2013 Peter Dimov + Copyright 2013 University of Warsaw. + Copyright 2014-2015 Glen Joseph Fernandes + Copyright 2014-2015 Renato Tegon Forti, Antony Polukhin. + Copyright 2014-2016 Glen Joseph Fernandes + Copyright 2014,2018 Glen Joseph Fernandes + Copyright 2014-2020 Glen Joseph Fernandes + Copyright 2014 Andrey Semashev + Copyright 2014 Anton Bikineev + Copyright 2014 Antony Polukhin + Copyright 2014 Bill Gallafent + Copyright 2014 Christopher Kormanyos + Copyright 2014, Eric W. Moore + Copyright 2014 Glen Joseph Fernandes + Copyright 2014 John Maddock + Copyright 2014 LASMEA UMR 6602 CNRS/Univ. Clermont II + Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI + Copyright 2014 Marco Guazzone (marco.guazzone@gmail.com) + Copyright 2014 MetaScale SAS + Copyright 2014 Neil Groves + Copyright 2014 NumScale SAS + Copyright 2014 Paul Bristow + Copyright 2014 Peter Dimov + Copyright 2014 Peter Dimov + Copyright 2014 Renato Tegon Forti, Antony Polukhin. + Copyright 2014 Renato Tegon Forti, Antony Polukhin + Copyright 2015-2016 Hans Dembinski + Copyright 2015, 2016 Peter Dimov. + Copyright 2015, 2017, 2019 Peter Dimov. + Copyright 2015, 2017 Andrey Semashev + Copyright 2015-2017 Hans Dembinski + Copyright 2015-2017 Peter Dimov. + Copyright 2015-2018 Andrey Semashev + Copyright 2015-2018 Hans Dembinski + Copyright 2015-2018 Klemens D. Morgenstern + Copyright 2015-2019 Antony Polukhin. + Copyright 2015-2019 Hans Dembinski + Copyright 2015-2019 Peter Dimov. + Copyright 2015-2019 Peter Dimov + Copyright 2015, 2019 Peter Dimov. + Copyright 2015, 2020 Andrey Semashev + Copyright 2015-2020 Antony Polukhin. + Copyright 2015-2020 Peter Dimov. + Copyright 2015 Andrey Semashev + Copyright 2015 Antony Polukhin + Copyright 2015 Glen Joseph Fernandes + Copyright 2015 John Fletcher. + Copyright 2015 John Fletcher + Copyright 2015 John Maddock. Distributed under the Boost + Copyright 2015 Klemens Morgenstern + Copyright 2015 Klemens Morgenstern + Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI + Copyright 2015 Mario Mulansky + Copyright 2015 NumScale SAS + Copyright 2015 Ontario Institute for Cancer Research// Written by Matei David (matei@cs.toronto.edu)//--------------------------------------------------------- + Copyright 2015 Peter Dimov. + Copyright 2015 Peter Dimov + Copyright 2015 Steven Watanabe + Copyright 2016, 2017 Andrey Semashev + Copyright 2016-2017 Joaquin M Lopez Munoz. + Copyright 2016, 2017 Peter Dimov + Copyright 2016, 2018, 2019 Peter Dimov. + Copyright 2016-2018 Andrey Semashev + Copyright 2016-2018 Joaquin M Lopez Munoz. + Copyright 2016-2019 Antony Polukhin. + Copyright 2016-2019 Joaquin M Lopez Munoz. + Copyright 2016-2020 Joaquin M Lopez Munoz. + Copyright 2016 Andrey Semashev + Copyright 2016 Joaquin M Lopez Munoz. + Copyright 2016 John Maddock. Distributed under the Boost + Copyright 2016 Jorge Lodos + Copyright 2016 Klemens D. Morgenstern + Copyright 2016 Klemens Morgenstern + Copyright 2016 Klemens Morgenstern, Antony Polukhin + Copyright 2017-2018 Glen Joseph Fernandes + Copyright 2017-2018 Joaquin M Lopez Munoz. + Copyright 2017, 2018 Peter Dimov. + Copyright 2017-2019 Glen Joseph Fernandes + Copyright 2017-2019 Peter Dimov. + Copyright 2017, 2019 Peter Dimov. + Copyright 2017 Andrey Semashev + Copyright 2017 Daniel James. + Copyright 2017 Glen Joseph Fernandes + Copyright 2017 James E. King III + Copyright 2017 James E. King, III + Copyright 2017 Joaquin M Lopez Munoz. + Copyright 2017 John Maddock + Copyright 2017, NVIDIA CORPORATION. + Copyright 2017 Peter Dimov. + Copyright 2017 Peter Dimov + Copyright 2017 Two Blue Cubes Ltd. All rights reserved + Copyright 2017 Valentin Noah Hartmann + Copyright 2017 Vinnie Falco + Copyright 2018, 2019 Andrey Semashev + Copyright 2018-2019 Antony Polukhin. + Copyright 2018-2019 Hans Dembinski + Copyright 2018, 2020 Peter Dimov + Copyright 2018 Glen Joseph Fernandes + Copyright 2018 Hans Dembinski + Copyright 2018 Joaquin M Lopez Munoz. + Copyright 2018 John Maddock + Copyright 2018 John Maddock. Distributed under the Boost + Copyright 2018 Mateusz Loskot + Copyright 2018 Nico Weber + Copyright 2018 Peter Dimov + Copyright 2018 Stefan Seefeld + Copyright 2018 Steven Watanabe + Copyright 2018 Ulf Adams + Copyright 2019-2020 Antony Polukhin + Copyright 2019-2020 Glen Joseph Fernandes + Copyright 2019, 2020 Peter Dimov + Copyright 2019-20 Christopher Kormanyos. + Copyright 2019-20 Madhur Chauhan. + Copyright 2019 Emil Dotchevski. + Copyright 2019 Glen Joseph Fernandes + Copyright 2019 Glen Joseph Fernandes (glenjofe@gmail.com) + Copyright 2019 Glen Joseph Fernandes (glenjofe@gmail.com) + Copyright 2019 Hans Dembinski + Copyright 2019 Henry Schreiner + Copyright 2019 John Maddock + Copyright 2019 John Maddock. Distributed under the Boost + Copyright 2019 Mateusz Loskot + Copyright 2019 Miral Shah + Copyright 2019 Olzhas Zhumabek + Copyright 2019 Peter Dimov + Copyright 2019 Pranam Lashkari + Copyright 2019 Przemyslaw Bartosik + Copyright 2020 Andrey Semashev + Copyright 2020 Glen Joseph Fernandes + Copyright 2020 Hans Dembinski + Copyright 2020 Ion Gaztanaga + Copyright 2020 John Maddock. + Copyright 2020 John Maddock. Distributed under the Boost + Copyright 2020 Madhur Chauhan. + Copyright 2020 Peter Dimov + Copyright 2020 Samuel Debionne + Copyright (2) Beman Dawes 2010, 2011 + Copyright (3) Ion Gaztanaga 2013 + Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2010. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2011. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2012. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2010. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2010 - 2011. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2011. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2011. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2011. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2011 - 2012. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2012. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2013. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2013. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2013. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2014. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2014. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2015. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2015. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2016. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2017. + Copyright Abel Sinkovics (abel@sinkovics.hu) 2018. + Copyright Adam D. Walling 2012. Use, modification and + COPYRIGHT$ Additional copyrights may follow $HEADER$ + Copyright Alain Miniussi 2014. + Copyright Aleksey Gurtovoy 2000-2002 + Copyright Aleksey Gurtovoy 2000-2003 + Copyright Aleksey Gurtovoy 2000-2004 + Copyright Aleksey Gurtovoy 2000-2006 + Copyright Aleksey Gurtovoy 2000-2008 + Copyright Aleksey Gurtovoy 2000-2009 + Copyright Aleksey Gurtovoy 2000-2010 + Copyright Aleksey Gurtovoy 2001-2004 + Copyright Aleksey Gurtovoy 2001-2006 + Copyright Aleksey Gurtovoy 2001-2007 + Copyright Aleksey Gurtovoy 2001-2008 + Copyright Aleksey Gurtovoy 2002-2004 + Copyright Aleksey Gurtovoy 2002-2006 + Copyright Aleksey Gurtovoy 2003-2004 + Copyright Aleksey Gurtovoy 2003-2007 + Copyright Aleksey Gurtovoy 2004 + Copyright Aleksey Gurtovoy 2006 + Copyright Aleksey Gurtovoy 2008 + Copyright Alexander Grund 2018. Corrections to singleton lifetime + Copyright Alexander Nasonov + Copyright Alexander Nasonov 2004 + Copyright Alexander Nasonov, 2006-2010. + Copyright Anne M. Archibald 2008 + Copyright Antony Polukhin, 2011-2020. + Copyright Antony Polukhin, 2013-2014. + Copyright Antony Polukhin, 2013-2020. + Copyright Antony Polukhin, 2016-2019. + Copyright Antony Polukhin, 2016-2020. + Copyright (arg) 2001-2014 Joel de Guzman + Copyright Arno Schoedl + Copyright Barrett Adair 2015-2017 + Copyright Barrett Adair 2015-2018 + Copyright Barrett Adair 2016-2017 + copyright below:/* + Copyright Beman Dawes 1994, 2006, 2008 + Copyright Beman Dawes 1994-2007, 2011 + Copyright Beman Dawes 1994-2007, 2011 + Copyright Beman Dawes 1994-99. + Copyright Beman Dawes 1994-99. Distributed under the Boost + Copyright Beman Dawes 1995-2001. Distributed under the Boost + Copyright Beman Dawes 2001. Distributed under the Boost + Copyright Beman Dawes 2002 + Copyright Beman Dawes, 2002-2005 + Copyright Beman Dawes 2002-2005, 2009 + Copyright Beman Dawes 2002, 2006 + Copyright Beman Dawes 2002-2009 + Copyright Beman Dawes 2003 + Copyright Beman Dawes 2003, 2006 + Copyright Beman Dawes 2003, 2006, 2008 + Copyright Beman Dawes 2003, 2006, 2010 + Copyright Beman Dawes 2003, 2006, 2011 + Copyright Beman Dawes 2005. + Copyright Beman Dawes 2006 + Copyright Beman Dawes 2006, 2007 + Copyright Beman Dawes 2007 + Copyright Beman Dawes 2008 + Copyright Beman Dawes 2009 + Copyright Beman Dawes, 2009 + Copyright Beman Dawes 2010 + Copyright Beman Dawes 2010, 2011, 2014 + Copyright Beman Dawes 2011 + Copyright Beman Dawes 2013 + Copyright Beman Dawes 2014 + Copyright Beman Dawes 2015 + Copyright Beman Dawes and Daryle Walker 1999. Distributed under the Boost + Copyright Benjamin Sobotta 2012. + Copyright Benjamin Sobotta 2012 + Copyright Benjamin Worpitz 2018 + Copyright Bertolt Mildner 2004. + copyright Boost Software License, version 1.0 + Copyright Bruno Dutra 2015 + Copyright Bryce Lelbach 2010 + copyright by Renee Touzin)under the BSD licence. The following files have been removed from the original library: + Copyright (c) 1992-2013 The University of Tennessee and The University of Tennessee Research Foundation. All rights reserved. + Copyright (c) 1993-2019 C.B. Barber Arlington, MA + Copyright (c) 1993-2019 C.B. Barber. $Id: //main/2019/qhull/src/libqhull_r/merge_r.c#12 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $*/ + Copyright (c) 1993-2019 C.B. Barber. $Id: //main/2019/qhull/src/libqhull_r/merge_r.h#1 $$Change: 2661 $ $DateTime: 2019/05/24 20:09:58 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/geom2_r.c#15 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/geom_r.c#4 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/geom_r.h#1 $$Change: 2661 $ $DateTime: 2019/05/24 20:09:58 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/global_r.c#12 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $ */ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/io_r.c#7 $$Change: 2683 $ $DateTime: 2019/06/14 16:05:16 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/io_r.h#2 $$Change: 2671 $ $DateTime: 2019/06/06 11:24:01 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/libqhull_r.c#16 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/libqhull_r.h#13 $$Change: 2714 $ $DateTime: 2019/06/28 16:16:13 $$Author: bbarber $ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/mem_r.c#6 $$Change: 2711 $ $DateTime: 2019/06/27 22:34:56 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/mem_r.h#5 $$Change: 2698 $ $DateTime: 2019/06/24 14:52:34 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/poly2_r.c#18 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/poly_r.c#7 $$Change: 2705 $ $DateTime: 2019/06/26 16:34:45 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/poly_r.h#3 $$Change: 2701 $ $DateTime: 2019/06/25 15:24:47 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/qhull_ra.h#1 $$Change: 2661 $ $DateTime: 2019/05/24 20:09:58 $$Author: bbarber $ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/qset_r.c#7 $$Change: 2711 $ $DateTime: 2019/06/27 22:34:56 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/qset_r.h#3 $$Change: 2700 $ $DateTime: 2019/06/25 05:52:18 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/random_r.h#2 $$Change: 2666 $ $DateTime: 2019/05/30 10:11:25 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/stat_r.c#7 $$Change: 2712 $ $DateTime: 2019/06/28 12:57:00 $$Author: bbarber $*/ + Copyright (c) 1993-2019 The Geometry Center. $Id: //main/2019/qhull/src/libqhull_r/stat_r.h#3 $$Change: 2711 $ $DateTime: 2019/06/27 22:34:56 $$Author: bbarber $ + Copyright (c) 1994 by Xerox Corporation. All rights reserved + Copyright (c) 1994// Hewlett-Packard Company + Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provid + Copyright (c) 1995, 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. + copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + Copyright (c) 1995, Gerald Evenden + Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands + Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough + Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough * * * adapted by Wolfgang Hoermann and Josef Leydol + Copyright (c) 1996,1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted w + Copyright (c) 1996-1998// Silicon Graphics Computer Systems, Inc. + Copyright (c) 1996-2008 Rice University. + Copyright (c) 1996-2008 Rice University.Developed by D.C. Sorensen, R.B. Lehoucq, C. Yang, and K. Maschhoff.All rights reserved + Copyright (c) 1996// Silicon Graphics Computer Systems, Inc. + Copyright (c) 1996 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted withou + Copyright (c) 1998-2000 + Copyright (c) 1998-2000 Theodore C. Belding /* University of Michigan Center for the Study of Complex Systems */ /* Ted.Belding@umich.edu) + Copyright (c) 1998-2002 + Copyright (c) 1998-2002 Joel de Guzman + Copyright (c) 1998-2003 by the University of Florida. All Rights Reserved + Copyright (c) 1998-2003 Joel de Guzman + Copyright (c) 1998-2004 John Maddock + Copyright (c) 1998-2005 + Copyright (c) 1998-2008 Joel de Guzman + Copyright (c) 1998-2009 + Copyright (c) 1998-2009 John Maddock + Copyright (c) 1998 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted withou + Copyright (c) 1999, 2000, 2001 North Carolina State University + Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) + Copyright (C) 1999-2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) + Copyright (c) 1999-2003 Jaakko Jarvi + Copyright (c) 1999-2003 Jeremiah Willcock + Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin + Copyright (C) 2000, 2001 Stephen Cleary + Copyright (c) 2000-2002 + Copyright (c) 2000-2003 Brian McNamara and Yannis Smaragdakis + Copyright (c) 2000-2004 + Copyright (c) 2000-2006, 2010 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2000-2006 Wolfgang Hoermann and Josef Leydold * Dept. for Statistics, University of Economics, Vienna, Austria * * + Copyright (c) 2000-2007 + Copyright (c) 2000-2009 + Copyright (c) 2000-2010 + Copyright (c) 2000-2010// Joerg Walter, Mathias Koch, David Bellot + Copyright (c) 2000-2010// Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot + Copyright (c) 2000-2010 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2000-2011 Joerg Walter, Mathias Koch, David Bellot + Copyright (c) 2000-2013 + Copyright (c) 2000-2013 The University of California Berkeley. All rights reserved. + Copyright (c) 2000-2022 Wolfgang Hoermann and Josef Leydold + Copyright (c) 2000 Cadenza New Zealand Ltd + Copyright (c) 2000 David Abrahams. + Copyright (c) 2000, Frank Warmerdam + Copyright (C) 2000 Gary Powell (gary.powell@sierra.com) + Copyright (C) 2000 Gary Powell (gwpowell@hotmail.com) + Copyright (C) 2000 Gary Powell (powellg@amazon.com) + Copyright (C) 2000 Stephen Cleary + Copyright (C) 2001 + Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Python Software Foundation;All Rights Reserved + Copyright (c) 2001, 2002, 2003 Peter Dimov + Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. + Copyright (c) 2001, 2002, 2012 Peter Dimov + Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek + Copyright (c) 2001, 2002 Enthought, Inc. + Copyright (c) 2001-2002 Enthought, Inc. 2003-2022, SciPy Developers.All rights reserved + Copyright (c) 2001-2002 Joel de Guzman + Copyright (C) 2001-2002 Joel de Guzman + Copyright (c) 2001, 2002 Peter Dimov + Copyright (C) 2001, 2002 Peter Dimov + Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. + Copyright (c) 2001, 2002 Python Software Foundation; All Rights + Copyright (C) 2001-2003 + Copyright (c) 2001-2003 Daniel Nuffer + Copyright (c) 2001-2003 Hartmut Kaiser + Copyright (c) 2001-2003 Joel de Guzman + Copyright (c) 2001-2003 John Maddock + Copyright (C) 2001-2003// William E. Kempf + Copyright (C) 2001-2003// William E. Kempf + Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. + Copyright (c) 2001-2005 Peter Dimov + Copyright (c) 2001-2007 Hartmut Kaiser + Copyright (c) 2001-2007 Joel de Guzman + Copyright (c) 2001-2008 Hartmut Kaiser + Copyright (c) 2001-2008 Joel de Guzman + Copyright (c) 2001-2008 Peter Dimov + Copyright (c) 2001-2009, 2012 Peter Dimov + Copyright (c) 2001-2009 Daniel Nuffer + Copyright (c) 2001-2009, Hartmut Kaiser + Copyright (c) 2001-2009 Joel de Guzman + Copyright (c) 2001-2010 Hartmut Kaiser + Copyright (c) 2001-2010 Joel de Guzman + Copyright (c) 2001-2011 Hartmut Kaiser. + Copyright (c) 2001-2011 Hartmut Kaiser + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2001-2011 - Scilab EnterprisesUpdated by Allan Cornet, Sylvestre Ledru. + Copyright (c) 2001-2011 Thomas Bernard + Copyright (c) 2001-2012 Hartmut Kaiser. + Copyright (c) 2001-2012 Hartmut Kaiser + Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost + Copyright (c) 2001-2012 Joel de Guzman + Copyright (c) 2001-2013 Hartmut Kaiser. + Copyright (c) 2001-2013 Hartmut Kaiser + Copyright (c) 2001-2013 Joel de Guzman + Copyright (c) 2001-2014 Joel de Guzman + Copyright (c) 2001-2015 Joel de Guzman + Copyright (c) 2001-2019 Joel de Guzman + Copyright (c) 2001 Alexander Peslyak and it is hereby released to the * general public under the following terms: * * Redistribution and use in source and binary forms, with or without + Copyright (c) 2001 Bruce Florman + Copyright (c) 2001 by Andrei Alexandrescu. Distributed under the Boost + Copyright (c) 2001 Daniel C. Nuffer. + Copyright (c) 2001 Daniel C. Nuffer + Copyright (c) 2001, Daniel C. Nuffer + Copyright (c) 2001, Daniel C. Nuffer + Copyright (c) 2001 Daniel Nuffer + Copyright (c) 2001 Darin Adler + Copyright (C) 2001 Daryle Walker. + Copyright (c) 2001 David Abrahams + Copyright (C) 2001 Dietmar Kuehl + Copyright (c) 2001 Doug Gregor + Copyright (C) 2001 Gary Powell (gary.powell@sierra.com) + Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) + Copyright (C) 2001 Jeremy Siek, Douglas Gregor, Brian Osman + Copyright (C) 2001 Jeremy Siek + Copyright (c) 2001 Peter Dimov + Copyright (C) 2001 Peter Dimov + Copyright (c) 2001 Peter Dimov and Multi Media Ltd. + Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu) + Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). Permission to copy, // use, modify, sell and distribute this softwa + Copyright (c) 2001, Thomas Flemming, tf@ttqv.com + Copyright (C) 2001 Vladimir Prus + Copyright (c) 2002 + Copyright (c) 2002-2003 + Copyright (c) 2002,2003,2005,2020 CrystalClear Software, Inc. + Copyright (c) 2002-2003,2005 CrystalClear Software, Inc. + Copyright (c) 2002,2003,2005 CrystalClear Software, Inc. + Copyright (c) 2002,2003, 2007 CrystalClear Software, Inc. + Copyright (c) 2002,2003, 2020 CrystalClear Software, Inc. + Copyright (c) 2002,2003,2020 CrystalClear Software, Inc. + Copyright (c) 2002,2003 CrystalClear Software, Inc. + Copyright (c) 2002-2003 David Abrahams + Copyright (C) 2002-2003// David Moore, William E. Kempf + Copyright (c) 2002-2003 Eric Friedman + Copyright (c) 2002-2003 Eric Friedman, Itay Maman + Copyright (c) 2002-2003 Hartmut Kaiser + Copyright (c) 2002-2003 Joel de Guzman + Copyright (c) 2002-2003 Juan Carlos Arevalo-Baeza + Copyright (c) 2002-2003 Martin Wille + Copyright (c) 2002, 2003 Peter Dimov + Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd. + Copyright (c) 2002-2004 CrystalClear Software, Inc. + Copyright (c) 2002-2005 CrystalClear Software, Inc. + Copyright (c) 2002-2005, Jean-Sebastien Roy (js@jeannot.org) + Copyright (c) 2002-2006 Hartmut Kaiser + Copyright (C) 2002-2006 Marcin Kalicinski + Copyright (C) 2002-2007 Marcin Kalicinski + Copyright (C) 2002, 2008, 2013 Peter Dimov + Copyright (c) 2002, 2009, 2014 Peter Dimov + Copyright (C) 2002-2017 Free Software Foundation, Inc. + Copyright (c) 2002, 2018, 2019 Peter Dimov + Copyright (c) 2002-2020 CrystalClear Software, Inc. + Copyright (C) 2002 Beman Dawes + Copyright (c) 2002 Bill Kempf + Copyright (C) 2002 Brad King and Douglas Gregor + Copyright (C) 2002 Brad King (brad.king@kitware.com) Douglas Gregor (gregod@cs.rpi.edu) + Copyright (c) 2002 by Andrei Alexandrescu + Copyright (C) 2002 David Abrahams + Copyright (C) 2002 David Abrahams + Copyright (c) 2002 Eric Friedman, Itay Maman + Copyright (c) 2002, Frank Warmerdam + Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com) + Copyright (c) 2002 Hartmut Kaiser + Copyright (C) 2002 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) + Copyright (c) 2002 Jeff Westfahl + Copyright (c) 2002 Jens Maurer + Copyright (c) 2002 Joel de Guzman + Copyright (c) 2002 Juan Carlos Arevalo-Baeza + Copyright (c) 2002 Lars Gullik Bj + Copyright (c) 2002 Peter Dimov + Copyright (c) 2002 Peter Dimov and Multi Media Ltd. + Copyright (c) 2002 Raghavendra Satish + Copyright (c) 2002 Travis Oliphant all rights reserved + Copyright (c) 2003 + Copyright (c) 2003-2004, 2008 Gennaro Prota + Copyright (c) 2003-2004 CrystalClear Software, Inc. + Copyright (c) 2003-2004 Gennaro Prota + Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard. + Copyright (c) 2003-2005 + Copyright (c) 2003-2005 CrystalClear Software, Inc. + Copyright (c) 2003-2005 Peter Dimov + Copyright (C) 2003-2005 Peter J. Verveer + Copyright (C) 2003-2005 Peter J. Verveer * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * + Copyright (c) 2003-2006, 2008 Gennaro Prota + Copyright (c) 2003, 2006 Gerald I. Evenden + Copyright (C) 2003, 2007-14 Massachusetts Institute of Technology + Copyright (C) 2003, 2007-14 Matteo Frigo + Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal. + Copyright (c) 2003-2008 Jan Gaspar + Copyright (c) 2003-2008 Jan Gaspar + Copyright (C) 2003-2008 Matthias Christian Schabel + Copyright (C) 2003-2009 Matthias Christian Schabel + Copyright (c) 2003-2009, The Regents of the University of California, + Copyright (c) 2003-2009, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy) All rig + Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) + Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com) + Copyright (c) 2003 Daniel Frey + Copyright (c) 2003 David Abrahams + Copyright (c) 2003 Eric Friedman + Copyright (c) 2003// Eric Friedman + Copyright (c) 2003 Eric Friedman, Itay Maman + Copyright (C) 2003, Fernando Luis Cacciola Carballal. + Copyright (c) 2003 Gennaro Prota + Copyright (C) 2003 Gennaro Prota. + Copyright (c) 2003 Gerald I. Evenden + Copyright (c) 2003 Giovanni Bajo + Copyright (c) 2003 Gustavo Guerra + Copyright (c) 2003 Hartmut Kaiser + Copyright (c) 2003, Hartmut Kaiser + Copyright (c) 2003 Howard Hinnant + Copyright (c) 2003 Joel de Guzman + Copyright (c) 2003 Jonathan de Halleux + Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com) + Copyright (c) 2003 Martin Wille + Copyright (c) 2003 Paul Mensonides + Copyright (c) 2003 Peter Dimov + Copyright (c) 2003 Peter Dimov Distributed under the Boost + Copyright (c) 2003, The Regents of the University of California, throughLawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy) + Copyright (c) 2003, The Regents of the University of California, throughLawrence Berkeley National Laboratory (subject to receipt of any requiredapprovals from U.S. Dept. of Energy) + Copyright (c) 2003 Thomas Witt + Copyright (c) 2003 Vaclav Vesely + Copyright (C) 2003 Vesa Karvonen. + Copyright (c) 2003 Vladimir Prus. + Copyright (c) 2004 + Copyright (C) 2004, 2005 Arkadiy Vertleyb + Copyright (c) 2004-2005 CrystalClear Software, Inc. + Copyright (c) 2004-2005, Jean-Sebastien Roy (js@jeannot.org) + Copyright (C) 2004-2006 The Trustees of Indiana University. + Copyright (C) 2004-2008 The Trustees of Indiana University. + Copyright (C) 2004-2009 The Trustees of Indiana University. + Copyright (c) 2004 Angus Leeming + Copyright (C) 2004 Arkadiy Vertleyb + Copyright (c) 2004 CrystalClear Software, Inc. + Copyright (c) 2004 Daniel Wallin + Copyright (c) 2004 David M. Cooke + Copyright (c) 2004 Gerald I. Evenden + Copyright (c) 2004 Hartmut Kaiser + Copyright (c) 2004 Joel de Guzman + Copyright (c) 2004 John Maddock + Copyright (c) 2004 Jonathan Brandmeyer + Copyright (c) 2004 Kristopher Beevers + Copyright (C) 2004 Peder Holt + Copyright (c) 2004 Ralf Mattethat + Copyright (C) 2004 The Trustees of Indiana University. + Copyright (C) 2004 The Trustees of Indiana University. + Copyright (C) 2004 The Trustees of Indiana University + copyright (c) 2005 + Copyright (C) 2005-2006 Alain Miniussi . + Copyright (c) 2005-2006 Dan Marsden + Copyright (C) 2005, 2006 Douglas Gregor. + Copyright (C) 2005-2006 Douglas Gregor . + Copyright (C) 2005-2006 Douglas Gregor + Copyright (C) 2005, 2006 Douglas Gregor . + Copyright (C) 2005-2006 Douglas Gregor . + Copyright (c) 2005-2006 Joao Abecasis + Copyright (C) 2005-2006 The Trustees of Indiana University. + Copyright (c) 2005-2007 Dan Marsden + Copyright (C) 2005-2007 Peder Holt (VC 7.0 + Copyright (C) 2005-2008 Daniel James. + Copyright (c) 2005-2008 Hartmut Kaiser + Copyright (C) 2005-2008 The Trustees of Indiana University. + Copyright (C) 2005-2009 Jongsoo Park + Copyright (c) 2005-2010 Joel de Guzman + Copyright (C) 2005-2010 The Trustees of Indiana University. + Copyright (C) 2005-2011 Daniel James. + Copyright (c) 2005-2011 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman + Copyright (c) 2005-2013 Joel de Guzman + Copyright (c) 2005, 2014 Eric Niebler + Copyright (c) 2005-2015, Michele Simionato# All rights reserved + Copyright (C) 2005-2016 Daniel James + Copyright (c) 2005-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com) + Copyright (c) 2005 Aaron Windsor + Copyright (C) 2005 Arkadiy Vertleyb + Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt. + Copyright (c) 2005 CrystalClear Software, Inc. + Copyright (c) 2005 Dan Marsden + Copyright (C) 2005 Douglas Gregor. + Copyright (c) 2005 Eric Niebler + Copyright (C) 2005 Eric Niebler + Copyright (C) 2005, Fernando Luis Cacciola Carballal. + Copyright (C) 2005 Igor Chesnokov, mailto:ichesnokov@gmail.com (VC 6.5,VC 7.1 + Copyright (c) 2005 Matthew Calabrese + Copyright (C) 2005 Peder Holt + Copyright (C) 2005 Peder Holt + Copyright (c) 2005 Peter Dimov. + Copyright (c) 2005 Peter Dimov + Copyright (c) 2005, Rasmus Munk Larsen, Stanford UniversityAll rights reserved + Copyright (c) 2005 Stefan Arentz (stefan at soze dot com) + Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com + Copyright (c) 2006, 2007 Julio M. Merino Vidal + Copyright (c) 2006-2007 Matias Capeletto + Copyright (c) 2006-2007, Robert Hetland + Copyright (c) 2006-2007 Tobias Schwinger + Copyright (c) 2006-2008 Alexander Chemeris// // Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are met:// + Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc. + Copyright (c) 2006-2008 Johan Rade + Copyright (C) 2006-2009, 2012 Alexander Nasonov + Copyright (C) 2006-2009 Dmitry Bufistov and Andrey Parfenov + Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. + Copyright (C) 2006, 2009 Marcin Kalicinski + Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc. + Copyright (C) 2006-2010 The Trustees of Indiana University. + Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc. + Copyright (c) 2006-2013 The University of Colorado Denver. All rights reserved. + Copyright (c) 2006-7 John Maddock + Copyright (C) 2006 Arkadiy Vertleyb + Copyright (c) 2006 CrystalClear Software, Inc. + Copyright (c) 2006 Daniel Wallin + Copyright (c) 2006 Dan Marsden + Copyright (C) 2006 Douglas Gregor . + Copyright (C) 2006 Douglas Gregor + Copyright (c) 2006 Eric Niebler + Copyright (c) 2006 Joao Abecasis + Copyright (c) 2006 Johan Rade + Copyright (c) 2006 John Maddock + Copyright (c) 2006 Peter Dimov + Copyright (c) 2006 Piotr Wyderski + Copyright (c) 2006, Stephan Diederich + Copyright (c) 2006 Stephen Nutt + Copyright (C) 2006 Steven Watanabe (VC 8.0) + Copyright (c) 2006, Systems Optimization LaboratoryAll rights reserved + Copyright (C) 2006 The Trustees of Indiana University. + Copyright (C) 2006 Tiago de Paula Peixoto + Copyright (c) 2006 Tobias Schwinger + Copyright (C) 2006 Tobias Schwinger + Copyright (c) 2006 Tomas Puverle + Copyright (C) 2006 Trustees of Indiana University + Copyright (c) 2006 Xiaogang Zhang + Copyright (c) 2006 Xiaogang Zhang, 2015 John Maddock. + Copyright (c) 2006 Xiaogang Zhang, 2015 John Maddock + Copyright (c) 2007, 2008, 2012 Peter Dimov + Copyright (c) 2007, 2008, Damian Eads + Copyright (c) 2007, 2008, Damian Eads. All rights reserved + Copyright (c) 2007, 2008 Peter Dimov + Copyright (C) 2007-2008 Steven Watanabe + Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker + Copyright (c) 2007-2008 Tobias Schwinger + Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/) + Copyright (c) 2007-2009: Joachim Faulhaber + Copyright (c) 2007-2009: Joachim Faulhaber+------------------------------------------------------------------------------+ + Copyright (C) 2007-2009 Steven Watanabe + Copyright (c) 2007-2010: Joachim Faulhaber + Copyright (c) 2007-2010: Joachim Faulhaber+------------------------------------------------------------------------------+ + Copyright (C) 2007-2010 Steven Watanabe + Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2011 Hartmut Kaiser + Copyright (c) 2007-2011: Joachim Faulhaber + Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2012: Joachim Faulhaber + Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007, 2013 John Maddock + Copyright (c) 2007, 2013 Peter Dimov + Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007, 2014 Peter Dimov + Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2017 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2007-2020 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (C) 2007-8 Anthony Williams + Copyright (C) 2007-9 Anthony Williams + Copyright (C) 2007 Alexey Baskakov + Copyright (c) 2007 Cybozu Labs, Inc. + Copyright (c) 2007, Damian Eads. All rights reserved + Copyright (c) 2007 Dan Marsden + Copyright (C) 2007 Douglas Gregor + Copyright (C) 2007 Douglas Gregor + Copyright (C) 2007 Douglas Gregor and Matthias Troyer + Copyright (C) 2007 Douglas Gregor + Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Hartmut Kaiser + Copyright (c) 2007 Joel de Guzman + Copyright (c) 2007 John Maddock + Copyright (c) 2007, John Travers + Copyright (C) 2007 Marcin Kalicinski + Copyright (C) 2007 Matthias Troyer + Copyright (C) 2007 Matthias Troyer + Copyright (C) 2007 Peder Holt + Copyright (c) 2007 Peter Dimov + Copyright (c) 2007 - S + Copyright (C) 2007 The Trustees of Indiana University. + Copyright (C) 2007 The Trustees of Indiana University. + Copyright (c) 2007 Tobias Schwinger + Copyright (C) 2007, Tobias Schwinger. + Copyright (C) 2007 Trustees of Indiana University + Copyright (C) 2008, 2009, 2016 Tim Blechmann, based on code by Cory Nelson + Copyright (c) 2008-2009 Ben Hanson + Copyright (c) 2008-2009 Ben Hanson (http://www.benhanson.net/) + Copyright (c) 2008-2009 Ben Hanson\n"; + Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc. + Copyright (c) 2008-2009 Frank Mori Hess + Copyright (c) 2008-2009: Joachim Faulhaber + Copyright (c) 2008-2009: Joachim Faulhaber+------------------------------------------------------------------------------+ + Copyright (c) 2008, 2009 Peter Dimov + Copyright (c) 2008-2010: Joachim Faulhaber + Copyright (c) 2008-2010 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2008-2011 Bruno Lalande, Paris, France. + Copyright (C) 2008-2011 Daniel James. + Copyright (c) 2008-2011 Hartmut Kaiser + Copyright (c) 2008-2011 Hartmut Kaiser\n"; + Copyright (c) 2008-2011: Joachim Faulhaber + Copyright (c) 2008, 2011 Peter Dimov + Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2008-2012 Bruno Lalande, Paris, France. + Copyright (c) 2008-2012 Bruno Lalande, Paris, France. + Copyright (c) 2008-2012: Joachim Faulhaber + Copyright (c) 2008-2012 Simonson Lucanus. + Copyright (c) 2008-2013 Bruno Lalande, Paris, France. + Copyright (C) 2008-2013 Tim Blechmann + Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2008-2014 Bruno Lalande, Paris, France. + Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2008-2015 Bruno Lalande, Paris, France. + Copyright (C) 2008-2016 Daniel James. + Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc. + Copyright (C) 2008-2016 Tim Blechmann + Copyright (C) 2008, 2016 Tim Blechmann + Copyright (c) 2008-2017 Bruno Lalande, Paris, France. + Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc. + Copyright (C) 2008-2018 Lorenzo Caminiti + Copyright (c) 2008, 2018 Peter Dimov + Copyright (C) 2008-2019 Lorenzo Caminiti + Copyright (c) 2008 Beman Dawes + Copyright (C) 2008 Damian Eads + Copyright (C) 2008 Eric Niebler. + Copyright (c) 2008 Federico J. Fernandez. + Copyright (c) 2008 Frank Mori Hess + Copyright (c) 2008 Gerald I. Evenden + Copyright (c) 2008 Ilya Sokolov, Boris Schaeling + Copyright (C) 2008 Ion Gaztanaga + Copyright (c) 2008 Michael Marcin + Copyright (c) 2008 Peter Dimov + Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) + Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com) + Copyright (C) 2008 Steven Watanabe + Copyright (c) 2009 + Copyright (c) 2009-2009: Joachim Faulhaber + Copyright (c) 2009-2010 Christopher Schmidt + Copyright (c) 2009-2010 Hartmut Kaiser + Copyright (c) 2009-2010: Joachim Faulhaber + Copyright (c) 2009-2010, Marco Guazzone + Copyright (c) 2009-2010 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) + Copyright (c) 2009-2011 Christopher Schmidt + Copyright (c) 2009, 2011 Helge Bahmann + Copyright (c) 2009-2011: Joachim Faulhaber + Copyright (c) 2009-2011 Mateusz Loskot, London, UK. + Copyright (c) 2009-2011 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (C) 2009-2012 Lorenzo Caminiti + Copyright (c) 2009-2012, Marco Guazzone + Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + Copyright (c) 2009-2012 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2009-2013 Mateusz Loskot, London, UK. + Copyright (c) 2009-2013 Mateusz Loskot, London, UK. + Copyright (C) 2009-2013 Tim Blechmann + Copyright (c) 2009-2014 Mateusz Loskot, London, UK. + Copyright (c) 2009-2014 Mateusz Loskot, London, UK. + Copyright (c) 2009-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2009-2015 Mateusz Loskot, London, UK. + Copyright (c) 2009-2015 Mateusz Loskot, London, UK. + Copyright (c) 2009, 2015 Peter Dimov + Copyright (c) 2009-2017 Mateusz Loskot, London, UK. + Copyright (c) 2009-2017 The MathJax Consortium + Copyright (c) 2009-2020 Vladimir Batov. + Copyright (c) 2009-2020 Vladimir Batov. + Copyright (C) 2009 Andrew Sutton + Copyright (c) 2009 Ben Hanson (http://www.benhanson.net/) + Copyright (c) 2009 Boris Schaeling + Copyright (c) 2009 Carl Barron + Copyright (c) 2009 Chris Hoeppler + Copyright (c) 2009 Christopher Schmidt + Copyright (c) 2009 Francois Barel + Copyright (c) 2009 Frank Mori Hess + Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (c) 2009, Gunter Winkler + Copyright (c) 2009 Hartmut Kaiser + Copyright (c) 2009 Hartmut Kaiser + Copyright (c) 2009 Helge Bahmann + Copyright (c) 2009 John Maddock + Copyright (c) 2009, Marco Guazzone + Copyright (c) 2009, Motorola, Inc + Copyright (C) 2009 Pauli Virtanen + Copyright (C) 2009, Pauli Virtanen + Copyright (c) 2009 Peter Dimov + Copyright (c) 2009 Phil Endecott + Copyright (C) 2009 Sebastian Redl + Copyright (c) 2009, Spirent Communications, Inc. + Copyright (C) 2009 Steven Watanabe + Copyright (C) 2009 Trustees of Indiana University + Copyright (c) 2009 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2010-2010: Joachim Faulhaber + Copyright (c) 2010-2011 Bryce Lelbach + Copyright (c) 2010-2011 Christopher Schmidt + Copyright (c) 2010-2011 David Bellot + Copyright (c) 2010-2011: Joachim Faulhaber + Copyright (c) 2010-2011 Thomas Heller + Copyright (C) 2010-2011 Tim Blechmann + Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2010 2015 Francisco Jos + Copyright (c) 2010-2017 The MathJax Consortium + Copyright (c) 2010-2017 The MathJax Consortium * * Part of the MathJax library. * See http://www.mathjax.org for details. + Copyright (C) 2010-2019 Max-Planck-SocietyAll rights reserved + Copyright (C) 2010-2020 Max-Planck-Society + Copyright (c) 2010 Alfredo Correa + Copyright (c) 2010 Artyom Beilis (Tonkikh) + Copyright (c) 2010 Athanasios Iliopoulos + Copyright (c) 2010 Bryce Lelbach + Copyright (c) 2010 Bryce Lelbach + Copyright (c) 2010 Christopher Schmidt + Copyright (C) 2010 David Fong and Michael Saunders + Copyright (C) 2010 David Fong and Michael Saunders + Copyright (c) 2010 Eric Jourdanneau, Joel Falcou + Copyright (c) 2010 Eric Niebler + Copyright (c) 2010 Eric Niebler + Copyright (c) 2010 Felipe Tanus, Boris Schaeling + Copyright (c) 2010 Helge Bahmann + Copyright (c) 2010 Ilya Murav + Copyright (c) 2010 - Jordi Guti + Copyright (c) 2010 Matthias Walter (xammy@xammy.homelinux.net) * * Authors: Matthias Walter + Copyright (c) 2010 Neil Groves + Copyright (c) 2010 Nuovation System Designs, LLC// Grant Erickson + Copyright (C) 2010 Paul A. Bristow added Doxygen comments. + Copyright (C) 2010 Peder Holt + Copyright (c) 2010 Thomas Heller + Copyright (c) 2010 Thomas P. Robitaille + Copyright (C) 2010 Tim Blechmann + Copyright (c) 2010 Wolfgang Hoermann and Josef Leydold * Department of Statistics and Mathematics, WU Wien, Austria * * + Copyright (c) 2011 + Copyright (c) 2011-2011: Joachim Faulhaber + Copyright (c) 2011-2012 + Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2011-2012 Bruno Lalande, Paris, France. + Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling + Copyright (c) 2011, 2012 Martin Lambers + Copyright (c) 2011-2012 Mateusz Loskot, London, UK. + Copyright (c) 2011-2012 Thomas Bernard + Copyright (C) 2011-2012 Vicente J. Botet Escriba + Copyright (c) 2011-2012 Wolfgang Hoermann and Josef Leydold * Institute for Statistics and Mathematics, WU Wien, Austria * * + Copyright (C) 2011-2013, 2016 Tim Blechmann + Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2013 Andrew Hundt. + Copyright (C) 2011-2013 Vicente J. Botet Escriba + Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2014, The OpenBLAS Project All rights reserved + Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2015 Akira Takahashi + Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2011-2015 The MathJax Consortium + Copyright (c) 2011-2016 Adam Wulkiewicz, Lodz, Poland. + Copyright (C) 2011, 2016 Tim Blechmann + Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2017 The MathJax Consortium + Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2019 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2019 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2011-2020 Antony Polukhin + Copyright (c) 2011 Aaron Graham + Copyright (c) 2011 Boris Schaeling (boris@highscore.de) + Copyright (c) 2011 Brandon Kohn + Copyright (c) 2011 Bryce Lelbach + Copyright (c) 2011 Bryce Lelbach + Copyright (c) 2011 Bryce Lelbach + Copyright (c) 2011 Christopher Jefferson + Copyright (c) 2011 Emil Dotchevski + Copyright (c) 2011 Eric Niebler + Copyright (c) 2011 Hartmut Kaiser + Copyright (c) 2011 Helge Bahmann + Copyright (C) 2011 J + Copyright (c) 2011 Jamboree + Copyright (c) 2011 Jan Frederick Eick + Copyright (c) 2011 Jeff Flinn, Boris Schaeling + Copyright (c) 2011 John Maddock + Copyright (c) 2011 Paul A. Bristow comments + Copyright (c) 2011 Paul A. Bristow - filename changes for boost-trunk. + Copyright (c) 2011 Paul A. Bristow incorporated Boost.Math + Copyright (c) 2011 Paul A. Bristow To incorporate into Boost.Math + Copyright (c) 2011 Steven Watanabe + Copyright (c) 2011 Thomas Bernard + Copyright (c) 2011 Thomas Heller + Copyright (c) 2011 Thomas Heller + Copyright (C) 2011 Tim Blechmann + Copyright (C) 2011 Vicente J. Botet Escriba + Copyright (c) 2012-2012 Andrii Sydorchuk. + Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland. + Copyright (C) 2012-2013 Vicente J. Botet Escriba + Copyright (c) 2012 - 2014, 2017 Andrey Semashev + Copyright (c) 2012 - 2014 Andrey Semashev */ + Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2012-2014 Bruno Lalande, Paris, France. + Copyright (c) 2012-2014 Kohei Takahashi + Copyright (c) 2012-2014 Mateusz Loskot, London, UK. + Copyright (c) 2012-2015 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2012-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2012-2020 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2012-2020 Antony Polukhin + Copyright (c) 2012-2020 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2012-2020 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (C) 2012 Anthony Williams + Copyright (c) 2012 Artyom Beilis (Tonkikh) + Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2012 Boris Schaeling + Copyright (c) 2012 Bruno Lalande, Paris, France. + Copyright (C) 2012 David Stone + Copyright (C) 2012 Flavio De Lorenzi (fdlorenzi@gmail.com) + Copyright (c) 2012 Google Inc. + Copyright (c) 2012 Hartmut Kaiser + Copyright (c) 2012 Kohei Takahashi + Copyright (C) 2012 Lorenzo Caminiti + Copyright (c) 2012 Martin Raspaud + Copyright (c) 2012 Massachusetts Institute of Technology + Copyright (c) 2012 Mateusz Loskot, London, UK. + Copyright (C) 2012, Michele Caini. + Copyright (c) 2012 Nathan Ridge + Copyright (c) 2012 Oswin Krause + Copyright (c) 2012 Paul A. Bristow + Copyright (c) 2012 Paul Fultz II + Copyright (C) 2012 Pieter Bastiaan Ober (Integricom). + Copyright (c) 2012 Robert Ramey + Copyright (c) 2012 Tim Blechmann + Copyright (C) 2012 Vicente J. Botet Escriba + Copyright (c) 2013-2014, 2020 Andrey Semashev */ + Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland + Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2013-2014 Agustin Berge + Copyright (c) 2013 - 2014 Andrey Semashev */ + Copyright (c) 2013-2014 Damien Buhl + Copyright (c) 2013-2014 Ion Gaztanaga + Copyright (c) 2013-2014 Kyle Lutz + copyright (c) 2013-2014, Oracle and/or its affiliates. + copyright (c) 2013, 2014 Oracle and/or its affiliates. + Copyright (C) 2013-2014 Vicente J. Botet Escriba + Copyright (C) 2013,2014 Vicente J. Botet Escriba + Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland + Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2013-2015 Kyle Lutz + copyright (c) 2013-2015, Oracle and/or its affiliates. + Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland + Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland. + copyright (c) 2013-2017 Oracle and/or its affiliates. + copyright (c) 2013-2017, Oracle and/or its affiliates. + Copyright (c) 2013-2017 The MathJax Consortium + Copyright (c) 2013 - 2018, 2020 Andrey Semashev */ + copyright (c) 2013-2018 Oracle and/or its affiliates. + copyright (c) 2013-2018, Oracle and/or its affiliates. + copyright (c) 2013-2019 Oracle and/or its affiliates. + copyright (c) 2013-2019, Oracle and/or its affiliates. + Copyright (c) 2013 - 2020 Andrey Semashev */ + Copyright (c) 2013-2020 Antony Polukhin. + Copyright (c) 2013-2020 Antony Polukhin + copyright (c) 2013-2020 Oracle and/or its affiliates. + copyright (c) 2013-2020, Oracle and/or its affiliates. + copyright (c) 2013-2020, Oracle and/or its affiliates. + copyright (c) 2013-2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + copyright (c) 2013-2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle + Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland + Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2013 Agustin Berge + Copyright (c) 2013 Anton Bikineev + Copyright (c) 2013 Antony Polukhin // Move semantics implementation. + Copyright (c) 2013 Antony Polukhin // Move semantics implementation. + Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2013 Bruno Lalande, Paris, France. + Copyright (c) 2013 Carl Barron + Copyright (c) 2013 Christopher Kormanyos + Copyright (C) 2013 Eurodecision + Copyright (C) 2013 Jakob Lykke Andersen, University of Southern Denmark// (jlandersen@imada.sdu.dk) + Copyright (c) 2013 Jamboree + Copyright (c) 2013 Joaquim Duran + Copyright (c) 2013 John Maddock, Antony Polukhin// + Copyright (C) 2013 Kenneth L. Ho + Copyright (C) 2013 Kenneth L. Ho# Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions are met: + Copyright (c) 2013 Kyle Lutz + Copyright (c) 2013 Mateusz Loskot + Copyright (c) 2013 Mateusz Loskot, London, UK. + Copyright (c) 2013 Mateusz Loskot, London, UK. + copyright (c) 2013, Oracle and/or its affiliates. + copyright (c) 2013, Oracle and/or its affiliates. + Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed. + Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed for new version of documentation. + Copyright (C) 2013 Pauli Virtanen * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * a. Redi + Copyright (c) 2013 Peter Dimov + Copyright (C) 2013 Sebastian Redl + Copyright (c) 2013 Tim Blechmann + Copyright (c) 2013 Tim Blechmann * ARM Code by Phil Endecott, based on other architectures. + Copyright (c) 2013 Tim Blechmann * Linux-specific code by Phil Endecott + Copyright (C) 2013 Vicente J. Botet Escriba + Copyright (c) 2014, 2015, 2016, 2017 Jarryd Beck + Copyright (c) 2014,2015,2018 Kohei Takahashi + Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland + Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland. + Copyright (C) 2014, 2015 Andrzej Krzemienski. + Copyright (c) 2014-2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2014-2015 Bruno Lalande, Paris, France. + Copyright (c) 2014-2015 John Fletcher + Copyright (c) 2014-2015 Kohei Takahashi + Copyright (c) 2014-2015 Mateusz Loskot, London, UK. + copyright (c) 2014-2015 Oracle and/or its affiliates. + Copyright (c) 2014-2015, Oracle and/or its affiliates. + Copyright (c) 2014-2015, Oracle and/or its affiliates. + Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France. + Copyright (C) 2014-2015 Vicente J. Botet Escriba + Copyright (C) 2014-2016 Andrzej Krzemienski. + Copyright (c) 2014-2016 Oracle and/or its affiliates. + Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland. + copyright (c) 2014-2017 Oracle and/or its affiliates. + copyright (c) 2014-2017, Oracle and/or its affiliates. + Copyright (c) 2014-2017, Oracle and/or its affiliates. + Copyright (c) 2014-2017 The MathJax Consortium + Copyright (C) 2014-2017 Vicente J. Botet Escriba + Copyright (c) 2014, 2018, 2019, Oracle and/or its affiliates. + Copyright (c) 2014-2018, 2020 Andrey Semashev */ + Copyright (c) 2014-2018 Adam Wulkiewicz, Lodz, Poland. + Copyright (C) 2014 - 2018 Andrzej Krzemienski. + Copyright (c) 2014,2018 Kohei Takahashi + copyright (c) 2014-2018 Oracle and/or its affiliates. + copyright (c) 2014-2018, Oracle and/or its affiliates. + copyright (c) 2014, 2018, Oracle and/or its affiliates. + Copyright (c) 2014-2018 Oracle and/or its affiliates. + Copyright (c) 2014-2018, Oracle and/or its affiliates. + Copyright (c) 2014, 2018, Oracle and/or its affiliates. + Copyright (c) 2014, 2019, 2020 Oracle and/or its affiliates. + Copyright (c) 2014, 2019 Andrey Semashev */ + copyright (c) 2014-2019 Oracle and/or its affiliates. + copyright (c) 2014-2019, Oracle and/or its affiliates. + copyright (c) 2014, 2019, Oracle and/or its affiliates. + Copyright (c) 2014-2019, Oracle and/or its affiliates. + Copyright (c) 2014, 2019, Oracle and/or its affiliates. + Copyright (c) 2014-2020 Andrey Semashev */ + Copyright (c) 2014, 2020 Andrey Semashev */ + Copyright (c) 2014-2020 Antony Polukhin + copyright (c) 2014-2020 Oracle and/or its affiliates. + copyright (c) 2014-2020 Oracle and/or its affiliates. + copyright (c) 2014-2020, Oracle and/or its affiliates. + Copyright (c) 2014-2020 Oracle and/or its affiliates. + Copyright (c) 2014-2020, Oracle and/or its affiliates. + Copyright (c) 2014-2020, Oracle and/or its affiliates. + copyright (c) 2014-2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + copyright (c) 2014-2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle + copyright (c) 2014-2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle + copyright (c) 2014-2020, Oracle and/or its affiliates.// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2014 Agustin Berge + Copyright (C) 2014 Agustin Berge + Copyright (c) 2014 Ahmed Charles + Copyright (c) 2014 Andrey Semashev + Copyright (c) 2014 Andrey Semashev */ + Copyright (C) 2014 Andrey Semashev + Copyright (C) 2014, Andrzej Krzemienski. + Copyright (c) 2014, Athanasios Iliopoulos + Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2014 Bruno Lalande, Paris, France. + Copyright (c) 2014 Christoph Weiss + Copyright (c) 2014 Eric Niebler + Copyright (C) 2014 Erik Erlandson + Copyright (c) 2014 Glen Fernandes + Copyright (c) 2014 Glen Joseph Fernandes// (glenjofe@gmail.com) + Copyright (c) 2014 Glen Joseph Fernandes// (glenjofe@gmail.com) + Copyright (C) 2014 Glen Joseph Fernandes// (glenjofe@gmail.com) + Copyright (C) 2014 Ian Forbed + Copyright (c) 2014 Jamboree + Copyright (c) 2014 Joel de Guzman + Copyright (c) 2014 Joel de Guzman + Copyright (c) 2014 John Fletcher + Copyright (c) 2014 John Fletcher + Copyright (c) 2014 Kohei Takahashi + Copyright (c) 2014 Lee Clagett + Copyright (c) 2014 Mageswaran.D + Copyright (c) 2014 Mateusz Loskot, London, UK. + Copyright (c) 2014 Mathjax Consortium + Copyright (c) 2014 Oliver Kowalke (oliver dot kowalke at gmail dot com) + copyright (c) 2014 Oracle and/or its affiliates. + copyright (c) 2014, Oracle and/or its affiliates. + Copyright (c) 2014, Oracle and/or its affiliates. + Copyright (c) 2014, Oracle and/or its affiliates. + Copyright (c) 2014 Paul Fultz II + Copyright (c) 2014 Peter Dimov + Copyright (C) 2014 Pieter Bastiaan Ober (Integricom). + Copyright (c) 2014 Riccardo Marcangelo + Copyright (c) 2014 Roshan + Copyright (c) 2014 Samuel Debionne, Grenoble, France. + Copyright (c) 2014 Thomas Bernard + Copyright (c) 2014 Tomoki Imai + Copyright (C) 2014 Vicente J. Botet Escriba + Copyright (c) 2015-2016 Barend Gehrels, Amsterdam, the Netherlands. + copyright (c) 2015-2016 Oracle and/or its affiliates. + copyright (c) 2015-2016, Oracle and/or its affiliates. + Copyright (c) 2015-2016 Oracle and/or its affiliates. + Copyright (C) 2015 - 2017 Andrzej Krzemienski. + Copyright (c) 2015-2017 Martin Hensel + copyright (c) 2015-2017 Oracle and/or its affiliates. + copyright (c) 2015-2017, Oracle and/or its affiliates. + Copyright (c) 2015-2017, Oracle and/or its affiliates. + Copyright (c) 2015-2017 The MathJax Consortium + Copyright (C) 2015-2018 Andrzej Krzemienski. + copyright (c) 2015-2018, Oracle and/or its affiliates. + copyright (c) 2015, 2018, Oracle and/or its affiliates. + Copyright (c) 2015-2018 Oracle and/or its affiliates. + Copyright (c) 2015-2018, Oracle and/or its affiliates. + copyright (c) 2015-2019 Oracle and/or its affiliates. + copyright (c) 2015-2019, Oracle and/or its affiliates. + Copyright (c) 2015-2019 Vinnie Falco (vinnie dot falco at gmail dot com) + Copyright (c) 2015-2020 Antony Polukhin + Copyright (c) 2015-2020 Barend Gehrels, Amsterdam, the Netherlands. + copyright (c) 2015-2020 Oracle and/or its affiliates. + copyright (c) 2015-2020, Oracle and/or its affiliates. + copyright (c) 2015-2020, Oracle and/or its affiliates. + Copyright (c) 2015-2020 Oracle and/or its affiliates. + Copyright (c) 2015-2020, Oracle and/or its affiliates. + copyright (c) 2015-2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + copyright (c) 2015-2020, Oracle and/or its affiliates.// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2015 Agustin K-ballo Berge + Copyright (c) 2015 Andrey Semashev */ + Copyright (C) 2015 Andrzej Krzemienski. + Copyright (c) 2015 Artyom Beilis (Tonkikh) + Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2015 Francisco Jos + Copyright (c) 2015 Ion Gaztanaga + Copyright (c) 2015 Jakub Pola + Copyright (c) 2015 Jakub Szuppe + Copyright (c) 2015 John Fletcher + Copyright (c) 2015 John Maddock + Copyright (c) 2015 Kohei Takahashi + Copyright (c) 2015 Mario Lang + Copyright (c) 2015 Muhammad Junaid Muzammil + copyright (c) 2015 Oracle and/or its affiliates. + copyright (c) 2015, Oracle and/or its affiliates. + Copyright (c) 2015 Oracle and/or its affiliates. + Copyright (c) 2015, Oracle and/or its affiliates. + Copyright (c) 2015, Oracle and/or its affiliates.// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle// + Copyright (c) 2015 Orson Peters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any dam + Copyright (c) 2015 Orson Peters// This software is provided 'as-is', without any express or implied warranty. In no event will the// authors be held liable for any damages arising from the use of + Copyright (c) 2015 Paul Fultz II + Copyright (C) 2015, Pauli Virtanen + Copyright (c) 2015 Robert Ramey + Copyright (C) 2015 Sebastian Redl + Copyright (c) 2015 Seth Heeren + Copyright (C) 2015 Vicente J. Botet Escriba + Copyright (c) 2016--2017 Felix Lenders + Copyright (c) 2016-2017, Oracle and/or its affiliates. + Copyright (c) 2016-2017 The MathJax Consortium + Copyright (C) 2016-2018 ERGO-Code * + Copyright (C) 2016-2018 ERGO-Code * * Build initial triangular factors + Copyright (C) 2016-2018 ERGO-Code * * Build rowwise and columnwise form of L and U + Copyright (C) 2016-2018 ERGO-Code * * Computes the 1-norm and infinity-norm of the matrix that was freshly * factorized. Unit cols inserted by the factorization are handled implicitly. + Copyright (C) 2016-2018 ERGO-Code * * Data file implementation + Copyright (C) 2016-2018 ERGO-Code * * Depth first search in a graph + Copyright (C) 2016-2018 ERGO-Code * * Forrest-Tomlin update with reordering + Copyright (C) 2016-2018 ERGO-Code * * Functions to load/save/reset struct lu objects + Copyright (C) 2016-2018 ERGO-Code * * Implementation of doubly linked lists (see [1] section 5.5) + Copyright (C) 2016-2018 ERGO-Code * * LINPACK condition number estimate + Copyright (C) 2016-2018 ERGO-Code * * Stability test of fresh LU factorization based on relative residual. + Copyright (C) 2016-2018 ERGO-Code * * Symbolic solve with triangular matrix + copyright (c) 2016-2018 Oracle and/or its affiliates. + Copyright (c) 2016-2018 Oracle and/or its affiliates. + Copyright (c) 2016, 2018 Oracle and/or its affiliates. + Copyright (C) 2016-2018 T. Zachary Laine + Copyright (c) 2016-2019 Damian Jarek (damian dot jarek93 at gmail dot com) + Copyright (C) 2016-2019 ERGO-Code * * Bump factorization driver routine + Copyright (C) 2016-2019 ERGO-Code * * Pivot elimination from active submatrix + Copyright (C) 2016-2019 ERGO-Code * * Search for pivot element with small Markowitz cost. An eligible pivot * must be nonzero and satisfy + Copyright (C) 2016-2019 ERGO-Code * * Setup data structures for bump factorization + copyright (c) 2016-2019, Oracle and/or its affiliates. + Copyright (c) 2016-2019 Oracle and/or its affiliates. + Copyright (c) 2016-2019 Viktor Kirilov + Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) + Copyright (c) 2016-2020 Antony Polukhin + Copyright (c) 2016-2020 Antony Polukhin + copyright (c) 2016-2020 Oracle and/or its affiliates. + copyright (c) 2016-2020, Oracle and/or its affiliates. + copyright (c) 2016-2020, Oracle and/or its affiliates. + Copyright (c) 2016-2020 Oracle and/or its affiliates. + Copyright (c) 2016-2020 Oracle and/or its affiliates. + Copyright (c) 2016-2020, Oracle and/or its affiliates. + Copyright (c) 2016-2020, Oracle and/or its affiliates. + Copyright (C) 2016 Andrzej Krzemienski. + Copyright (C) 2016 Andrzej Krzemienski + Copyright (c) 2016 Barrett Adair + Copyright (c) 2016 Francisco Jos + Copyright(c) 2016 Francisco Jos + Copyright (c) 2016 Francisco Jose Tapia (fjtapia@gmail.com )\n + Copyright(c) 2016 Francisco Jose Tapia (fjtapia@gmail.com )\n + Copyright (c) 2016 Frank Hein, maxence business consulting gmbh + Copyright (c) 2016 Jakub Szuppe + Copyright (c) 2016 Klemens D. Morgenstern + Copyright (C) 2016 K. Noel Belcourt . + Copyright (c) 2016 Kohei Takahashi + Copyright (c) 2016 Kohei Takahashi + Copyright (c) 2016 Lee Clagett + Copyright (c) 2016 Modified Work Barrett Adair + Copyright (c) 2016 Norbert Wenzel + copyright (c) 2016 Oracle and/or its affiliates. + copyright (c) 2016, Oracle and/or its affiliates. + Copyright (c) 2016 Oracle and/or its affiliates. + Copyright (c) 2016, Oracle and/or its affiliates. + Copyright (c) 2016 Paul Fultz II + Copyright (c) 2016 Peter Dimov + Copyright (c) 2016 Wenzel Jakob , All rights reserved + Copyright (C) 2017 + Copyright (c) 2017-2017 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2017-2017 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2017-2018 Alexandr Poltavsky, Antony Polukhin. + Copyright (c) 2017 - 2018 Andrey Semashev */ + Copyright (c) 2017-2018 Chris Beck + Copyright (c) 2017, 2018 James E. King III + copyright (c) 2017-2018 Oracle and/or its affiliates. + copyright (c) 2017-2018, Oracle and/or its affiliates. + copyright (c) 2017-2018, Oracle and/or its affiliates. + Copyright (c) 2017-2018 Oracle and/or its affiliates. + Copyright (c) 2017-2018 Oracle and/or its affiliates. + Copyright (c) 2017-2018, Oracle and/or its affiliates. + Copyright (c) 2017-2018, Oracle and/or its affiliates. + copyright (c) 2017-2019, Oracle and/or its affiliates. + copyright (c) 2017, 2019 Oracle and/or its affiliates. + copyright (c) 2017, 2019, Oracle and/or its affiliates. + Copyright (c) 2017-2019 Oracle and/or its affiliates. + Copyright (c) 2017-2019, Oracle and/or its affiliates. + Copyright (c) 2017, 2019 Oracle and/or its affiliates. + copyright (c) 2017-2020 Oracle and/or its affiliates. + copyright (c) 2017-2020 Oracle and/or its affiliates. + copyright (c) 2017-2020, Oracle and/or its affiliates. + copyright (c) 2017-2020, Oracle and/or its affiliates. + Copyright (c) 2017-2020 Oracle and/or its affiliates. + Copyright (c) 2017-2020 Oracle and/or its affiliates. + Copyright (c) 2017-2020, Oracle and/or its affiliates. + Copyright (c) 2017-2020, Oracle and/or its affiliates. + copyright (c) 2017-2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + copyright (c) 2017-2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2017 Andrey Semashev */ + Copyright (C) 2017 Andrzej Krzemienski. + Copyright (c) 2017 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2017 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (C) 2017 Daniela Engert + Copyright (c) 2017 Denis Demidov + Copyright (c) 2017 Dynatrace + Copyright (c) 2017 Francisco Jos + Copyright (c) 2017 Francisco Jose Tapia (fjtapia@gmail.com )\n + Copyright (C) 2017 Glen Joseph Fernandes (glenjofe@gmail.com) + Copyright (c) 2017 James E. King III + Copyright (C) 2017 James E. King III + Copyright (c) 2017 John Maddock + Copyright (c) 2017 Klemens D. Morgenstern + Copyright (c) 2017 Kohei Takahashi + Copyright (c) 2017 Kristian Popov + Copyright (C) 2017 Michel Morin. + copyright (c) 2017 Oracle and/or its affiliates. + copyright (c) 2017 Oracle and/or its affiliates. + copyright (c) 2017, Oracle and/or its affiliates. + Copyright (c) 2017 Oracle and/or its affiliates. + Copyright (c) 2017, Oracle and/or its affiliates. + Copyright (c) 2017 Robert Ramey + Copyright (c) 2017 Vinnie Falco (vinnie dot falco at gmail dot com) + Copyright (c) 2018-2019 + Copyright (c) 2018-2019 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2018-2019 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2018-2019, Cem Bassoy, cem.bassoy@gmail.com + Copyright (c) 2018-2019 ERGO-Code. See license.txt for license. + copyright (c) 2018-2019, Oracle and/or its affiliates. + copyright (c) 2018, 2019, Oracle and/or its affiliates. + copyright (c) 2018, 2019, Oracle and/or its affiliates. + Copyright (c) 2018-2019 Oracle and/or its affiliates. + Copyright (c) 2018-2019, Oracle and/or its affiliates. + Copyright (c) 2018-2020 Antony Polukhin + Copyright (c) 2018-2020 Emil Dotchevski and Reverge Studios, Inc. + copyright (c) 2018-2020 Oracle and/or its affiliates. + copyright (c) 2018-2020 Oracle and/or its affiliates. + copyright (c) 2018-2020, Oracle and/or its affiliates. + copyright (c) 2018-2020, Oracle and/or its affiliates. + Copyright (c) 2018-2020 Oracle and/or its affiliates. + Copyright (c) 2018-2020 Oracle and/or its affiliates. + Copyright (c) 2018-2020, Oracle and/or its affiliates. + Copyright (c) 2018-2020, Oracle and/or its affiliates. + copyright (c) 2018-2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + copyright (c) 2018-2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2018-2021 ERGO-Code + Copyright (c) 2018 Adam Butcher, Antony Polukhin + Copyright (c) 2018 Adam Wulkiewicz, Lodz, Poland. + Copyright (c) 2018 Adeel Ahmad, Islamabad, Pakistan. + Copyright (c) 2018 agate-pris + Copyright (C) 2018 Alain Miniussi . + Copyright (C) 2018 Alain Miniussi . + Copyright (c) 2018 Andrey Semashev + Copyright (c) 2018 Andrey Semashev */ + Copyright (c) 2018 Artyom Beilis (Tonkikh) + Copyright (c) 2018, Cem Bassoy, cem.bassoy@gmail.com + Copyright (c) 2018 ERGO-Code. See license.txt for license. + Copyright (c) 2018 Evgeny Shulgin + Copyright (c) 2018 Fady Essam + Copyright (c) 2018 Jakub Szuppe + Copyright (c) 2018 James E. King III + Copyright (c) 2018 Klemens D. Morgenstern + Copyright (c) 2018 Kohei Takahashi + copyright (c) 2018 Oracle and/or its affiliates. + copyright (c) 2018 Oracle and/or its affiliates. + copyright (c) 2018, Oracle and/or its affiliates. + copyright (c) 2018, Oracle and/or its affiliates. + Copyright (c) 2018 Oracle and/or its affiliates. + Copyright (c) 2018, Oracle and/or its affiliates. + Copyright (c) 2018, Oracle and/or its affiliates. + copyright (c) 2018 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (C) 2018 Peter Dimov + Copyright (c) 2018, Quansight-LabsAll rights reserved + Copyright (c) 2018 Sergei Fedorov + Copyright (c) 2018 Stefan Seefeld + Copyright (c) 2018 Sylvain Gubian ,# Yang Xiang # Author: Sylvain Gubian, PMP S.A."""Unit tests for the dual annealing global optimizer + Copyright (c) 2018 Sylvain Gubian ,# Yang Xiang # Author: Sylvain Gubian, Yang Xiang, PMP S.A. + Copyright (c) 2018 Yaghyavardhan Singh Khangarot, Hyderabad, India.// Contributed and/or modified by Yaghyavardhan Singh Khangarot,// as part of Google Summer of Code 2018 program. + Copyright (c) 2018 Yi Ji + Copyright (c) 2019-2019 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2019 - 2020 Alexander Grund + Copyright (c) 2019-2020 Alexander Grund + Copyright (c) 2019-2020 Antony Polukhin. + Copyright (c) 2019-2020 Antony Polukhin + Copyright (c) 2019-2020 Krystian Stasiowski (sdkrystian at gmail dot com) + copyright (c) 2019-2020 Oracle and/or its affiliates. + copyright (c) 2019-2020 Oracle and/or its affiliates. + Copyright (c) 2019-2020, Oracle and/or its affiliates. + Copyright (c) 2019-2020, Oracle and/or its affiliates. + Copyright (C) 2019-2020 Peter Bell + Copyright (c) 2019 agate-pris + Copyright (c) 2019 Andrey Semashev + Copyright (c) 2019 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2019 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2019 Damian Jarek(damian.jarek93@gmail.com) + Copyright (c) 2019 Dario Menendez, Banco Santander + Copyright (c) 2019 Joel de Guzman + Copyright (c) 2019 Klemens D. Morgenstern + Copyright (C) 2019 Max-Planck-Society + Copyright (c) 2019 Mika Fischer (mika.fischer@zoopnet.de) + copyright (c) 2019 Oracle and/or its affiliates. + copyright (c) 2019 Oracle and/or its affiliates. + Copyright (c) 2019 Oracle and/or its affiliates. + Copyright (c) 2019, Oracle and/or its affiliates. + Copyright (c) 2019, Oracle and/or its affiliates. + Copyright (C) 2019 Peter Bell * \author Martin Reinecke * \author Peter Bell */ + Copyright (c) 2019 Peter Dimov (pdimov at gmail dot com),// Vinnie Falco (vinnie.falco@gmail.com) + Copyright (C) 2019 T. Zachary Laine + Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) + Copyright (c) 2020 + Copyright (c) 2020 Alexander Grund + Copyright (c) 2020 Andrey Semashev + Copyright (c) 2020 Andrey Semashev */ + Copyright (c) 2020 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2020 Barend Gehrels, Amsterdam, the Netherlands. + Copyright (c) 2020 Caian Benedicto, Campinas, Brazil. + Copyright (c) 2020, Debabrata Mandal + Copyright (c) 2020 Digvijay Janartha, Hamirpur, India. + Copyright (c) 2020 Jeff Trull + Copyright (c) 2020 John Maddock + Copyright (c) 2020 Krystian Stasiowski (sdkrystian at gmail dot com) + Copyright (c) 2020 Krystian Stasiowski (sdkrystian@gmail.com) + Copyright (c) 2020 Michael Feldmeier + Copyright (c) 2020 Nikita Kniazev + copyright (c) 2020 Oracle and/or its affiliates. + copyright (c) 2020, Oracle and/or its affiliates. + Copyright (c) 2020, Oracle and/or its affiliates. + Copyright (c) 2020, Oracle and/or its affiliates. + copyright (c) 2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + copyright (c) 2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2020 Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2020, Oracle and/or its affiliates.// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + Copyright (c) 2020 Richard Hodges (hodges.r@gmail.com) + Copyright (c) 2020 Vinnie Falco (vinnie.falco@gmail.com) + Copyright (c) 2021-04-21 St + Copyright (c) 2021 ERGO-Code + Copyright (c) 2021 Orson Peters + Copyright (c) 2021 Orson Peters + Copyright (c) 2022 ERGO-Code under MIT licence terms\n");} + Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved + Copyright (c) 2106 Klemens D. Morgenstern + Copyright (c) Aaron Windsor 2007 + Copyright (c) Alexander Zaitsev , 2017. + Copyright (c) Alexander Zaitsev , 2016 + Copyright (c) Alexander Zaitsev , 2017 + Copyright (c) Andrey Semashev 2017 + Copyright Catch2 Authors + Copyright (c) Beman Dawes 2011 + Copyright (c) Beman Dawes 2015 + Copyright (C) Benjamin Sobotta 2012 + Copyright (c) Charles Karney (2008-2017) and licensed + Copyright (c) Chris Glover, 2016. + Copyright (C) Christof Meerwald 2003 + Copyright (c) Christopher Diggins 2005 + Copyright (C) Damian Eads, 2007-2008. New BSD License. + Copyright (C) Dan Watkins 2003 + Copyright (c) David Abrahams 2001. + Copyright (c) Donald Stufft and individual contributors.# All rights reserved + Copyright (c) Douglas Gregor 2004 + Copyright (C) Douglas Gregor 2008 + copyright: * * Cephes Math Library Release 2.8: June, 2000 + Copyright (c) Glen Joseph Fernandes 2019 (glenjofe@gmail.com) + Copyright Charly Chevalier 2015 + Copyright Christoper Kohlhoff 2007 + Copyright Christopher Brown 2013 + Copyright Christopher Kormanyos 2002 - 2011. + Copyright Christopher Kormanyos 2002 - 2013. + Copyright Christopher Kormanyos 2013. + Copyright Christopher Kormanyos 2013-14 + Copyright Christopher Kormanyos 2013. Distributed under the Boost + Copyright Christopher Kormanyos 2014. + Copyright (c) Intel Corporation 2008. + Copyright (c) Jeremy Siek 2001 + Copyright (c) Jeremy Siek 2001-2003. + Copyright (c) Jeremy Siek 2001, Marc Wintermantel 2002 + Copyright (c) Kevlin Henney 2001 + Copyright (c) Marshall Clow 2008-2012. + Copyright (c) Marshall Clow 2010-2012. + Copyright (c) Marshall Clow 2011-2012. + Copyright (c) Marshall Clow 2012-2012. + Copyright (c) Marshall Clow 2012-2015. + Copyright (c) Marshall Clow 2014. + Copyright (c) Marshall Clow 2017. + Copyright (c) Microsoft Corporation 2014 + Copyright \copyright\ 2014 by P.-G. Martinsson, V. Rokhlin,Y. Shkolnisky, and M. Tygert. + copyright: Copyright 2015 Jon Lund Steffensen. Based on extlinks by + Copyright (c) Pablo Aguilar 2005 + Copyright (C) Piers Lawrence. All rights reserved + Copyright Cromwell D. Enage 2013. + Copyright Cromwell D. Enage 2017. + Copyright Cromwell D. Enage 2018. + Copyright Cromwell D. Enage 2019. + Copyright (c) Thomas Witt 2002. + Copyright (c) Tobias Schwinger + Copyright (C) Tyler Reddy, Ross Hemsley, Edd Edmondson, + Copyright (c) T. Zachary Laine 2018. + Copyright (C) Vladimir Prus 2003. + Copyright (C) Vladimir Prus 2003 + Copyright Daniel Trebbien 2010. + Copyright Daniel Walker 2006. Use, modification and distribution + Copyright Daniel Walker 2007 + Copyright Daniel Walker, Eric Niebler, Michel Morin 2008-2012. + Copyright Daniel Wallin 2005. + Copyright Daniel Wallin 2005. Use, modification and distribution is + Copyright Daniel Wallin 2006. + Copyright Daniel Wallin 2006. Use, modification and distribution is + Copyright Daniel Wallin 2007. Use, modification and distribution is + Copyright Daniel Wallin, David Abrahams 2005. + Copyright Daniel Wallin, David Abrahams 2010. + Copyright Daryle Walker, Hubert Holin, John Maddock 2006 - 2007 + Copyright Dave Abrahams 2001-2002 + Copyright David Abrahams 2000-2002 + Copyright David Abrahams 2001. + Copyright David Abrahams 2001 + Copyright David Abrahams 2001-2002 + Copyright David Abrahams 2002. + Copyright David Abrahams 2002 + Copyright David Abrahams 2002-2003 + Copyright David Abrahams 2002, Joel de Guzman, 2002. + Copyright David Abrahams 2002, Nikolay Mladenov 2007. + Copyright David Abrahams 2003. + Copyright David Abrahams 2003 + Copyright David Abrahams 2003-2004 + Copyright David Abrahams 2003. Use, modification and distribution is + Copyright David Abrahams 2004. + Copyright David Abrahams 2004 + Copyright David Abrahams 2004. Distributed under the Boost + Copyright David Abrahams 2004. Use, modification and distribution is + Copyright David Abrahams 2005. + Copyright David Abrahams 2005. Distributed under the Boost + Copyright David Abrahams 2006. + Copyright David Abrahams 2006. Distributed under the Boost + Copyright David Abrahams 2006. Original version + Copyright David Abrahams 2009. Distributed under the Boost + Copyright David Abrahams and Jeremy Siek 2003. + Copyright David Abrahams and Nikolay Mladenov 2003. + Copyright David Abrahams and Thomas Becker 2000-2006. + Copyright David Abrahams, Daniel Wallin 2003. + Copyright David Abrahams, Daniel Wallin 2005. + Copyright Dietmar Kuehl 2001 + Copyright Douglas Gregor 2001-2003. + Copyright Douglas Gregor 2001-2003. Use, modification and + Copyright Douglas Gregor 2001-2004. + Copyright Douglas Gregor 2001-2004. Use, modification and + Copyright Douglas Gregor 2001-2006 + Copyright Douglas Gregor 2002-2003. Use, modification and + Copyright Douglas Gregor 2002-2004. Use, modification and + Copyright Douglas Gregor 2003. Use, modification and + Copyright Douglas Gregor 2004. + Copyright Douglas Gregor 2004. Use, modification and + Copyright Emil Dotchevski 2007 + Copyright Eric Friedman 2002 + Copyright Eric Friedman 2002-2003 + Copyright Eric Friedman 2003 + Copyright Eric Niebler 2005. + Copyright Eric Niebler 2008 + Copyright Eric Niebler 2009 + Copyright Eric Niebler 2014 + Copyright Eric Niebler 2014. Use, modification and + Copyright Evan Miller 2020 + copyright follows: + copyright for code they wrote and submit for + Copyright for the original TNBC Fortran routines: + Copyright for the original TNBC fortran routines: * * TRUNCATED-NEWTON METHOD: SUBROUTINES * WRITTEN BY: STEPHEN G. NASH * SCHOOL OF INFORMATION TECHNOLOGY & ENGINEERING * + Copyright for the original version: + Copyright Frank Mori Hess 2007. + Copyright Frank Mori Hess 2007-2008. + Copyright Frank Mori Hess 2007-2008 + Copyright Frank Mori Hess 2007-2009. + Copyright Frank Mori Hess 2007-2009 + Copyright Frank Mori Hess 2007,2009. + Copyright Frank Mori Hess 2007-2010. + Copyright Frank Mori Hess 2007. Use, modification and + Copyright Frank Mori Hess 2008. + Copyright Frank Mori Hess 2009. + Copyright Frank Mori Hess 2009 + Copyright Franz Detro 2014 + Copyright Gautam Sewani + Copyright Gautam Sewani 2008 + copyright Gonzalo Brito Gadeschi 2015 + Copyright Gottfried Gan + Copyright Hans Dembinski 2020 + copyright header + copyright header in }# print "Line0: Rm=$RemoveCopyrightHeader|$_"; } else {# print "Line+: Rm=$RemoveCopyrightHeader|$_"; + copyright header in print (outfile); } else { $RemoveCopyrightHeader = 1; + Copyright header line 0 is at if ($fpos<0) { $RemoveCopyrightHeader = 0; + copyright header# Look to see if we've reached the end + copyright header should be ignored + copyright header so stop ignoring lines + copyright header so write out the line + Copyright Howard Hinnant 2007-2010. + Copyright * * I hereby release this code into the PUBLIC DOMAIN AS IS. There is no * support, warranty, or guarantee. I will gladly accept comments, bug * reports, and patches, however. * * Robe + copyright information. + copyright information- HISTORY : Release history- README : This file- example.c : A simple example- Makefile : Make file used to build the examples- moduleTNC.c : the source of the python module + copyright information.# $Jeannot: README,v 1.32 2005/01/28 15:12:09 js Exp $ + copyright is acknowledged./* *//* C Contact Information *//* C Email: j + copyright is * claimed, and the software is hereby placed in the public domain. * In case this attempt to disclaim copyright and place the software in the * public domain is deemed null and void, t + Copyright Jaap Suter 2003 + Copyright James E. King III, 2017 + Copyright Jan Langer 2002 + Copyright Jason Rhinelander 2016 + copyright Jason Rice 2016 + copyright Jason Rice 2017 + Copyright Jens Maurer 2000 + Copyright Jens Maurer 2000-2001 + Copyright Jens Maurer 2002 + Copyright Jens Maurer 2006 + Copyright Jens Maurer 2006-1011 + Copyright Jessica Hamilton 2014 + Copyright Jim Bosch 2010-2012. + Copyright Joel Falcou 2015 + Copyright John Maddock 2005. + Copyright John Maddock 2005-2006. + Copyright John Maddock 2005-2006, 2011. + Copyright John Maddock 2005-2008. + Copyright John Maddock 2006. + Copyright John Maddock 2006 + Copyright John Maddock 2006, 2007. + Copyright John Maddock 2006, 2007 + Copyright John Maddock 2006, 2007, 2012, 2014. + Copyright John Maddock 2006, 2010. + Copyright John Maddock 2006, 2011. + Copyright John Maddock 2006, 2012. + Copyright John Maddock 2006-7. + Copyright John Maddock 2006-7, 2013-14. + Copyright John Maddock 2007. + Copyright John Maddock 2007, 2014. + Copyright John Maddock 2007-8. + Copyright John Maddock 2008. + Copyright John Maddock 2008 + Copyright John Maddock 2008, 2012. + Copyright John Maddock 2009. + Copyright John Maddock 2009 + Copyright John Maddock 2010. + Copyright John Maddock 2010 + Copyright John Maddock 2010, 2012. + Copyright John Maddock 2011. + Copyright John Maddock 2012. + Copyright John Maddock 2012 + Copyright John Maddock 2013. + Copyright John Maddock 2013 + Copyright John Maddock 2014. + Copyright John Maddock 2015. + Copyright John Maddock 2015 + Copyright John Maddock 2016. + Copyright John Maddock 2017. + Copyright John Maddock 2018. + Copyright John Maddock, 2020 + Copyright John R. Bandela 2000-2002 + Copyright John R. Bandela 2001. + Copyright John R. Bandela 2001 + Copyright J.S. Roy (js@jeannot.org), 2002-2005 + Copyright Justinas Vygintas Daugmaudis 2010-2018 + Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved + Copyright Kevlin Henney, 2000-2005. + Copyright Kohei Takahashi 2012-2014. + Copyright Lingxi Li 2015. + Copyright Louis Dionne 2013 + copyright Louis Dionne 2013-2016 + copyright Louis Dionne 2013-2017 + Copyright Louis Dionne 2013-2017 + copyright Louis Dionne 2016 + Copyright Marco Guazzone 2014 + Copyright Matthew Pulver 2018 - 2019. + Copyright Michael Drexl 2005, 2006. + Copyright Nat Goodspeed + Copyright Nat Goodspeed 2014. + Copyright Neil Groves + Copyright Neil Groves 2003-2004. + Copyright Neil Groves 2007. + Copyright Neil Groves 2007. Use, modification and + Copyright Neil Groves 2009. + Copyright Neil Groves 2009. Use, modification and + Copyright Neil Groves 2009. Use, modification and distribution + Copyright Neil Groves 2010. Use, modification and + Copyright Neil Groves 2014. + Copyright Neil Groves 2014 + Copyright Neil Groves 2014. Use, modification and + Copyright Nicholas Thompson 2018 + Copyright Nick Thompson 2017. + Copyright Nick Thompson, 2017 + Copyright Nick Thompson, 2018 + Copyright Nick Thompson 2019. + Copyright Nick Thompson, 2019 + Copyright Nick Thompson, 2020 + Copyright Nick Thompson, John Maddock 2020 + Copyright Nikhar Agrawal 2013-14 + Copyright Nikolay Mladenov 2007. + Copyright Nuxi, https://nuxi.nl/ 2015. + Copyright ohn Maddock 2012 + Copyright Oliver Kowalke 2009. + Copyright Oliver Kowalke 2013. + Copyright Oliver Kowalke 2014. + Copyright Oliver Kowalke 2015. + Copyright Oliver Kowalke 2016. + Copyright Oliver Kowalke 2017. + Copyright Oliver Kowalke 2018. + Copyright Orson Peters 2017. + Copyright Paul A. Bristow + Copyright Paul A. Bristow 2006. + Copyright Paul A. Bristow 2006, 2007. + Copyright Paul A. Bristow 2006, 2007, 2009, 2010. + Copyright Paul A. Bristow 2006, 2007, 2012. + Copyright Paul A. Bristow 2006, 2007, 2012 + Copyright Paul A. Bristow 2006-2011. + Copyright Paul A. Bristow 2006, 2012, 2017. + Copyright Paul A. Bristow 2006-7. + Copyright Paul A. Bristow 2007. + Copyright Paul A. Bristow 2007. + Copyright Paul A. Bristow 2007 + Copyright Paul A. Bristow 2007, 2009. + Copyright Paul A. Bristow 2007, 2009 + Copyright Paul A. Bristow 2007, 2009, 2010, 2012. + Copyright Paul A. Bristow 2007, 2010. + Copyright Paul A. Bristow 2007, 2010, 2012, 2014. + Copyright Paul A. Bristow 2007, 2012. + Copyright Paul A. Bristow 2007, 2012. + Copyright Paul A. Bristow 2007, 2013-14. + Copyright Paul A. Bristow 2008, 2009. + Copyright Paul A. Bristow 2008, 2010. + Copyright Paul A. Bristow 2008, 2014. + Copyright Paul A. Bristow 2009, 2011 + Copyright Paul A. Bristow 2010. + Copyright Paul A. Bristow 2010 + Copyright Paul A. Bristow 2011, 2012. + Copyright Paul A. Bristow 2012. + Copyright Paul A. Bristow 2013. + Copyright Paul A. Bristow 2014. + Copyright Paul A. Bristow 2016, 2017, 2018. + Copyright Paul A. Bristow 2017. + Copyright Paul Bristow 2006, 2007. + Copyright Paul Bristow 2007. + Copyright Paul Bristow 2007, 2011. + Copyright Paul Bristow 2014. + Copyright Paul Mensonides 2003 + Copyright Pavol Droba 2002-2003. + Copyright Pavol Droba 2002-2003. Use, modification and + Copyright Pavol Droba 2002-2004. + Copyright Pavol Droba 2002-2006. + Copyright Peter Dimov 2000-2002 + Copyright Peter Dimov 2000-2003 + Copyright Peter Dimov 2001 + Copyright Peter Dimov 2001-2002 + Copyright Peter Dimov 2001-2003 + Copyright Peter Dimov 2017, 2018 + Copyright Peter Dimov 2017, 2018, 2020 + Copyright Peter Dimov 2019. + Copyright Peter Dimov and David Abrahams 2002. + Copyright Peter Dimov and Multi Media Ltd 2001, 2002 + copyright property. + Copyright Ralf W. Grosse-Kunstleve + Copyright Ralf W. Grosse-Kunstleve 2006. + Copyright Rene Rivera 2005-2016 + Copyright Rene Rivera 2008-2013 + Copyright Rene Rivera 2008-2015 + Copyright Rene Rivera 2008-2017 + Copyright Rene Rivera 2008-2019 + Copyright Rene Rivera 2011-2012 + Copyright Rene Rivera 2011-2015 + Copyright Rene Rivera 2012-2015 + Copyright Rene Rivera 2013 + Copyright Rene Rivera 2013-2015 + Copyright Rene Rivera 2014 + Copyright Rene Rivera 2014-2015 + Copyright Rene Rivera 2015 + Copyright Rene Rivera 2015-2016 + Copyright Rene Rivera 2015-2019 + Copyright Rene Rivera 2017 + Copyright Robert Ramey 2007. Changes made to permit// application throughout the serialization library. + Copyright Robin Eckert 2015. + Copyright Ruslan Baratov 2017 + Copyright Samuel Krempp 2003. + Copyright Samuel Krempp 2003. Use, modification, and distribution are + Copyright Sebastian Ramacher, 2007. + Copyright Sergey Krivonos 2017 + Copyright Shreyans Doshi 2017. + Copyright Shunsuke Sogame 2005-2006. + copyright-sign" + copyright sign","short":"copyright" + copyright sign",short:"copyright" + Copyright Stefan Seefeld 2005. + Copyright Stefan Seefeld 2016. + Copyright Steven J. Ross 2001 - 2009. + Copyright Steven J. Ross 2001 - 2014. + Copyright Steven J. Ross 2001 - 2014 + Copyright Steven J. Ross 2014 + Copyright Steven Watanabe 2009 + Copyright Steven Watanabe 2009-2011 + Copyright Steven Watanabe 2010 + Copyright Steven Watanabe 2010-2011 + Copyright Steven Watanabe 2011 + Copyright Steven Watanabe 2014 + Copyright Thijs van den Berg, 2008. + Copyright Thijs van den Berg 2014 + Copyright Thomas Mang 2012. + Copyright Thorsten Ottosen 2003-2004. Use, modification and + Copyright Thorsten Ottosen 2003-2005. Use, modification and + Copyright Thorsten Ottosen 2003-2006. Use, modification and + Copyright Thorsten Ottosen 2003-2007. Use, modification and + Copyright Thorsten Ottosen 2003-2008. Use, modification and + Copyright Thorsten Ottosen 2006. + Copyright Thorsten Ottosen 2006. Use, modification and + Copyright Thorsten Ottosen 2008. Use, modification and + Copyright Thorsten Ottosen, 2009. + Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and + Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and + copyright : tiff_property_base< std::string, TIFFTAG_COPYRIGHT > + Copyright Timmo Stange 2007. + copyright to this source code. + Copyright uses reporting // settings defined in any options file. highs.passOptions(loaded_options); + Copyright Vicente J. Botet Escriba 2009 + Copyright Vicente J. Botet Escriba 2009-2011 + Copyright Vicente J. Botet Escriba 2010 + Copyright Vicente J. Botet Escriba 2012. + Copyright Vladimir Prus 2002. + Copyright Vladimir Prus 2002 + Copyright Vladimir Prus, 2002 + Copyright Vladimir Prus 2002-2004. + Copyright Vladimir Prus 2004. + copyright Xiaogang Zhang. + Copyright Xiaogang Zhang 2006 + (C) or diag(R)) for (i = 0; i < A->nrow; ++i) { cs_mult(&work[i], &work[i], rwork[i]); } + (C) or diag(R)) for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i]; dgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info); + (C) or diag(R)) for (i = 0; i < A->nrow; ++i) work[i] *= rwork[i]; sgstrs (trans, L, U, perm_c, perm_r, &Bjcol, stat, info); + (C) or diag(R)) for (i = 0; i < A->nrow; ++i) { zd_mult(&work[i], &work[i], rwork[i]); } + (C) or diag(R)). if ( notran && colequ ) for (i = 0; i < A->ncol; ++i) { cs_mult(&work[i], &work[i], C[i]); } else if ( !notran && rowequ ) for (i = 0; i < A->nr + (C) or diag(R)). if ( notran && colequ ) for (i = 0; i < A->ncol; ++i) work[i] *= C[i]; else if ( !notran && rowequ ) for (i = 0; i < A->nrow; ++i) work[i] *= R[i]; dgstrs (transt + (C) or diag(R)). if ( notran && colequ ) for (i = 0; i < A->ncol; ++i) work[i] *= C[i]; else if ( !notran && rowequ ) for (i = 0; i < A->nrow; ++i) work[i] *= R[i]; sgstrs (transt + (C) or diag(R)). if ( notran && colequ ) for (i = 0; i < A->ncol; ++i) { zd_mult(&work[i], &work[i], C[i]); } else if ( !notran && rowequ ) for (i = 0; i < A->nr + (C) PI=3.141592653589793D0 A0=A A1=A X0=X HG=0.0D0C DLMF 13.2.39 IF (X.LT.0.0D0) THEN A=B-A A0=A X=DABS(X) + (C) Rasmus Munk Larsen, Stanford, 1999, 2004c + (C) Rasmus Munk Larsen, Stanford University, 1999, 2004c + (C) Rasmus Munk Larsen, Stanford University, 2000,2004c + (C) Rasmus Munk Larsen, Stanford University, 2000, 2004ccc****************************************************************************cC This version of MGS is faster on MIPS, UltraSPARC and Itan + (C) Rasmus Munk Larsen, Stanford University, 2000,2004c subroutine csafescal(n,alpha,x)cc Scale the vector x by 1/alpha avoiding unnecessary under- and overflow.c + (C) Rasmus Munk Larsen, Stanford University, 2000,2004c subroutine dsafescal(n,alpha,x)cc Scale the vector x by 1/alpha avoiding unnecessary under- and overflow.c + (C) Rasmus Munk Larsen, Stanford University, 2000,2004c subroutine ssafescal(n,alpha,x)cc Scale the vector x by 1/alpha avoiding unnecessary under- and overflow.c + (C) Rasmus Munk Larsen, Stanford University, 2000,2004c subroutine zsafescal(n,alpha,x)cc Scale the vector x by 1/alpha avoiding unnecessary under- and overflow.c + (C) Rasmus Munk Larsen, Stanford University, 2000c + (C) Rasmus Munk Larsen, Stanford University, 2000c subroutine clearstat implicit none include 'stat.h' nopx = 0 nreorth = 0 ndot = 0 nitref = 0 nbsvd = + (C) Rasmus Munk Larsen, Stanford University, 2004c + (C) Rasmus Munk Larsen, Stanford University, 2004c + (C) Rasmus Munk Larsen, Stanford University, March 2004. + (C) REG=1.0D0 IF (M+NM.GT.80) REG=1.0D-200 NM2=2*NM+M CX=C*X CALL SPHY(NM2,CX,NM2,SY,DY) R0=REG DO 10 J=1,2*M+IP10 R0=R0*J R=R0 + (C) REG=1.0D0 IF (M+NM.GT.80) REG=1.0D-200 R0=REG DO 10 J=1,2*M+IP10 R0=R0*J R=R0 SUC=R*DF(1) SW=0.0D0 DO 15 K=2,NM + (C) self.outputs = self.C.shape + (C)` to respect the signature of + (C) * (y = 1. / sin(D)); y *= D * sin(lp_lat); } else x = y = 0.; if (this->m_proj_parm.mode == +smmap 5.0.1 pypi:smmap/5.0.1 + Copyright (C) 2010, 2011 Sebastian Thiel and contributorsAll rights reserved +tomli 2.0.1 pypi:tomli/2.0.1 + Copyright (c) 2021 Taneli Hukkinen + + +Licenses: + +Apache License 2.0 +(importlib-resources 5.4.0, Packaging 24.0, pbr 6.0.0) + +Apache License +Version 2.0, January 2004 +========================= + + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions +granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is +based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work by +the copyright owner or by an individual or Legal Entity authorized to submit on +behalf of the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent to the +Licensor or its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue tracking systems +that are managed by, or on behalf of, the Licensor for the purpose of discussing +and improving the Work, but excluding communication that is conspicuously marked +or otherwise designated in writing by the copyright owner as "Not a +Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of +whom a Contribution has been received by Licensor and subsequently incorporated +within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this +License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable copyright license to +reproduce, prepare Derivative Works of, publicly display, publicly perform, +sublicense, and distribute the Work and such Derivative Works in Source or Object +form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, +each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, and otherwise +transfer the Work, where such license applies only to those patent claims +licensable by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) with the Work to +which such Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim in a lawsuit) +alleging that the Work or a Contribution incorporated within the Work constitutes +direct or contributory patent infringement, then any patent licenses granted to +You under this License for that Work shall terminate as of the date such +litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or +Derivative Works thereof in any medium, with or without modifications, and in +Source or Object form, provided that You meet the following conditions: + + a. You must give any other recipients of the Work or Derivative Works a copy of + this License; and + + b. You must cause any modified files to carry prominent notices stating that + You changed the files; and + + c. You must retain, in the Source form of any Derivative Works that You + distribute, all copyright, patent, trademark, and attribution notices from + the Source form of the Work, excluding those notices that do not pertain to + any part of the Derivative Works; and + + d. If the Work includes a "NOTICE" text file as part of its distribution, then + any Derivative Works that You distribute must include a readable copy of the + attribution notices contained within such NOTICE file, excluding those + notices that do not pertain to any part of the Derivative Works, in at least + one of the following places: within a NOTICE text file distributed as part of + the Derivative Works; within the Source form or documentation, if provided + along with the Derivative Works; or, within a display generated by the + Derivative Works, if and wherever such third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only and do + not modify the License. You may add Your own attribution notices within + Derivative Works that You distribute, alongside or as an addendum to the + NOTICE text from the Work, provided that such additional attribution notices + cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any +Contribution intentionally submitted for inclusion in the Work by You to the +Licensor shall be under the terms and conditions of this License, without any +additional terms or conditions. Notwithstanding the above, nothing herein shall +supersede or modify the terms of any separate license agreement you may have +executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, +trademarks, service marks, or product names of the Licensor, except as required +for reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in +writing, Licensor provides the Work (and each Contributor provides its +Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied, including, without limitation, any warranties or +conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any risks +associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in +tort (including negligence), contract, or otherwise, unless required by +applicable law (such as deliberate and grossly negligent acts) or agreed to in +writing, shall any Contributor be liable to You for damages, including any +direct, indirect, special, incidental, or consequential damages of any character +arising as a result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, work stoppage, +computer failure or malfunction, or any and all other commercial damages or +losses), even if such Contributor has been advised of the possibility of such +damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or +Derivative Works thereof, You may choose to offer, and charge a fee for, +acceptance of support, warranty, indemnity, or other liability obligations and/or +rights consistent with this License. However, in accepting such obligations, You +may act only on Your own behalf and on Your sole responsibility, not on behalf of +any other Contributor, and only if You agree to indemnify, defend, and hold each +Contributor harmless for any liability incurred by, or claims asserted against, +such Contributor by reason of your accepting any such warranty or additional +liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also recommend +that a file or class name and description of purpose be included on the same +"printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, + Version 2.0 (the "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law + or agreed to in writing, software distributed under the License is + distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the specific language + governing permissions and limitations under the License. + +--- + +BSD 3-clause "New" or "Revised" License +(gitdb 4.0.11, GitPython 3.1.43, NumPy 1.24.4, SciPy: Scientific Library for Python 1.9.1, smmap 5.0.1, voluptuous 0.14.2) + +Copyright (c) , +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- + +Expat License +(mccabe 0.7.0, python-pluggy 1.5.0) + +Expat License +============= + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd +                               and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- + +MIT License +(tomli 2.0.1) + +MIT License + +Copyright (c) 2021 Taneli Hukkinen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +--- + +MIT License +(exceptiongroup 1.2.1, flake8 7.0.0, pycodestyle 2.11.1, Pyflakes 3.2.0, RonnyPfannschmidt/iniconfig 2.0.0, ruamel-yaml 0.18.6, ruamel.yaml.clib 0.2.8, zipp 3.18.2) + +The MIT License +=============== + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- + diff --git a/README.md b/README.md new file mode 100644 index 0000000..aff632e --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# PyBuild + +A Continuous Integration (CI) build system, testing all configurations where a TargetLink model is used. + +## General Information about Pybuild + +- PyBuild is fast. + - More parallelization of jobs in the CI system makes it faster. + - Code generation is moved to the developer's PC. + - Code generation is done once for all projects using pre-processor directives. + - C code reviews are now possible in Gerrit. +- PyBuild adds signal consistency checks. +- Unit tests of the build system are introduced. + - Its quality is assured. +- PyBuild creates new variable classes with unique code decorations. + - Post-processing C code is not necessary. + - ASIL-classed variables get declared at the source. + - Memory can be optimized at compilation through short addressing different variable classes. + - The same models can be used in more than two different suppliers, for instance, SPA2's Core System Platform (CSP). + - PyBuild fixes incorrect handling of NVM variables. + +## Project Structure + +- `docs/`: This directory holds all the extra documentation about the project. + +- `playbooks/`: Directory where we keep Ansible playbooks that are executed in the jobs we use in this project. + +- `pybuild/`: Main directory of the project. All the application source code is kept here. It is divided into different Python modules: + - `interface/` + - `lib/` + - `zone_controller/` + +Also, we keep `static_code/` and `templates/` directories with useful `.c`, `.h`, and `.html` files. + +- `tests/`: Directory where we keep the unit tests for our application source code. The tests are structured in a similar way to what we have inside the `pybuild/` directory. Tests for the `interface`, `lib`, and `zone_controller` modules are split into `tests/interface/`, `tests/lib/`, and `tests/zone_controller/`, respectively. Other tests are kept inside the `tests/pybuild/` directory. + +- `zuul.d/`: Directory where we keep our Zuul jobs. + +## How to use Pybuild + +## Contributing + +We would love to see you contribute to this project. No matter if it is fixing a bug, adding some tests, improving documentation, or implementing new features. See our [contribution guidelines](./CONTRIBUTING.md) so you can have a better understanding of the whole process. + +## Code of Conduct + +We are trying to create a healthy community that thrives on the desire to improve, learn, and share knowledge. See our [code of conduct guidelines](./CODE_OF_CONDUCT.md) to check our behavioral rules on this project. diff --git a/docs/build_cmd.md b/docs/build_cmd.md new file mode 100644 index 0000000..100fc84 --- /dev/null +++ b/docs/build_cmd.md @@ -0,0 +1,20 @@ +# Run the build command + +`pybuild/build.py` is the starting point for generating all the files needed for building a complete SW using the supplier make environment. The script takes one positional argument, and that is a [project_config](project_config.md). + +This script acts as a command line wrapper for [build](../../pybuild/build.py). + +```none +usage: build.py [-h] [-cd] [-d] [-na] [-if] [-V] proj_config + +positional arguments: + proj_config the project root configuration file + +optional arguments: + -h, --help show this help message and exit + -cd, --core_dummy generate core dummy code to enable integration with old supplier code + -d, --debug activate the debug log + -na, --no_abort do not abort due to errors + -if, --interface generate interface report + -V, --version show application version and exit +``` diff --git a/docs/design_standards.md b/docs/design_standards.md new file mode 100644 index 0000000..599fadb --- /dev/null +++ b/docs/design_standards.md @@ -0,0 +1,84 @@ +# Design standard + +## Imports + +Allowed imports in production code is: + +- Built-in packages +- Third party packages +- Libraries + +If you need a function from another executable script, refactor it into a library and import it from both places. + +Allowed imports in test code is: + +- Built-in packages +- Third party packages +- Test libraries +- Functions from the code that is being tested + +Use to full path when importing. + +## Style guides + +- The source code should follow [PEP-8](https://www.python.org/dev/peps/pep-0008/). + - Exceptions to these rules are defined in the `/tox.ini` and `/.pylintrc` files +- Docstring documentation shall be done according to [PEP257 style guide](https://www.python.org/dev/peps/pep-0257/). + +## Style guide verification + +Test that the code is following the PEP-8 standards using [flake8](https://pypi.org/project/flake8/) by running 'flake8 ' and [pylint](https://www.pylint.org/) by running 'pylint '. + +The ignored folders should have their own configurations, to keep some kind of standard. For example the documentation folder: + +- run 'flake8 /doc' from the repo root folder. The rules are defined in `/doc/tox.ini` +- run 'pylint .doc --rcfile=/doc/.pylintrc' from the project root folder. The rules are defined in `doc/.pylintrc` + +Plugins that should be used with flake8: + +- flake8-docstrings + +## Comments + +Comments inside the code (not docstrings) should explain WHY something is implemented the way it is, not WHAT the implementation does. An exception to this rule is regular expressions, which can be documented (but shall always tested). + +Instead of commenting about what the code does, write relevant tests that shows this. + +Commented and unused code shall be removed. + +## Executable scripts + +All python scripts that are executed from Jenkins or as stand-alone scripts should be located in the `` in the project root folder + +The executable scripts shall use argparse if any argument is needed for the execution of the script. + +## Libraries + +Common code should be located in the `/lib` folder +If a library is only used by other libraries, it is allowed to put the files in a `/lib/` folder. + +If the libraries requires arguments, they shall not be set as required in argparse. Instead, they shall have a check to see if they are present when needed. This is to make it easier to import the libraries if they are sometimes but not always using the library. + +The library folders should all have an `__init__.py` containing doc string. + +Placement of functions: + +- If a function from an executable script is needed elsewhere, refactor it into a library and import it from both places. +- Only functions used by the library itself, functions that uses the library or functions used by more than one script should be in a library. +- Do not move a function to a library because you think it will be used by other scripts later. Wait until you can refactor both scripts to use the function. + +## Tests + +All tests shall be located in the `/test` folder. +Unit tests shall be named `test_.py` and function tests shall be named `func_.py` +Example: `lib/gerrit.py` shall have a `/test/test_gerrit.py` + +Additional files needed by the tests shall be located in a separate folder: `test//` + +The test shall test WHAT the module is doing, not HOW. That means that you shall test as many public functions as possible, but do not explicitly test private functions (def `__`). Instead of testing the private functions, test the public functions in such a way that the private functions are being tested as well. This makes it much easier to refactor how the code is implemented while keeping tests for what it does unmodified. + +Some duplication of code is acceptable in the test code, as this should be more focused on DAMP (Descriptive And Meaningful Phrases) than DRY (Don't repeat yourself) code. While we want both, it sometimes makes the test code hard to read, and then DAMP should be prioritized in the test code. + +Mocking inside of unit tests shall be limited to external systems (such as gerrit), and other processes (such as matlab). Mocking inside of function tests shall be limited to external systems (such as gerrit). + +The code shall be unit tested using the python package unittest. The unit tests are run by `pytest.exe /\*\*/test\_\*.py` in the project root folder. The unit tests are run by `pytest.exe /\*\*/func\_\*.py` in the project root folder. All tests can be run by `python -m unittest discover -s `. diff --git a/docs/images/DD_class_example.PNG b/docs/images/DD_class_example.PNG new file mode 100644 index 0000000000000000000000000000000000000000..80d36cd2fa8cab73487205d422fe5affd0c612be GIT binary patch literal 29271 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 Q&;~xoVV(`&eSh`e0UPfy*Z=?k literal 0 HcmV?d00001 diff --git a/docs/images/SignalFlow.PNG b/docs/images/SignalFlow.PNG new file mode 100644 index 0000000000000000000000000000000000000000..58c4a1489b42b073970c358b26eb7168e97acf23 GIT binary patch literal 25110 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 literal 0 HcmV?d00001 diff --git a/docs/images/TL-DD-MACRO.jpg b/docs/images/TL-DD-MACRO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65edd1fdadd87815fbbef465f61bd25bc02957d3 GIT binary patch literal 26704 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 Uw*Aiv;C`L6e}P8{*#Ex?0E}h+lK=n! literal 0 HcmV?d00001 diff --git a/docs/images/TL-DD-preprocessor1.jpg b/docs/images/TL-DD-preprocessor1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea0616eefa5caf6822a1cf5210e93d650a31cb3b GIT binary patch literal 13831 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 literal 0 HcmV?d00001 diff --git a/docs/images/UnusedSignals.PNG b/docs/images/UnusedSignals.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1b07c3ed38517189181138dafa063bc26fef0ab4 GIT binary patch literal 6514 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 literal 0 HcmV?d00001 diff --git a/docs/images/add-preproc-block.jpg b/docs/images/add-preproc-block.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a49eeab70acae56cf60e5f732d5ccd45665598c GIT binary patch literal 27950 zcmeFZ2UJzd(k?n-kwFjz1c|~T2qF?CFM?#rIf{bhjAU^U1e6>kisYP8auAR#Ip-j0 zNzRMBc+Rg#{b`Q@4Mr^d&m88fIVmTtnTXW*;Vyb)x4g(UIcE+OUp?EXlQ7F zG58O-o&h8QJZx-SY%Dxn99(>SJOUz$n?!_!L^Nb~Zc#w#m>3!880cBp1s<`m^0Cn~ za6RGT6A}><6JvTLtso^TF8~u0`9%Z`A0MCS1`+kmo75ur8SabxcmG^B1H?FJ%;;1Q zGKj*Is^j~3mXR)4T_&*M-ndIsB|0#iSiawwV^#I_X{UKTs*Qn

b9N;w5{I1V_=O~p7b7KFh)vZu>V=afth?)98K`Al79J2%#QfVn2zN4#b?ZrUp z^C=oBZNGTS(g&Pl(or&6bbrrGATl30|J$4VPgwl_7XdnP!u-FWcaMHfR7x1>>e@`2 zd&SVw(AXu#4iW|Jpw()Gl@+e`;m`Xrn~jSbz1K7Q-!bT)`+G-!ZLOJfW4av5uElR2 zSGOQ%IxsMR+pP?i-FE%84}|D&bxve0x-Hq#zqe3Fq}-xqf+Jw#rdeCyqouj{v{3$R zXw*XQ<-bSRI<(xR#vz%kZgZd0eHSj(;Wlc9Jts;n62SE^zo;Gq)!DQS#Gj zi_fi&a?o+Y$W_g@i5{oh`wL<9ZgbKtN54L+x6*0-laPoC0&3;`|Es+-4QlF&;&>HO zN~$7?1tSQ`nleIAu`ES|08uD=1W^GI88(r{015;KkVTYH8w8=m1QbYuECOjj*-}v% zkwp@W24h4~G!Q_RBoGsNpGLoSrXTvLU*CK4?wxbqJ9FQ=|KI;C1%wmdPJ~}STg?NI zu-wASOi{GeWeN~kcru-Q>|9wC#pSziC$F@Fn~4CnE;T|pY&=J%KIs32U(TRDaMlcL zX@2A8jySkoa`7pCEJqXa>-!Wf(DKFmoM5H0OOMZ<#ft!SJ7?C{RFg)GUKbRM3XApM z)+C-BCwPiTc5jP(lLEp~k-B+D7-iira4dJZ9XEGskV;yYc+q+Te0^k~Yu;31Bu^kY z-8z7zuXVUHKC0{9CPI>1{8(2ZOlD$Y;Sgy=9J#W)(10g4P<+K30NR5=s+}de)Ah67 zZE2&RF`M>SQuk?lg%IeOR__%_jgd-Psj5C%jaBRBEuiLk&pi zj?km71_CpA43C30&!vWua2Fg7cTqCX zVbWOf#CZDd%wB%{xHm@UZ3ziCd_V*M)Dbn)!)Cjq&gaV7=N_5LIR^223LFVZj3LHksU0Yzca=8rvHRp2jOI^P{E|fCa z{Gfd-;CDr*l9?meP{5>hHd1Y0=J*gUfum0~%Mwe{8=0^V37Q(?r>mL)#t;EvN!%B0 zrvVKL`8X`|efm!taf4EYSI@TC!VEQr%3N2eD$=J+D`;5V2roo?U#`4djd-rn?KNf{ zT(LPv3j8zQ+G_RJXQH%WDQxXf%D$m9J}VluClyO^Iz$?^&rbY;(A@U$gknWpu#cI~ z^0db@j1ZY%&KW)KmTXK<+@vW+(Cq_DTC7pWjc@+Vwbs$*DR!6I;yqL;1^Hm3=dWYY zPv6HkdI|;|iGER}8pM~0p_pt8^G@PqnsN5M!lUZATrJ$Y{43swS|zuUlU^zW2h4Tm zO}$ISrgdPix(FbmrQw9Us1Or!m4|aS-bbYvvUd&N7Xp~PJ1jzhKSNDA|3DPq9EGY$`JGU5g?OykNiwxH&fBl&UD!_a-N~s z7d7%4azZon(_mq|4*!}Wco3yp8Qz?-7)1&~B<(6mL#GtjY=BhBaH;& zVSeFqjtRX>MG=|I-SDik2#O7U8)){k^RD=1>V;t}x*q|j!pI>9jGNzFvVWj1H2pD}&~laS6xpQ%WnhiYZD z?b2!_lOM3nGR{cp>zLS>bOTsV^MFm?;014J&4_qJ-o!13;9zll6=7|QwO$xA&|C29t+5r&DK2;^qdDo z>Oyg7T;bZ7Kb8^R4{Nx^)SZu`bEMfn*WK9)6?K$qJJ7j{b$(ozv^e5Fs@WyE&x1E0 z!a^yppUcGjSYuLJlX(lRF)%{igBbSHa7GrK!cx&RPT5!>u;MHR`37- literal 0 HcmV?d00001 diff --git a/docs/images/old_build_system.PNG b/docs/images/old_build_system.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bf53de989855b9d09d979581eae15599ea9ec4de GIT binary patch literal 77455 zcmeFZXH-+`w>}EGku3`Dt)K!TmMvl;pi~7ZR+J_^QUXYakN`r05SpU01px&D0@8a+ zXh|TEpeP_+KmsI$2ue>tS}3916+FNHId_bE$GD&Fr;{-p23RZWE%TjoKF@q+UK$(e z3JXaH@$vBq-@ALul#lNZ6d&K-y?^cle$x^d9}N7*?`NuegAdzvVjB4254Y=v*ZKG= z;|^>-6aaqS?{nA6kB?8}Gw&Zi1}q}U$G4Mz@78tm$961+VE8{SDLV^p>IOz>OY)~G z^3J{0smcj=#yEWN5ehp0bR>QBkIl@&JsDYr|Bn8pDR9K$)SqW$9=(2Nl~i#xvbC?z zV|#u+9m^ORN}0|`$ruu09{Pp~Kn5WD>3!by^Jd;fQ^4J{4yML{y{(JCx7q!gF3C*h1o%nnAmxDu~p!ANA-S>Q=e_Q{*c%CDy#dZav zv8=P0m{@4tR8I7(j2_^geWH^_@^;4M;NMi6Mp2)H%t@!x~|e4?88&sRBvP9YyAvLjDc>C4xB7WCai z3Y#q_(!?OP4~fiBw5uF&x$!2?nMRFVoqXq1US3W~>$gL*F;?WW^>eK1?yhTlfNP?p zpGfiPn3x?aqa(2LJdAl(RCVV&`90``pDN|O8dRB&>Fj&X}daaQNHNM_o>`@0JJ4*Dsq&FZaB%zu7~v3t8!>=%;D{5t?uOIWG#v zHg{Q7IzCSi+g`tl4_f~fsqNLU)}*lc_}W&;Dw&BtVszypd72uT13$Q8HG|F1GLh%z z`bJE2rnzbFtanex0|D3Ab=NFtKIL|I#xl@zm34lTv{&Lvim(@IVcWrB+;3+0*XiM| zQ*FrR^0Tp5&iHxj1~5a2+63FxN#JiQ^ZdZl2J%9-tY=J2ObXg*377(0m}-#dRUY)M z^P;HG`caLcqj*u%Xx{NlJjOdIIjFV^g@e`IT4{mGLF747shmCK+LF7Y`-${y_pon{ zx@Og-XbWug(`&#jveLY)=C)zA{)M;Mmmf8ceK{Lfg8@V4F1dCYKRxyJ0|IhBG@2ykBVUNc~uhdHqx_**gaivX>x-*`rp6Po8gmu*gU60gZpV!bWbV<5ln$+} z-hA!tyyVyZb$Tw_0f*}wi9{d=<|F?w^djA4GApa%c1sn=ZzfSyn zHnsv6JPzi(i3|Qr#X@Hz{wCD}4wFT-@y0(taLig?KUxk-swuKguOSdNc!~CL1>T}) z^q)(%b!<>o9%tGeQrkhQL!xMX=QeK~jw1Me?Gr(Vt87kCTxsZ0%&()R95&dqGEVBp9n^-JwVkn6i{<9K41Fp23M3DNYsJ)^_<`y|Kyk_;rc1VeXX_(6qFc&qTDnZa;8N`}24V-8I4V_h^VcUEW~oD;iLR7O z<`&Cs3#I&F*+-tT=BTmMp%n7#-V=HF%?NXtq_w?Qbu2KNaNfkvb3465ouZG*RT1Bh z%TWY6W7I~bBE;*|7r&fk1LvjdTARFkO3obgxzY4r{x{7^WrStQ`7FKzv4hYZGUumt zH@A4SdYu=5_gV{$ElcNF(~XTMk7Tah>XJ(U*4Oy>?wmmaN9XES?U;_bj0nn7`uy6H z#0bP4i7SD%I&ph6y0y4oT^~;g+~v@{8#;0uIgI(xf$rl42+N!JTZi*UhukvRdv!kX zPA2>HO_A1Xv=MQ)cMq2)I;#Q8n53NJ`PZnuyky|I@$3-+MPTHVa>lD~D^n9`-kfst zZ{;2p;SnQ+;h!~EhZC&&&L5w3byz)9Zv>5tdSX3TBxd%NBiTS9?@ESC0G<`YmV@u#HA`TA`NY+3f@8ZE;bzbx&h%YO>_P<=enEZE@| zG*xsea3aOcYi_viDiRJ7y}oPI#}5KGelYS|Y(3BAj~9eJS2`>ap{oQd)<|-#H|3jp zztpwFeqY7nZb|QKdK+D%scXM`oUX($ExUauV5BthN>^QKThqOsrV$)evS5K zkE+nHZQwX2lv?Uw?ITPYrcx&&G=QWhISg9)$|^VO8*%`ey!6U`T__QlaMt79!)fjb z%@r?uao~=-*E?P!$4jJy#S={e%4`sIO$~FKOWn*3b%DpCe{IY_8fLU%XA0FJtC!i4 z)_)7T0cS7;P49E)@xISLrJ4I{EN`AJKD3Zml>(O`Ov2BQGS?FHQX>!sq4z8F2MLS zX3MHKYi2)IPFuDVeCXWf&U>TT_+-uHuQ#{rw!dL6PFWY6ded9ja4JOfz3KN!UZhj% zzNWNvk+)6PpM(GGwUY$KBFhJ)m#n=fQj=_zY#3oXTPbdxK#DU-Hi8B(G}(|Xg>^q> zLs3Ib-BBtP{cU;o5`x>M1m3*x?5T42xW|SP95`Wu5~3aCSnZu&`o*80)INLZbE`PeLqayeZ&2=yTF@$rX=X2)^jPk^!L9S4`{s=J%$ytbnn>Qx*ai(ao7(7Ho?f|MPbOf8*feuipiDt!NWqts=gC&PYVn^ zpz2ExN*K*IP7|eoQMe4e__q@lORITN#2yjFYsy&A-c9JiiVj*0Y97kEB(UD5myCOF zKzVv?m&ysRIu@Xk*$>~3egr3KHe5jHtA6&XEcI$S?4e&b8Dx7~A5-dn7gI{n!>HYD z0x^RhYMMC?7`BNq8HjZ~YfP!nbErT$jXih+a)It-jb|(6_lmr;a;lchwS6Lp$}#-{ z;XGPzoBIhCh~uTtd~Lliy7DwhCGFdlG816CcKVT{apblb@JU^0)1BxN1ro^ai+L*K ziPk9SrF9M>5)1}=h2H!I`8;y1ls0mukXq1xdt-#pVfZ!9!R-`~0e_IKX;Fv6XJydv zPkJ_0sA4%(d+98MRyyY!aE1zzI1KsAv!s})9kwlzM!j^Q`tXOYDyl`*oYjcS>c!cb z7HU(OQqm$rx};I;sBgo-4V>4w-nq>@ZsGaiS$f- zn>H*Y3Lu|-5UJ=ZrhnQ3lUQ;3G#15zL7f0WNv>GEWbS&BfQw1VtLcV25OIxQqnLWX zxH}qNcIER3eh23-kS`FS{k&xAow+(ZO~VG>pM>PJZHN(^8H&KnQ{))6G%68ZC6901 zA4%Bf6Z}^T(^d77=pKy^M%Be&590f8h=#E2&LqO;EzE@Hs)l^B-hgppOp~bxGu|P2 zLJvJK5`${X5LV4kk{8oa{RxgZYd=)SGu1XDSU_aC$B=`*8n!B#D(}~B%FNfBwIe*53DBC2@n~ zRnMwb_JFgQxYFK1{&l@M!UR}Y-rnjiMe%Rm)ATIe?i1neOqLC!NFbJETC5UFGATwH z>5WQ4WDk(;!{IRr_y0hJ@9#^$OONTs)9z;?D*M^{wbQ+wPk`)bIgf-O-V1%l$R|F# zNr5Z{`wkZlt0QksAy+Z@Kgd0^%yRhhxXMRAu{lfne)4U4Z-;WIp3~|(Lhken#;Dg8 zD_EZ-)wA4IEt$i4vz5kv6_Qr=0xQb5-gew88F%8Vm)l(5tz+fBHvq?Dygb(W4DQ8r z1gqlk5Y@6@&>}m#hT*vATwk9c)BX01L+T>2Mj@fCUJlpldXE6Bv#CiU(Xo#mA~Y-I zT~z|HkBcA0FE21D24}}Z2mU6mi>o{g6C-7VSb~4Uv1JuQ_`hLTAuFiMpeN&pbwFvz z%i0iA0X?w`4Z=i2i|_Gs((ndw#v^?kl0;9+s41V*vyML5VoDuJSS%NyA`350j~wX| zWvXQ8e(ry>7*fVSWQwGkz%w=dQ|o?oRUbaYnF9Y zXx;oByw?v;8#<{+J&06(rno& zbs5!-^Cn1ZXP?40la7bD+?qGfziY+?HS}2cSiD1d{5$v!a7{E(e7y{W#wyTDvzrH5 zV@|_-^f8{-Q{p-y7Va?Y_}p?W%^rP?4RZFdVZN#9FZV_J`VHH`EQ~cC>eCY_X9`PK zNL9G$M9e{_)^&djG~z=jE9)L=ZuY#5|G{Y?QOQNIMU3N3-Uj``ZY(JT|22shF7;YT zS|Q|@cAArZoxhacZ2Pb^vr}jxaYE>(N)L$qT}ry*#SE#VO{&;q*?1$fB;>0nIC^v=uUF5oCOd3oHIR;^+3tuMv#5mgETw?5 z%JTy)!Q-%hmJ>{#m+G$HyZyYuG4y+fr^chubhc7GZ9@6hrr3;Q-ckNiS_0?2elj{K zfR+Gr+7^1h*a?FCZT8$N?`jd~p&-eBowHEw<+_*OF;RXI^D)MTqWEbX-0}wZb2n4{ zNMB*bbq<4#)O$Gp1O@A-zJxrq=+TQdhtRkqKJP-li0(hg`t4!=dVq z$jIX_jUfANeu4^_8V?DEPAJL5Q;V44pBnZ<%yBT}4epgVFVXx6p7;=JRIP&P=X85( zv7 z_QO~USRy3r)@$6WuGn?Gj&X4PPp}66e}-g4>whORpfO@&m8@n&2-9%(Wa?%80StukU{2xa!IkUMZ^ zcn1I^|D8S@MRH^xoF1uB@bWkhxOgSlldH^0^otDn1Vf6Xg(Ywc%UXvcvPsD^2(EIjd!9ymXx7jZ=o z9U{0Pznsq3^eXt=&KC$u1TcL*gYeM;CBfH>_?XMucijw=3brmop1fs>;$cRqaA_@{ zc!gFg4EV_#g3l zDJ1=sWWBgNk2N!%dfnF6q>C1K82g(@lN#gbx;{l>Pc7UHhG>XCQh?`RTpJ z9#=*GdxS2VF|zjeYJ*)athc#edaTHo^<9kXKbdX(1(mMeawc1?MO zH^6b%z6+p($mqaii$lIHn)%`xATX=2umfLTVCh12RJI!)bds)f$zS=5mb>=Z#Q_?k z?HO7gGXME%ii*y{Y5SBbKfynu0n(K3l~U)cm9f+T){uoh>OqFpdOQ&8-v+ucPdzOq zlr7B)qPHBP?Z^bU8FOFwVZ4|AaL%WLPyY^Rs9t6F-5LiUN_?TGpFeH944u;8j}l*R z`+VA7+@6Of-|~6NDSbOE0uNIciENCZAZlH{tM2=BMO)TY($PZ_ar{-3&zBL3O~}OG z&3Yci%2H9310m;iE}ykec>s)#$6D~YJgpFkvI5P%tE;CbSIq<~frxm=qXZx#*FSzh__KwMESP|6KBxZ^7B|YyNrhRVAC1 zLMv=dXvM%G!a+jJN1!?}T_W_HMK~wLnS=l)f5}?!W`2IJsI1#h@Orh1y?6om=$$xo z0X~O!9v$!0<_TX!=u25rNoS8ydhFEThzU$ccCw}$duHGeXXE41dK9skPPi;8!OBXU zo+sxFu*S#(bRg+dgk3fTEHS$`{@UL0*x+;8gm#GH>}z|201-af$44|7fuMBN^pjg* zHr}0}vwt73c*RQn*Y$I%`G9lSdZUVJe)iRB6k04o)NeWE?Bzk#ydD2Zq=gD$t--tf z+FsFQHM^}x6C=Okr|qKe+~73bEToZFJ=)4{%ZIK8mqIxo?&$y1cU0W9AZz>N*4kVO znr8^&VL!n~B6#e1eBPYFOYrS4Y}H(kl0)BK>3QQ0Q4VsL4jbB;?O}CaR**WE&6-Z9%-|K6^&|3|v(`5Bj4#(B zvSniuErGKF#bOk)Yyt1X+r6A7pcwN#Ca)>h$n%Zy;DlkuL%=gz+F1RtDftE&unw^( zXRM5Adl|MjUoR9Kc%b6VnC(Q3N6Ocvx??Qv-?uS-fv5lN zN0BM`BZXnn>HCuRDFkmFN^uJxi=V};Y?I??3fcY6!WOoDEL{D0xEheL zYKK-eQ3GVkR23JON88i^d)C{2gJYf8WkFZw$`Cch(QE4asxKR@H_(A7c0DciW?2yi@=E{$7on!bbXD-4uADJ`{#-XuC0*$F z?kry8Shl}sk>|uJYVX$-(e9^&PBgesy_Ob9@7-Fbr0eopYfxT zGbZGfmt?Q?0+kdMI!numB2~rZPr8d>YTK3Dbv<74jUaqkU*Ail(Wt_?LNotH1@!lT zO0g%rictbtY}{h;fw$B{+rY6U#`uUpgj!77_C&qiURI&p3{iFl7y%U9%!b8c;%dT3 zf%(v-HCHrJe>jfc#M9qET~+FbHlwOnx;hr>kyT@y`dW@JSIL<&77BAoz|~$`W~BkJ zZ8yrdnyi)@O387e1qG$=PiT4v=}y>53m09h_9&^J7545f8*;tLb>;ToByt_}D@z^b z922ivsD4w)>ax)K*0ZpHzs#lHOk=%bUL?lV3bm=tF&z$-PgSj8pPDAB93gho0;D2h zZ@1(*^do7A3N5?1ziMZ^>OKz1Yh(dzb@@n!3DsK8-jnKZ192U;EJNDJz0rG?K<$hMu=^O^|9(q zO?*?=`X`Xa){F6NP8C;mFf+M^uAdgU=vw`!;T)LqWcJR(d;^Nwl51qHu*1f$C|M z23E9S=eUNU$_i)Lg~&_k^yQr%x|c<_89$G~`&!es{`!Hi@mP)i_P|y`!O7Kd5S3!? zVJ3No01Nqyf?;b?VobChJdNL!KGLUHHy8gqlEA{t6Q^pGFHO@3&+2K1i395Kgi1{h zed1?$dFeBcchNQIkT0OJUUoE{aoL1@YL1YipC40s$++VSr0ORa(L(|DKx;Q?SEGH1 zZSEX$p`9RaF~e#~7m=whR7=(0z zWn?+6{`wCi^B3IapRe=iM%VfSB>g0r$Mvn!=-zPcjJq~&_i5H-=wP)qSRS1J}WbbrM zX3R_)LRzL@#hHr8EoD`w77T4(s8)n^*fA=4c|I?rPn+GHz(P-L+6h>{$L*;3t+R_ormx;H!W~^AEhuUmjbizDY4XR+-@az=)zK!b^mOMjq_ZNZs;m2t?C5GuN>ew?RrU z?q+u;7GJs(n#%}SK&s|bu2vJe5g?m%TK+q@pT*yHQ1f$QQ0!!&n@j&dGi|g)j`r?gOuPAhS^@J_GGbcccMBF zE8Cu1@twXJhGLicw_jWrIQXB;I`-l{AwC`7=sQ3$Jt~>y-L3u3s=CwU0MnTl&!nEJ z!x>VXYA&J;F0^1T!5TtkQhLak5QZ zaxs)5_v(0LE1S^%D-np!I1$~#%GIrJ(efJ>RDuy6{&G%?dgGsR zJl6GTpode(oHf-2aN{+TYAst?IWt;WL)OZiTa_(37Nmi}6Y7@8BRyHA+*<#u&UWci z^;uNTJL`0$s|3j)>jc2t#0KYA^f&@6$D*xoTX*P6HMdGoC3I&hlbw%mUmOr_H!=1I z;kp70&cn#tX2rx7btN3DkH(n$ou)R#WMDhU{0DW#;%+N>vNqN3SMF%QGq&cI*HJxx z_puY}CE!L*-{P@$IZ@Hr8!$`p)rLd0M?vf~jtRFUgi4t`?tf8TMk+1Vq@~1(TIp6A z%zr%PQ5(eQoc)Enyc6z{t!U~I7P5UB?b``UQPJo%c%V(03^=+!F7#+w_OqL*1DPiWkq6a}N+rY^wiG!D zT-w&tw6A*=oPUZ}D=_}mOcMiVRl+E~)CRh4>=n6cS9H57mhc0+Rx6FW^AYp%tJHjD zSSa0!GaeAqt4+PPuGCQ5fq1+oQrcAsPU5U?I&~AGjkX{2{7XQSXN{Xe{e`82#@efvS796C)MiHjtR3lsx6GU5nB&(ZCn4Vjek`v zL8q?$+IuHX{)nt#Qz~wG9Q0`t91_q9X%pDx7TR?k&SQ**zP)JWM22l;bY>`PR-<(7 zYqxDe@03*<`DK*8Jjhb+S040BzT7Ml)z?)NE_|n4{yd7hg@$Vh}w>yerm&87s3 zhD-U&nlSmfq+1|1*d-{AJPYy&x$TXwIzVnS{9=)6J`_a~#JmwI_0>01cJ6~Usut7a zu)Qk9REvs|#_g+eLHD;ytRr&wym+KTxj``n?Rr5wARY>ZZnoT;6jA@+6Q)m$-GtZ!JXR zczxtM2fVd&VORa^NSfct2$B;}iX3D~V_`tSxkO)xHKn9;g-I zd!cx#!T972%AV}spa81xO25T zD1N{FU5Nt%u`>N?Ls0w86qSCe8x`SQasT*qYhY3RFa>N`uNg2T$3r)!UJz=u6ohIb z@&zJu6kv6CpOsgP@51&?(6}O3FIT&!F||1m;^w&}_q2Lfw&(eij}uq^8B0-d`UXq7 z+e{<}QNzSL9B`5d{tw=#GwHl+tGkVsj`W`YSMI}Vt5z0xP zl&%p>zUBdhg%mvf9eR11Y78YKbs8&;b2Cd$w6ybIQZKpmStUw#@rK8}a|e02x8Vz< z`4F@cs5g7pKr7>m6Fbus`w%;;($;?Po38Lon~XK`*3!;aazogP?oPXr`Y+kAhKBn) zn~LP^QH`>KN6Xj6(_Kq*FrgRUk=jzFNDt1L-P3Sh-OC!>66q}S<#N`T?ACDw>wiwP zmWkUbVk&N~KCZ71Vct}P5vG}9rInI<2EJN^+sgv*QJwj<^aRFE6n>S33t$Sn%x{AYrAAV zo=pK(#eW99b4c4epkeLbc^M=t=O(*w(k?X+l{RTf@hS|RG}F>Czx<*S<)72<&=HaT zh&-l=+OCuyL|B&XLa25CLZzOtS@*B|u}KUF{b#o9!5=7K3>F_ur|n?a{q%05bl6gw z_#vl@NyN|WPinXtImQKTmqnkV@a(rP?GWYswSNHO11M1?J!osRYBT={KC2742yCC} zC0F9~600nNnF0iLGw@ORO$BWi%xDn+rcpck_Xo#Ra4s1PS7sfVuCc1!=-65rgU=m{ zE|A9+myJ9uM(QiqgtVVvCs22Zj)oXp>(y6Ussf_#eTo`Y{R>zJ!ff2q$Yv?{;}>>m zu@t$Yy@~2u`+yC{hEd|>iXwV;rEB+Inm1}aTJzBG|9BYx!UT2_-`LZ8a<;}^d$XmZ zn$BIb>7JUsaeFT$>wEt#5UUt~Kgo0my-F@nV)Okg+0H~1z|frI0|4O}`;_CnSaa^Y zd$}J#sku?Ts!1;OjD_WTOR*tpp0%7aB4kXS{;ek-m~u`Xnzq1|Mrb;D;m!X1(7e4_YGZU~1ais~xHAkj*Kj;N-%}Kkg`#smARe*fR^f)6@!Q)|$TP zEwq1%74l~3(I$7Qs9NYr3ABsfeP+VolmB8)FR+V(`RQlv#l;sfFLikp4AXDcZlh&T zHtQx}n?o{5Q^Zdw?^Ama7@U`1oCCO4l;!mq;n6RxU<8aI^CEQG( zT65QToV3?8{SHFOoqzm>lau=dhHj4_uI?c6p+WOO=oo~k%>}tc89mATH@#7pk>R62 zQg+|N_oaTqq1QNrE3Qp@cu=h)D*t=Cu1Hw&R^Q)+>kfu4|BQK`&8}cnuU*#IA?d$3 z;eI84hwbK+60jEZcKh zk%j>6AxS4buqjiT>=yTue6n5b*bnKaMel4y?jjgfbf-`6T;wr*64Mbm7;9(jHcun> zj9e*gzTsjydYAm{vA-d4Yx}t>8D>?8Z#K1*+CTIl{>c!GmvlFGO@d3Il*KdaZCyOY zhw-mF>Wn&)rA6(IXh+Z1-77!6$v+sOK?~V?WQ15J2rbulO9B!lvt<+#)w8suT*eyS z-=oLvP@o_JuK6)hKbD+xKXm1hWVqb0&CfFZ^T!{Hdjm%k)NIOsU@htah>bg?@Xpj_ zez<;wR~|S}Xz5~Sl6useRmp|;)1>X^Dw@)QHbuMoQaWS zs?`Ngy((l2K&FF&k;z*jfywoxs|Y#G3#E@#uZ#RNvDx#JMPO>|6Di@~GKBd|f!N?z!qEMX88E(k^ta}8_XNSA z(47xPP>UG3?RmOlH(%4aOkixG53wgFaLT2MmTb^@fC(aS^Yk>F5#{Ww`E4lQxI*eN z&T&ggjd((h+$b(pyQZq$Zsai0V$Qci>KzE`dGEVO=cL>Eon6%8;{Frd#M9?yeP_S= zU_=q_4*?&IqhHl+Xpz@iIkH`8)RwumqQ(l?S&O!~?Kit92Bhl^@3-nX&yQ#)Syc=3 zP?Rmmp~Rp#=dwglT4-3wt8;y>3kJ` zXaY1?56E-0_h`t9S%Dp}Rasb(Sq(GGAD$v5*IwnnmNd6BKkc`}6}s2E6^o~|h8X!F z2R%z0E$zjsu42!qezN#hFrZsjtm=rLTbFXBCY$DMj0HkNRTd;AUwjV9)iJL)rI< zT(=IG82n}{4fZ?$)0q`G0X=T|f_0E$)a_JfpuQ6eh1VZT*OR8bG9Fgt4|; zzl|;i*;2;FIoVwnvfZ@8p;%jEx5*JgTNPe1@3*lBUVFH%SKbb>Ou)U`8mll3Tj=7EiX0!P>gbTy)B@e|^;AnR!ZYc(w(iIM)0@ zda1igtpp_3CUrQ6YccwIddxqd*P`NZJ)y}$NUeF}C}Tifvv6Pv9~3uI3ZJ47is7?L z%U0VnbzGK%c5@r#z3qR1GOxN+tSrz5R93#QfjS(#9pae_lt%zD381ObdkQ*I)$$WW z{`oeAqYp`0`w-emeIP}!gtSiGTY+wM>AHAby51!F;Fg#SbpOEEj4@sAV^IB_edsXC zbngGHYIlMC50LH+zri^d#!0B#r&P+>kM8NK<;Cj{SIjO0p=SYFuumR}xR;j@qR{cR zX2x23a8}S}Q`MC2?R4pEdd~q_*AjPkPKtt*3IiL~9n4*P(+AI-?%#f?3R$>Y+m<>5 zOCjCA*LQj50kT6KRsJ6ko^NqAPvFwgjhNTC<(|tT9T1KMCH|fy5CWTy^Ge*14ky-> zvW-}IRkeuLh$k32>dhzMEHbpkhi;(&Eaqh%1I#KG0}{SOx_J?;IU9Y#xrOED0|2wF zmcinvTWky%(6jE7l^<$uoI+bC-q<00SL|DRw`f~|i?uo0Z_lOu zK+%NT%VqShz5UJjJ<_F^4*teCmjzJ(Wo3xmRG1IIj{Tpd)Cx=$0EO_;M3lQ%5B zRxIy$;JgLRg#2yjiBbuC-lKo}@gsoH84nM3@c~>TuZ#v1AkhwPrqG0~^(E~pkC+4{ z*m)72-wTF(*f4uoo3G*0?fq(KEXEfNM1%UT@fFwyOyv()EhiI*-^<#ze`n5$VI2!f zdrR64ZjE1DJJ?VgW*$6%S<2(;GEUh-OTAN_i7dv6-2n643=GdK?x))3u6y5!6*}Gq z)PP-mcV6Q})pog0T?e=2-Ex4NfY&LpShOwM)dJRNhZ3tCpF^!roJ1q^hgIu@tQ6l6 z5JZ2O4bY7eK7l@g(yAlFhqV#zc7z1Yk;6y#Ct3U6OMm8l7 z&U(z+x_CLcwONznsS^6MiMhn`IRooxkn5bVMDz{D@nu)WJ~8lqkmpQNwjc%l!X_Kp ziOo?V%R45(8mZ<|l?Aka4a*PE4??C>t>&o%FUqq)?~ximo&ZaCJ$oDsv!zsJ1V0aU z5&dmV7XSj7BdtwnUFqZ%xCXWYdc}4e@0Z&-q7BmA!gj{)D*qG(EvjR0x` zSP(#G1zN!NeEn0yT*nX3>NT-C$rr0;wF7VS7DhBkpzIq! z@m@Xk-}T#F!_yrr&f^A5zIz1D#T>;((HbZ#dr>2o=iAE!q7H~vyuAI}SRH{{eC96u z$UkTWf3b8+394*4U~Pu1R~b+~NS;!m%c(>t#PlO=lBF`b-v^k&b35JNIr1u1nd*xd zxr1-!TUos3GCct~-nhL-j~Uh6@-FedrIU^yE^g1HZ1%3EKD97;DBO=kvFnm)KQ{_G z+Tfyq&vC!_?#T;{+pA$+-cEew2P~eIsasD+Xuk1r{yM+PZJ2VQVv)GBrk!Rx z@YZU-Lmq(T9E3D$9EP}z9-42VX3~rg1(b}t;G{84tKan8uQ>5+CYY)B^{4i=(qmoxx2~$p3|5T zD6Db@0jgLV`1r)G+K{uj;X-g`KLW&#_;MJ-nbCUE&}4k%JM-tUosorWM-C72FP^ax zFzA04>x@gsdnbgf7fpwNFN5qU=z8dmZE3$QsLD0&H!Ch90x%T2{b*JnFUSMHMwo5m z)l{HDkxVA}U-(t+xMWSAqQ=dxX##S;_g^ge4-_3naR5%RG22WoHNQ@qkbHNA7N%X% z6S{2>4YXrC1u`rv?7CiIJ48!|q6oT9Sv-)8`v#bmB+v0w9eK9_Fct&?GFOhCw}4Js zKdObp+IxVBWz}-&aB8XLz{fSsTy_`G(efqQ7VOab#(;kLzzkbkB-3>%H3tB-T~X9$ zAzKt-&VY-QrF3h3`~Kf$$%Xvj@df~E99zWr@=#m&!Sur`%%oUVoBpa1yA?)V5`7G> z51)Qv0X#hc`I%gH=BLnk(o~{&(NLydq86Rju(RjHgit zun+%ix{J1 zT+LuEj8qP~MNu^2`Ke1nAE&D|sU9$E)xlCpOWK%D1|ZD7#rk3@egu>*nTaQFI21{|H#a-TT<|R1>bIa+ z5@dp(`(G5p{Z};^0QMIy@_ZZs4i`=M5Bw7hiLxt=ec?3$Jd%+ESGfGCco7G_R=8y*>5oS#UD7c0*jcZJj4n3AO#-U z(fe5PYNa;6+2XzHfG*3h8s-J$M5wRJptMPlo3;Hx^HJ+jkk$RN`O3+G7S@}727z>T zdH_-kbIGtv7 ztg?0PwlJc&_@EUYoeuIK$=hc~y++_i9R_N)D3Uu@=bVDaK}jq;Vl|tMRm>Oar*-AQ zS@&%8A-zpWm$*)f$HM$+j@Z?D)?w9v3GfEQ8*Mzzr6iei=m;2{~3|A8J zN-t0Ay`O`SjukbEp)$qyM_&A?HNa4T+^;6x{o-jM?uR+6E%H3WNBLI~Nc|o$Mjnzf z<1gvI0&1wQ;bu95;1^bP#Hwm-3W?KtbwNJM@ElxKJ~@=we3xz_V9E9W&>^AW5x0*# zHX3uZwaS-wo|@j^o&o42bp9v!_^u)i;9b1LDiDyD})}}48oBY^zB`|f+F`Bz`}_~^^WAn^xpNzSKfO`c@e{Y zgA)}YIr18FzK{31j1?$N(oZIU0d!foXTDd?mrE~|;s8=UPGj@QS-rfi<6;t-XU05b z^DSj9^TE?1dOr~E9WgZbFPsc(7jGM5H*b3R2%rkM>U_?>b)q&M_305%dCLRh$%%En zhrfF$o~luW9)uP9Vc&jEG7E*`^BU zLeH2_r&=7V9H`S9_}kBuRk4nwpr2t&+;0BPf*u1Yd&KYKZKnlx*eX8to}f7mI-$vl z!$3K#f|EA=@fBiH_aMd7D?g5|Rm$0>-xf>G(yFQ!`g*;;RSJu{TQD4(2lcg!Lo=$E zX3nY>UiIV}7FVftmm{Z5T$Ciw*f5j-s}d6O1+v?N4s7)Mg_3aLyr&EMAnT?Ata0JX z=%A2}q&lw6a1}wxL+YM|UyvMY+akZYzjL!(-V)-B?clB;#DzmBN1@`7%M7L`bV7A} zyZ_`jU67Y6^s`Kz(7+xdOS_(i%CuyI9r}h9Y2Al->EWQ&dYc*GS?r2{ju>s3y7$k6 z^K1X>e5Mr%4eDIKURSQ+GRvrHm4ng72vz3*+4m7b<#{+`ArV;z$meP5hpmI;MxzEv zXK=z(cLMfVMr{z-C4QtI8Q;Vfi_pFy=K5be!3xV+XIdjsFdt$g?K_KriK(#FJ9o{@knJtgFa7h_?s#<*0w3oyj`f@1Wg?aqs&32a{r>xg+fSZx00j_wrT^sn=0*lB^(f2o}4fEN6 z3c&f~!?MIAy}s=KBYJ(gGB5z}q6dn3on=pn4yO6%p8kD9&_rBl2$$iFZ<0hS0@6o) z)s?jx^Hh=B%;%INS#N=-yh{e|662|4o4=>Ru$8aDd8~$=Z36Er7OeT!3Ej({`oc<+ zx`P-`m57c8W?eH-mr(kT*3r~MT{Ps_hEX`cCMsS|L}hlW*r!~lC`#}G@9_v;A7{aS znascmar8`ap(2d`CtU+oTurP=d|Hj1$`{ zmok5=i;X<4ocN#G-B%#{lpl+j3qQfR*MA4``%1;Zo5Bg@Ak&AR4!#__;#ZZ-Emco~U;RgU0`A>@fMT&pPQZYuIY_G)h3D7ogj0Efdfa1p0;+Q*al7_A-l~U?*M^VE74ly``QE zMTPgjZg6P>6jw3-6M~DbhUi8uzZMB}n?>Wd;jn*}^$iNp&^e$DWv`nh{ms(s z=5mXl#F^V%w1pPFMAM_2>|f^=SU4}TU=3@;;e;$6e3m=g*{W_kKFgOZ&(sP{>h%2A zmAWS%h?YJ-l5ib9>utV(P?*=M8GhocqoC}yG*Ub#pG>9O+p)iRT#U^A$M&{?m?A`~ zdZOeto7WhUVe7(^F+hjeHM9y9u_??d^+B7ef4=~lOq?0kndS}75 zJti`*^bgyw2XPTAoc`QGdZIP9D0le{t~NNIJ`P5R&jalo^7bhPlz2cM1{|xsfW{7m z1?VblU~n~b>GRPrZF(ZQRN_@#p2K_Q=0 z!8fVjlS=Lu&3FFz$i8!55zbzy!PmNk==NITo7qjBzBaVfiWv5O8(Kz99%{J$ig^!Y z)Kn25pr!rjeFmzNCzM;e0=IsaRnz$LopY8j^-zjpTJZnH*IP$L*|u%p2!cw81t<#G z!q5^*i%56p0E*<$DKQ{$0V*xsIdsDeC8>0G3@}JHN({m<@EzlI-_QGe>s{;p)8!IR z&NzSf z)BvMk-yCoKQy|{(?$qA%2l@a)HDXK&KHPvT)<_gac*5%Z$T^saRYH4eUsvFYMKI)5 zAu-}hbYW70+$cnAvm1p2EQQMq4RyPz6s}pNzFzK^ zB#6C-8%Ahfo`w^uIH5y#UgcAn(r6bo7G@uEJ^dCaF6La1yD#*)wu>riNi;s^0Ijku z1E)Sd*PYr`Ge(=N7Ddk5rLO?3(+MUQ>A$SkfZZ+)*zFpD-A?FhW3A8fON}3L;xn4x zM#tWp!GFwEYDYD=H9bvg-{Nfs+npmgM_7Va_BCj)zN#tu(VHeFb~Av%Ljbtz;r3Yu zDNg+YqI(Q%J|`n-U|>V^Q7xVP$MGfQa!fKerqO`;?PMkhL>HoFX5^90f)-1l+wa#i>g*Z=yH}&zOMog zCmV^N7Q=s4xBnVNh^8V-t%1t!<=Pj`OpUJ2aimPKXVpdMa2iNi7p`(JrT!ej8e5l?Hlh=Zmg#8XUeUfF?0{iMOO?fgB@}Z$Nl+(ogeo@SvW@*p@RQ+K#{o+&l|F^6E6~;*SD0k`?44b?P|hNAxve_c+J$;F`v~O=`fq&q zO3JLNO(>GGP^(o|K!c57Sc4b>^KN4s(Z`gmTYE7Lpz#P++7^?Ll;>{PDRcA}8rH4$ zyLP=rQ>pFq$McuOEc*KTM0IYl0gy-&)Oko!B5WwjSoVD4$cUEHFxfrk80X(06^!DJ z(7TfY_(VeAT+OduE*={2A1QDL@iDzh0PjX=#*CNh!LT7V9;~kyJ3yeaM$zg z&3g4js@PPLb)AzYZTVLnnY+T1Vm8|07l^)()Uw_px9QW4*>!>z|H{k!D;JxXQ*{0L zb7U(KC=j=I^^GS|o_CyWuC2TFgJz1X=O|iKy`X4V)74{kb7Y4%f89&Sz(z(sSD$z8 zpPZvH8e5Uoof8LUGF&@SX<(htqj)as=!Bc~IeIj6^+5MT0gl3o<1*pHjh0Nv(rNSU z`Y`d1*UJ=>wSnE*CG44A%hF4%lD@P;Pvl5D4D{3U{JiJfSGRvnrx$9Om}KFb&X3Md zqZ=vcI1Xq|J$Gt58c)VbPhv$AH8%*5qHi$i>9ek9Y1R`^H>g?P{H^Ai!*Ts$1mX!$ zrM2)b2Qj$DGZCE-NIZ9V%>JZzG#t&r2(=S@@aKTfS*1~0;Sg$aXf@TL{mvOr6Ce=S z#F2UI5U3g*MaDfU>o+gDI13B%i!_4G8g;d~ph_!oZSvNexV|f%b_nPdFZMZz;&r<1ngF9| zYSs<2&8gA(&3%6>FDq<1k#6JE1;A^j0lT9X+U#LI*vM=&<_ z9J`Zkv!O8UQC+mIFtw5z?SjoN26aH#hwg>XhMV0Q-Ga052I*buFLR=UtF|zMC;1!& zPu?SK^PP`2S-+2~FrexRA{0x=(M5G-ilxDzm!VMb`OlGt)X7|UYYygHd*!#qFd;8@ z9&M(R!5}jB%1~#a00q-ui{WB(R{{8-qW>nvQzHlWFFE$lj9Aom!ik>97;Oj88OFQw ze*1n^sFxF846R31=jZ1i{kW-oa1`VSJ_FnYfffejj3=YHqRU1+Gp>FEBd|;R0E5M{ z$!&QTkVf`;WR@znef{wG_7{zjx;!;^ZEISZb^t}F8+<#%vzo6?VSiaO<2y3DOgnsk z)%&K*E&PFUi@ts~8$AAKUuQ2pB4cwE#x3%4QBH<UHfM`o zEnrJ1-BtH_CeEmodO3s&TF%9cycWrH{-@(R%6lm0B2wpgvO^RM#vi%8t{xxP!tA|g z_E0Jvf?djLNrC2wSqIZ^=jwIj(F}cXyRLS!1&C+gQR&x_j;b)`*{hP;@ne~mH5ZD; z7Nq?RHk~fH?hcPxA&Y7OydfyXN*8TU!$2T|IBvw!44R7q_=NvXS{SUxgyiGz%$*XW zKdp3In?~n#P4uE%oNB4dkW?(d9)Uh#CmsF_JLgGYR!nRqVNP@G*wZCVxsb60u7y{y z0G>bX!@}p@dX+5=tqJ1vU)LsE(nk@}&z218c=KWXfb_FVLg}yS#z1P?xEE9Uetb)2 zAO-x3Gb9Pi<&62DI#$!Hqt)SU7@KplT$%w^dNkU##vx>BA(*p&=58W{MKGZtSlg$? z1WrAbw~)m_{zx`W%yixA646b?SqYla;|02=m)0Mlt7YI>`*JA1V!W=waL0vPZLmC{+m9x3}(F^kr~cJ7&E4vi5`T7OD8HncGDOnQJu!su&Pli-acK zuiY77$xU9UexZ?WS>(4k`hlnRvY)21=y7%vgN$!%3$dQR>PI%2@Q;j~dR5G;4gpFc zhocNA?t6ZMMC5%(jYlF$LT)8Y`p@)DUmX|jb^2cwWUeG@wz#fA`mq)CC$WG-cVbpa zk^<-|a1wh{U9dGR^m)x}(U*3YgAEfl7|0UMR86%cP zz@`~74+4>whfx_7^x_~tnQIn97-S%TpXBlVi<%eGxvo#LI6?j?@C-MjxWcAW){NPZ zlOHq}jC+C(QG;w1aLqM+OqRa@2W#YEHK2UtYWAnpzX$RjwlxDi3DR?q+ zmN(COHEY1O8rnkhq0{@fmI6O#wren)*GHr#9JQDe+Mev*3B3faHO z3pVTw#e435%$M|8+}PvOd8Hvfslr@!h&*9u{!oBB!CNM`&BHgyN*#;4m8N%nO<#!6 zSxX0d!#qk+8Su;Fn|N~6)$u*A`wYtGcnVq@9`vq{@LGIK?DV;BM>enOefO8$O#Vj~ zP4O*ZoI1Rzi}qwW?qwlQZJezI1J7Cx=4&e8+KI(%AC!N+$U^)29$UMMsc_ANUk0m~ z4M(N$Iv@S4ce;CmF4dlFQvYRY_aJ>_D%1x|z_RXUg z_E;5>T#RpbmIS`U;K@v!`hn*#zu||Ur01gA+()K5_>}{pp|cIQMF`H@6E6o3I0g1YSpj1mZw2!_5 zk+^5wZEJewVQVZUpw)fbMU85S{?#zdd4Z7{2(vn6u+qz#2d-#g`Rmn$Du1QPUl)m-Ii?)F$P|GHo5c(ZH zlI`ARC5|d+45!mnwJ}q><2{nlr)63A+kfy^vv=jt{aEOF{m?4)p&+Tp-k}?H$g{e4 zG2DDY+9MM!WKAO>Wc0Um`?@c|$k1tt_H|Jub}I>?iBe=dZwMPlkCfsRdV1Q?qc~Ba zj`AgJWVn3r%)>cyj2A@1Y#xggj^zRA!L0wB5~-rE@A=bS7#3V274 zNQstr3XSjuwXI%C{sV=crF*btWXWl?F8T#e2IJslr*xN3Xjw8Tn+M2d^KCw z?nx$NeBY&TH0Hwd^jwqjny77-KHx15WSX!O3-|G$bxC%{%ovVbZgugz^QmTzGyY6w%0vw>kYu z?bE3zYFK3vS=vE~ZGhdlzKq`pj4y5SF&4fy$-+ZE%1y&HgkOX>x~CN_ZBGPH~fW?@AN>0^58|GoFj+0f~vcm&!z;+`D7D)eURuXMCh)8uz__x6$EI zfj!rNO7eX7e2TF1(xr?#A+|99WO;@cBqQbV!>jf@EFNk83gM#Ui*T|>R-I?2f2NEz zlpDxkrb_ibu{=+Z3qIQwI+}5UPg~6Q84xRYgktq+Xh}c#ZGT%=wA)L|XjVWKwoC_# zDvu<kr*R}K7VDHr)j9&@QQ`V}0_d6qV53b4>Y>|{mtDXAn$HdbEKiE2J&Cxc+}18O-= zsd}Xk81iOx6)r%a>7$r;CDE%^Se^7yuxoJ_RIxfS+N!dqSgQvg<$kImeu1wp&M6Sg z$Y-&!Z|#dAzSZLDXjvy3F_&esCg$`RtGIbEV}Ic(gY>Ud16rFGci}n1ndi7$Z&at> zQ@D?df45QnHDUtAnbTfm>>8kqn^aEJ|T**>-M}gquR(% z+d>&pyR?7IJG#0JaF~smNVC2~@%@>M*!hKvTyuLg8dPq+$f*3jPZGLHJY2qs^qng!YYK$htLp$&d}oUSz5CDMWW7t_LuAClCsX{k*?LN{2yDKuL0;+Vl8yM00WV+=iX+>!{Lnt7|_-cQXb<-ly%+ ztkH8?ZR3B3`^+=~XzB@tcU{d3E_=kT#%#m^{1(MB`X)ofr7yrNYy7ML*D1Z#EgSVb zoQSCQ522YCWiXdt*jGEKxv9duRH}89`(6?OZORJ#NGVF2yfi zIMkBYittVL!B(b)vKW(wMxYQJvTJB1*qzd0K637X8xz5YD`l%c;HQNrViF zwY2r9THR09bJ5dC7!S3)16IKOpKm5?TH&H0k>lO%%iTH+ljilKUU^YPhWXD z7WrfQw8RG%F6DiPOtnJ)m#U+8y#lQrXC(M^T4&PT1f%qWZXxGkK05IvCt0HMOD3m)f;| zJ-OCPl1F8Hx)+Dtjw<==liTp_3Rd4FIM^}pN|U_+{(L=L5}d_AiqZS^ut-o zu2-%Pe6aPE#_?cC5PiCaZ^lovLA3~((uv!T=}Ba8BR={7G6`PmjdzhfMEF;t%a8I3 zFg*ZWx%zDAHb+EelN;XkFyW>ux1FsmBY#=JsW?g8W;{8(NE~UcN@P_-`}u^i@mB!n z(k(MUT4*El1%e1GXL~DjO4Wk_8m7fk~ZoKKF zG1Dx)TrU}}S+iZg?KzV+hp2>MiqWa{V>wkEDei2VwkAI#&|&(SJ7=5p5BW<4ta#`l zHb*&m+oH9@D>dj7i_X_Oe7BP!K8bf!7iBJzBo?eUw1=rYu`xzCauwv|k&2(&Sg>8{ z$@DHeR)C1K^u`1VuQx zQvI~7PdrC4uGfq;O!e3wALy&m-6jXB`E_TH`t)$`o(?9TZ+}1DxAqQ5MzvQOz`3-01%+toIb>W$ZxpyMMM~S^Q}Ts! zhzs=Gz!}Z<=uHVCxdeFXnUES|ZdJcaeYd(D z*v*)34c|7AV}i%(omr^fSE^JI`7`hD?`=my>b}st%Y7H#I4m(sf?M5h!K8;NcjPp+ z{X_|kV&3>nOCz%CHbSwu9!cRT*lbBz+5a2mXCRO>!U^BK(tS4*K595#<0uIwj0hqW=I0;)Z_Q#VRV~j}d+{GA{pD zvgeTAw?PajT}NWG+h+IcnzJcXZ#wwO(uFzu<`1*in{jX{x-C;eji*i25Pg;OgC6!sU>Cu0Xbj2+KjFjRPg zr9>~SIR_VF#)*81+2SS@i$$dqCl|t?<@G-s%0oCDk?jsQWYXJh28&c3M&?7ZIuIx zO`w%rsehp(K?6m8EPrP_GK_uC{Qi=GPlKjHbJYg3$oX0Bm@B5h7Up#PDi1@N<9N-$ zSgt;~WN6taXdwSLT|6+=Y}PxxefL*?Nk!`Hz3-KTKdGhFA5Z+H{Y9fIp|fJd0^n7Z zQ73GN>k~1pq>8GZyN!LWC!(PjKYYB$Rc3iSG~aa&?|QORZyLf7GLy-~_S>`N$+@@ipaJStN(vD=|uIy~e;q_?M0AffeOEmQ5b0F>l-A{j=;A6##<}(EchVy;N|2*IXSU# zP=6tEfJv|qo2VB9boStPAvb8k;~9G zWtMYT0S(A$jIE1hyde|Pa_j-qk9-Hx@K16=i}%;b1t83j$;t<@s6&P;`eQea*vVp1 z&x(tAes=7tTu_MNBMsO1bP!P6s2C#WRxv?e@Y=N{DQ6N#%SY$cM$<`0#&2q@Zp_OF zowbP*D{D!0J`QYe?>2uWz5F$sHSQtFX!UA}nO!n8%AM@*C|bpypzqy)Z*IGBR_PX#vt=>s ztT8~cFKSo7pjS+loJMJt3aTUw-oBe)(d4fdUAXjg>^5z{8xuDR;0T$(_*ui~A_ zTem;|gPT2F``zc-cT?Xh?jdsc4tv9hO>3OAbBk0l>{i5303x4C6^&%E@>DLVno_K5 zzV(|ufX`JcCX;nBMw`XX-jqC)B`5aBCN#lB6EE1ODmv>e*pF@{07zTMTKdc^AcxJLRaW*k_^?0bg$M6ka$ zY(3{@8|zqh^zr`~e3mG7zqNLUYFUz@gmMo%yRi+ER<7<^68|fBP~j5vP{Sq&jZeZ^ z>%GLS9&3CU)=bamdn@)KFX!0%d(p<%ZP#?$C*j4Pk1a8LYnxKqe}>0?MABAhlnGkf z7Q=CWbbAv6GCP`cYE8iFYcJSTz_zz^GWn_JArQrPuB$F(X0}%U5U@8xHZ@lPkx$a1 zw_Tgyeqt-xzgS2*sIiBmO>gy<>iGa9ZU8dKGu-Ugeg9H#9?FjCMNfE(|IlBL+hr@u ztXRS7rlLZVS~?F6Zq?1?3B`g6H+JhX6W79O(!Q7k^PcY&u{HR^v8y=zf~%*ge7Id3 z&(}K+f;Sql{j;0!o)m6M(~DcYl-7bC1^+xRV;PhtDNJ+2S$UeldpD&12wm2r7=VRL z>#vO0?OXY83n9Dd<*FpDJ=shLY_`h98fR>&OSUR#Y(5tkf0E7|S;hqCXrncs^*RMdx6%c8`V`z2&WlgP)1|oT&9sFj)kxD z{dj9p^Oi28g`7Y;AnGxg-AkYT5^ONu7Dl%xZ!NQ}c)$NIKXSwITXVM2`*6UI#53~U zoL%>XofZft8R#3b8^3TvY@N}hV3X*kw>~4e#k7oLdf1%$G6ZinxORS{$DLhqYUkCJ z5+K~j$#ui2d)1XbO|5hV70|UIS$Rb_KEr;orneQlj(mnZ+BB@1x5p$mgTigFi+g!2 z?x~T@HRtL5|uajxu|2a3S^H-nE9;$1~3`FQ?89Bl3Zq{~_Uq3C#xhKw(Xus{_Tleg4Oy>a^jKy-oP4Xen|rxUf+WfNB#aMxizLZbTJq#K z{p5jAM;~O$ckRMhASV!K;Wmer3j2nsWK1LNAHPp?A9+uZ#cIh`XS{8TYQPqn>u;gM ztx+0|f1ZDGuAOMIi4&~fOR1D*DC5-rd&9;CQfJ;_0Q`51l836cq~L{Cz*hI7Ia<8( z_R(A3RD%&4x|#B6K>z-3*tY9RT1wbYMZNBuY^VRSFdk8!Yn)CsH6AJ26DeCK5Ozku zd-h}v0hF5OyV@s21NIJ37xftgi`Dtz_#G@+_rphfHLU)ptC)#n<9+*CGx+;f)9og& z2?PC?FGgQ%tTQPkO^TK`vsN$IBALsEnc6&yPOa9-&ZG0$BnD5I$7rZSIQWr=0FIG5}NycRcQVr$<}&q8rJtNJD4IN zm4Vd7d$u)zVmm)KwIVh)7EBR8HJ-0Mt+#WJ8(V#;uV_TUP+7gBXD%k{9)>>{6>!~a zZLdfwmU0FzMnp@vaw;HUT4wQf2Milno|7Cg5Fu6)T)0Q(7bS*RDpAkhV}xC4XQMle z8|8%%Z&T!Z-hO#-22iAaf1~#%^T(ZY0#mLOKD|wMfGCF7^LSY0Xzl}08A3HA;1_c1rJV%6(F0(ELHr$aC6Rt$m~0+p{>fXwRdGq zcg+B&b@y}ScKvR$ja{PproLs25W;u(wPj|ND!`%!)_&Ysw?s6U)eX5_i2iC#7r(Gx z)nJ$Q6b-Y|G^3J&WypU&sw3P$#3(qt0bd*thR7|hzAv=pp0z!DFE1}rxSKthj~fHA zSq?Zb0JZox&}sgv=pSPt(5No1tre&w3wYD8SmJG6dH6Vp$r#F8W?AYvL`R)uCMMv{ zQ8`8_0q&fd9t&VPd{>>`6dH6B50{MoN>zUFi!Q$Pfsk4CN$;bO7&A0Q?SBZNx90&<8lx?U*$Onfl4Q|LbU|>#5TykAt@FlA0!ZB|JW(Ure~A! zrvN}KQyMRt`mE2IZ;It#EM>~D{mYZ9j0R(-^87unL|3 zGvytj6cRG5V42I?3qJWKuqt+c?y2-SdZ*t{5@zy2l-&{==k|BoV&Ag5k@C9=erC66 ztqXftN&5&n1JD~~-vPk1D%$e?`=O6r$G<>o5*p->nG&Kbpbl*`STNQ;d7V#Yd^Q}{ zxTKG>AX*{BwCsm%Gk}aXfNg*i$?#$abj?#tK>$txCJ==fxaLA}*Ggy^GU2P(G)w%f(oos{3=fD)`?)6*?*9 zuuLBJ#K`N&103D8&Dfj}Cys9XGj z@x%Ouy7z}sJ4nG z7G@s%jl;8*fwWz_IClLNyO!pho1wmnzAcikX=3GoIc~0DuJO+V5`{|H`8o9;@>PoI{`Sdodu1}ZRY3S z+Eed0SH}FG)dRMz@+C}oPbN*8T5>kUPdxY%2YJy&c3a-&@{6SdD@#$z*y_JSm9~ox zmmK1|o#U!r;C1Vc>CdfGaok_v7us}V-LA_;>3CB6F8lrmL?UOYWosJw8OVA& z7Z7oV6(h=GvvgZcAe!rhn|6Boggk49GY+ypB_l~%p#}w0?T};?Y9|}&aZcum+0~jvD%+IzLA!b@m*xM0KmU~= zhKQ-%x!n$;%xnpnf_Q9o6Y{;|pI$-6a5R`uQV5-_W&I5tDk9}dHGodj-M;ms##}dU zw+WwmS9|hYxN3+|e-=7COZva|#(zEX%W@{OoqNkY_-zYPG$A9Xnu6F=pQCo^2Gd&0 z4;3|-@ksEF;qIl?A8X8itu<#JzFVysBdA8b&mSsIt3 zf#Pr=5&P?)xqK764_yB=o#S`0Am(U7SyJdm-83%s=vxOP{9ve;o@h~#MhK~t@6@w_ zs=@yn>T}&GF7#?%Oac<#`Z!lTc{j-Z#sb1*uzW54e_i|i)WH|uqxCQ|Ui*EbgU|J* z`++{})Op2Z>T0_YS6M!BGN|Vr!AmPALBB~8xI=$Qe&CYkS`f_?wCIqtiCM0{lJ&$8 zyNrFnGxtEPOgn1yp*hrZIJWAC&F^*~%GQi)nEqNum2yQL5N_=QBq0!mdNIald(vW! zo-2k99)ErY!9`12LV^-~3&dQiH6vw?UC+n)6RG5ROd7yI_wgx+1wEc z)Y?#uXd*v!B!da08YUo@Z63S-v!N_|gch(IAj2IbXdp`=L0_)lHOato1oo(Hf~}vS=cFW?Ky^7{ z+pWqSZ`%q`6rq(ruw`&##&nuU1%gL@nP#E1X5mY3))1~+yYZdT$#5K)xluliBaR`L z&SK|Tvk@F(QCa9_qIIjL_b@A9)#1|!vIz$>3!uke0quhXzPCxh%w%?C5M#)D!Q*Sg zIOvGNK#UGb$dnbpsiqFO^@kJ7ut3~iw>l#ah~N>GcwL+d@pZ>^jkon(5@=#l~gC=$`q7#6raWr zB|?nK+G8ZR*tIW;T~tRnk((>eIYT1^K=0C>TxL=}j1)N5d-+tbx@`#{yItK(!(ITf zH)#~BO(Lt4g5xH|)5%3wmta;OYy0JJ)1*c0T3vj@R`*j*aAfSWZ4lDc>tv8euquSC zazu3y4j0Bm$Z=gDA+VV&dr)b1z$^Nlpmj1IBIc?oB86yMSrm|?H^ScM#B{Iu(`UZ^ zG*?O#M6Q=#rTe;i$3eZSHPPT_LEUrf(2|EQ`)1ShnaV9~Eeo#bE1Gsfprm=@+tMby z?}vJ6Y+az2%^@54z5K|AH+2)!AbiM?dZ8q9ia}W)R?W&*YofazOI7l5bOoYQ{-IlM z7C+t_Q<{g4MdkZNFv=T!Nmw=Tq8a32;pArU0V;$Bxd!U$DVN;15oe#lYRXA zBv_&3EA2CTb+Vekt{dt)%t*zrtKHobPsWe`{?)bqCujqM6TBuXwNsCU%KGd4&L`oj z6!)OUcOGu`C-i(hAr{$rT(tkH(?*>x=D*b4Bq8bDaRW=9yIG=5YVz@V+P{X{ax(hw zK0<6XaX?&ZB|8vaZ*BBj4Q)Q73rnmk{sr&i+n$D|jcmr=kKpOvddDis=TQN9rM6PzHDq%bYDCc^d)Vh z=*vYIhm#u$3TN-5=Tve-~5lbzLF4h^&i=ZH*_wkAqOnGu;=PR4NMvFV)y3FEVr>s`!X1dk0F$>1ry4 z&w!~6+*c_5H=Ha9Q8*K_Y*nYGbU{ng(5(K;FxsuSTAh~vPs#NHl^7DuUc<>r6GG^Z zk9+ZVt$Olgh$gv0_>f};|*6NWg z_n0F_x5)3Q6Yvx_%LUySOPx)rNllVwL>0yYn2*R@vWh5=LJuDSy`S>o?1o>z6!fJd zu6VlxnvgvblciT5g(?>^WiR=d`6`(FCHcICQ5Al^Ra4ZZ9u7uaqVHWpMJjU8)T5&J z_TmXgAj)66=V!avVmmnNzQxvGVRT^?5m{XEtFaXR`s0Ruo1+yueL!4J6RvFo!5`nJ zJ=7Xs@r-xNa*)N^9JqV0AGNg1o|S6C4Z<&Zo_`o#&5y_j1&j^I+$aQ;#l%wS;tQ|H`jp@A z^wIo&47W44EW0m_=X!9{!3m~RRM+7i^l|s;ZqL2UqjkQMXEiTrzI9aJaCEE6LpazE zSqis(waR#p4V)TtodXQvgSt;Cj{dAc?~e_@J?c^`BIzFJj$!3F+A}E{*(M&OS#8uO zecI@FKv{n#vcCoTRJd~c(J@)=Ma_sir4^sa-{9$n%t-^X8i~~~!#*iE%-t>gan69+ z-~IAGZnd1MsQc``j+vO0lGnIc*PXMQuy+7_$Un8-q-)F62sYWpGb-%h7Y=<)!o4P@ z^$(7?BKQRNn$ExI^P30n znbR|3ArO@ibzMaI8i0L*rx0`nVVr2Wm`!c5Qe*AX1Hf==6P}@#S#H9odj%%*1j8wF)P35j`SH~v> z>YCL`oVVmi5COw)EcZ#`{`DDNT?{JGX(meh^W)jpMqz2cFnv9z*G~%UVX2SE{^jOZ zwa#rP_=J6%fv)eDm{VP75^x}N$0*iy8Z<_c2ifodDIQr%HY#WrGxla`_ZutwEN&j& z?{RvoyxIZQ;!cPLc$}b+mp9ZX0(M)TzhfI}MVzucd{r@BmDzFq3j#w-l7w|BzfEDp z?S$@ma{CRVuNwEb<0tQMw{OF5eSC_)8#*4Dd_EW-=UE(kn4`ixFxd8leQYRVdws7P z^ged$KVD)FxRiPCxhUZwc%9=gN0q5dJ%qy66Z|2~{i1QY7pW_;V4+Bps2S*RxNLqH4ZGo_xUNbeBZX9B^y97pf@xwKUdNd@Wr&&Yy-pQHGy9t0iAfjmmWW;V0<% zJ%k=@?%~oOAWg2p%s;hvnT)@Wnv7qvwp&}^&FWelfBV*MPu*4qXqtW#!fd=KPAl_6 z(2wLyl88V|EPI(qQ(_P-1LzJ!&x8Gqtzrr*n}PhX#v;CZ-46)I9O;P1vADs#aGW@d94<-)oe||K_U_BfSs&PP@0+WGOKLC{bSwY z85qqk)eL#b8|;g4KT6T>oI6Y@U&kIwS6byi%&&+f6Dx6}`2l|_X%kuaZ3i@>u_;t`}*>p#DB}gM!VT?b$g{o7L&Eq^}>v@#?W$RrW;duZWzI45<*kCW* z0MvMof0ExWoW6l=?&k2cg7;QK45uQis`N|KZLg(|*};>27P4}@WRKOaO={T-E|EWV z+I)nvkV0+)+x68HeL~0rErWP=f@9|&FvO%xPx~jQxB)aqcwkbyK>f|={6(J#9pYwe zp1$*D8qhJUW#wmLQID+wg-L&F$Ih84S|$g6)5^tnuuFCMmQk%^wf8#uAI<>HC7oOQ z`rXNvn(k^3WP>68X8XAs@cz9rP>KyJr6gk2tzb{`uu_3ho>vs}pJ-rmGOG7Mvso=fKLx=Ox z%Wee*jowgLecuHczVrll^Y^=2V?@TH*80tS5hj)zdchZ`UF6D@r}bysFs}^-OV!rC8r& z!D{a+=AaO2ApW|~=)QDa2n57-j9N(-yD)nF5=Wb-!Jos3D9tiSg#1;Xg*u^$x7P#4~7|91P!9t+fc*CAMsm=R3omGmbqg8E9)90L!^ z)ET=$TvA&#bhKu!Y>X=IRcu9STyF2_S z6wWZd$BCYnzpP?3PbU7rd+s*O*}Q@37S8(XmRLU@iII3ZA!!pckXa+&9ZAL?nmc^fxEuHr%l$H; zVC|-301ebeePpTI9^;%{*M#Ik-c$v@ym*^}T&*L2VzZJDI3w=)Dqh)&ZglJtb5xaC zzDDZBI~PMsn$0IQA6pV_6Na#E;CNYkDnHOR`_+E=T8#VwquWG``ia~_dWBgU5ic&O z<*+wm%uq;|K&-UI)qszChUxchh?mLN{2+~0$82k#_GgEh*H8QdkZe`1HS{O zSn&3Or4siIfY&LUt?Np3wLC}d4{s3pjNY26Xxko4MxtO;}Uzpju8q%Z^JpxL$N zp+<|eD!Xav?Lw?Bt_1W8yk`H>*@jvJep zz~%S4p>19SOJyZ!UpU^MJ4&(9h93#>yKF@FCJswz7k!qzxi);=8If0NS0?Bty0NiQ zg+=k78?d+(c4})EMKT}xDz1OgJo)#7=rrk`>PZj|bd>Q1a+;6C*jS11UoGEvp)RIf zWNsBSdCoB>VER*K;tJ~|5TUonTyY0!<0ssbffBw2zo?4hWm&ZP$@7ObIYw40ub8CCnjF%`GaW;JW^7vZO+VAp(g0VEhqRkhne#^#k!#4%*T z@R4MCT+3&t+f465c!MXJW>DQ{{c+i)GXtm{{ zH4-7ooKX^?r3Y}ry^}-2+PB1GQV!;Agq93g{Z1AB`Tn4c=Q*I_ zj`JG!gE^hq(X3mVi>s^IcvxCpouCk*T`P9BD0W&S{EA=PSh`Xx`)k)%%AKVflS2sw zX#BoikOI=_YI3x0aAeI&7dxRI)eB{nF=df=2iGXL#2#e6^MFeStPcoBDP!|@F&kQK5=r0fn8D1qr(A&LJxzulC^*On9ma*YLlp>;#gbJ0-j zxWBFQ&pb*VWf~pPX1DaCogMec- z2wD?8uXe%q0+f;@gv?oq;ht{_I4${C9DY{zYAqocaI!w<4xEEkHs1Xr;hKBn1$u__ zon^_~9I3WGDe261Rc(tDPm6kXYIyd1YoW+m+n@i!QNNH8ifs)9fTq`v=!dgF3`tB( z3~hJ^9-mPn99RFYG}*N05pUT#)oua|2PWEvVED-6Q(y7kyy#AR5OaK#+!H)}FM=UP z!v5KWrnHqiI2d6ZKP<&Ne2H21G+`TZLqhE$rjYdvwuNDzGPoS^o2z zR=1|<1VT)D6Vt1b*FPf^Q+eCmdh}4%2`NYU6xNIFia-nCPp*lKj9{OdG&%ReS>alZ z#;1dKL{Yi_O%JJzyy&8$X9e3V$|xVgod3_tY4qH~b320unsDhhE5ej?0v@TlcieG# zO*?~ogWu)Jw$si%+^$ydlvX{zZ6-w7n+JIpG`O)iRiZf51!+P!n+8yl4Q%gz|B<4-~Nv8tO3@j=Q7{L z0||R`&q$R3&3dOzCIWC9{~zGC4aKqYtG|5hqx!!?xM;K6M$T=ob%!Z+2od#hM*R&G zGL74fxE*XS&%mFAiZT(!md~PzUo=K(3Y*k6V)?$7==jUlSH{$7wh<``#!fenPt&c^bp0y)~x4?>AU7*I(fascP!(s zg_rE0K)A1&8~bJzN~e4IkqK+?APww202QzSD}=QWrS&HUVj(q1OG-HzI1eNp*7ybF zJV}|lR_<>;HjM_7kBNail;t6UW@&0LvZ@0d#q2<8&39OxwThgDmJ~fv#Tk6JntN z8{>?^^P(4twGVD^G!>Rh(D2GXsEH~C^#?@f$H>k&eyTT*8qHYp)oqmH5Eag9%$}@f zd8pZT_+oS@s-i7v0sD>h6;OwMkFAlLtP6|IkJB{m)Ku70^`i#{8cWukZru|1f4oTv z9q(oSG8W&Ia#rNLl4#F^6Z~U?pAvM5i3YkR)m<@I)G-o!GKEA{v-*#&XG4DoLVs?M zYSX$CINdh?a=MF4LNY1jRkfMB%q{!~vrla|Onfja@OAQa>@-=*-vxDq$q@OUvr`N$W6eQOXbUM?i>IK$x zM<1+wtC{B}BdZW43Yp_C2`Zg9pg4>1EZY0zC(!-EInq*?n4GYHG+*t$;hO?reGAZI!>1p+Oqhl9B4S*FiA5mRPo7stK_vLwXo?aGzoTFhKU|#xN_0bG_z@h| zibD~6ngK-_5NqU)iwRZET4nu$B@7U)VIaurrX_kbp@PrG!E=lz))1zwC(mY@WFT%8 z?3qF?KctW$n^wH(Wg_6sH1Bw+IDw^tP+NmlYfdns898y5wq4u7c;@}!jtv5oJgAfI zvJ_NV%Urcl<+j`rn=(n#+1?awy{SVzvP0c_{M*p|GXHm-VvgWr%-ZwoZ_CQ4UZ2_a z?=QKZ`6`_3Rw@vkw@;UC&)!19%||CsWmS{37(lBS>ZJH#hI9U+2EXOH(o`Tv^^dP8 zFZtF~{Rtb+s;5PL#h^`774NC289*!m7oVSxmwGf&_4wc2IQH_^Eq-F5EcK$66l+r8 zR+33ZnfuQk>jl|32L#vk8he?DxRaWaYil_Kgc$nNA2#ZjuHMajP#CPG1J#^_%;G<> zejcqsh^qZ0H+qZN(($DuO>t%=zs>R?Q=hM6?wY)=bj3v7EIwO*;d2!*@)v>Z+wGmk zFp05(G9e|K*Yfs8dk)EhB}&?f$s6R69UwOOMZ>6V23xKVp?KEN-#W-`f|K#Ptk2)@ z^HszFdu4cqRr#X#vyIotMxNy!qMdW@l%&JT5gg5$DkI{R^m8XATgS943Pohej4AQg1=-F2GoPod-Oa3o~FxaPg*op}XnV72}K z@%ElkO?BP(D5AgvQWR-|fF0=~g3?t$6r`6(Z_=BzM5NgO6$F$fz4zV{NTe!7dWSSX z=_NraK?s4n{0XE5oz*6Z=Hpnn77B{Y4#W22X`#lmsiRAS`Jl(0vKkuaYY zC~V9~9#6edReWmdEXsgs^#KUSoIVSt-|ixsPPj~}%-E$X1=s2>)-tmnTuy+j(8l$g z6?wfZyP)i_W{+6jCg`jwSLL3sCtX@*zaqaY>YQgz=g&Fi-BD1^UA`TXK-W$L%5BO6 z@!D#cacr10w&jN4qEaTbDfuQ=|D-Dchcz*;+qj~75lk!7_x?05?AU$iNZ;cM9^YoK zcIZt+2V^2!Wj%560q|!#mjgZS8jeW>U>~7~mcE3#CSFV1&a(alBco^Eg*?O`8=Yrl zdgPjrt4^7h;jBVRuRt5FJo_+x=8MX;AQvn}MKtrj1>u4^Lr~P$pVlllNIYq5!ofVj zV@xg69EI5A2LCEZAWhGdSCtCl=gn*Xh<2;%bY8_hCd=AaC zn8@O)%vA6zp#VJ6x@Gc>w`O>e$0;$HMtWR&FVq)K)c?cU!{=ID#`SGgV0u0AKH}P) zQXB2Q^wDwJhI}E9RJ-6vqFZ{#sN1#~Ag36Y4RU*e=+6qu8Qd)Q!8t9JKFaw|oU(x_ z{ay%=C9WQ0g~FSW0ID4S8HC|)nV85rrSRV9WS15nx;MUTDei`Axy`d#w2w0E71h=M zH+3>l_ZJhS)8%OKDU06$9n-XBCG$mY^IHHP*B@~Ut>I|s3wo;d zI-EtVMF(k@$Un6tEMm{U~c zeZIMggk^O|=wcAocXM_I)%m``3G_--=ixJ+awdb;2}n`#uhAE!?`kS+;xX@Z!h|f> z4bHg9+|aw=qUrICs!89qF>IqTP`X1`(k2E_jxc;xTE%0BqQ{~RATerS7;5Zz|10D^ zuD!J&*hgCnL^DYStgBJ^=V~gHTtY1|wzpcwKo`ntb+j60Nl+wW8D`|V5c4t~F#YSv zU0x(o%gSA#OzL3!n!h${+VST4?KMbsk}4D6wfpP;KeXzE#8cN-9C{W0Myaj@OY{#b z6T0>7Aj&XAQwM?^ne9AWHCe3hP@@x~^YQDP$m(m8a#^f6UTBOxjT*yV@O5>E+K;tB zfmBS7p%kR2h8~I&R07yW%IA8Oh3iz8|50=&Q9eL8qG6_2dd(g>xT!;4b4!Qk$Pk@c zjNBTFLQ07+vncAgA=kJ^!t&oJ@Mv>oqg9t=j4@KE2{a%pb07ADAcjvy+_7;2q^AG6 zeGtZ2O0ndmQKJ?4>UyN+(3~5RAPgCL4*2B6-L#QR20gmz6{VQq(YL$CZ#jMq69$wo z(37*IYd!tx9=$wQe{txU(oV&V#w=kw02Fg$Xm~Zc1|q(=(z~pNA(&$?(>D#*6KdQ8 z-ZWF(bkgi$AY=K~#aB6Nj+A}WTCjwJV`>%}z;&w@Gx%SgSva-8AnE>g&*U3Sl2F%S z{u8b)zJ`nGj{$*$|Ke`hj7@XM;2zg{>Sj}&!Zk?HCK$nk6eI5Hus9Jyk>zTT+mEL4 z1#_=%aN^&9gwNq!tB&m@5b1TuN>4mH0i`zxbBPl*Qd(j%lSI;XxB<=B#t+_DpiS96 zUL=ptc@;^k+?MdP-{Q)lwGt~);gXU!DKs;*k}Nb8uJg4yr|@1JR-bcw)uR0RYGU!Y zEnuO`C&=gbkbJr-t9=R@+Km!xhN?8ht8&|`nbLB;Ts$YBwaQVLlEPbBQQWVHu@W}w z@%etqGkAj*TQ27+=|!y0RIKhG2GxI+|LHRGO5<+A?5?cUtC?qaG7D9DXMGt$LVi8R zixMZKa(*NMFa?h%*G0b(#WhTBBh@+2vph=k+1Lsb-;HVM$4xfPK3Nq+ zYTV5qkW40v(7JFj&G@&ABU7ve%d6!4Pp4uz>Wg0%ocD6p`l!0v#;Fi>`n7x^M zb-gmg<*B`Y?npV(qiEr~O;~M^D2a9)P!@e`jKF#x<>H}O!fTU0&0+&;cJu`Zm5^p1 z{A@-ISl44CwuO_x)rT3dx@%6lDF7J{pjb1ocmFbi!Q|*wu3NV}iS> z6JbI#X2!dCk5g5rDMU^hgT{MoK?q62y|olexhGJ-;fktxVCX+HWiz_kF8eh>-Eji7 zQ*Y~5#A~UQ258Qx#G`uu2`n!`%I@+D=d}(vGyAg}x0RftCUGY%w$7jyyHwEGb|$U~ zHPt7ea32+;zZp~NaIH+529yH z8$mdi}s59)Xzty63qDWZAzN^xvxZ(FmAbuetW?|-V8ROeV`58;iyYkO^8FiiL5 zS^s2%$eCg=bJ3^j1Nsx-HY21+r0<$s)BVcvK&A^tuYUtZMP?J%6L3}0zIq` z?bZ8dmF6Ek;oc9cvgAjVa5gblc&ToN{jE%?nUH5A?&O%S1?b@|H;?zF%*AVY^u~}Z zHR%}x0WP{5$6HZ-L z1mQHue6s${-c`dGC1t@z|G$rpQ+7xrOyVrhlyH8cJetW!3X-+IgIdCb@N(1IlW_Z= zn|5I!fk|sTd{V^m$AfQ6bO!GeYVI)}CXTii0RB5`>N7lFC0z}i5U89`BV#?WX`kiO z1@1^7NIZtLc3@f0drpY+`s|(=ByHKZ`Gb5k^<*a0y*Bf#^KFhICTl&Zlku+kWqPy< zjn@+XSEm1?mfSpFS6|f`l6xP>!Qu`LQiFd~u9dy_d0^%6z2+EASl+p=v0^{YOl!c- zDCxQWy{yey9P08%D=AUaFh0?zBA$~S6b_{>9`R)SWK#(&7?+=00r^ssB(1M*mSzUb z->Fhc<_f54-VY1c4Ho3}YIF|EtK)-z04%L`ptY}e6wV9)M!#|;C4$=B$%Gp;x$1`> z(2vdM2KD4$;r_fC1NNr|m)WaRQd0VI({thQi4BI>NFSEf6Rz!? zq)pJD_l;1xe#ML!HTCHcX2rzi-N@a1=2qvAq4W2X?A9)FLMguGr24>He~1Y@XF<`M zI4QxBkeFw4cpA8QgF6fS8_zTrhX;NGSYdiAtB=XRU4H#zSreQmtnlal!bL-N@6D|9 zck8(9=qEW=Hh_rP;Ijz-#`8%RqaKaz$tK?%X?m=<1jfdDJ|h9Do%G^gdn= z3;!2H9uI!~N>Moa#c+&SDbOWVZ7r`$9`S@QJ zrB_^^1_j=6WTyAw4ok2Jw2>s-k#aZ8Uqu5dY)8o{2sxqzA^d#kPbF2f&EOZym~x7$S>(Y4id^@h~7)H4eC#!0U{j$bk+ z;w!^*H6ubQc7|htCK{q;#B=Guwm$uL>H?`H#=VAnA}M5&ng4%mC>4sSnL14G|H3Y( z#g|@|Kh?&@F#iG-KWjLfBVuGr`&-tJZUVb3;VTd)|k$zGC8=Gg;m7>=l zb2~txzOyCZ;CGjFOeYawB$|{+Q})Rkt=;aJy2g2OTg-wc+Gb4r(jpV@2LMvI(Kr&F z0dez6hByW46xZ#S{A8_yZs)D%gVyh->V^3FoZdvwXmj(6gs#Ew6CQSXK#lR9)F;K9 zOUZDAco9NUK)HWWMjfzLp97h!9iV7$o#Y?o%*?#`4^T-;R5hZ1hr00~LG-m)nvqL{ zcoFFB9>XY0my{vZIzO*K_tsCYJzsAIWE)2{I_97rq69*R2q_^c#|qLuevlg1!w?dTa;Z#d6@zokt{%gYWibU$C^Eh4*fMT3^meLlL*i=9kRVNJ1e*t%+roU!me@tmXEwEBvt zZrNHjKnVZUpujAgl|m?Ai=1!#`dUMPTGDxO4AijBhyrk^DEA&sr!y5D>T+ELGP8vc zdDB;P(%jeM8`SIle)DhN6j6`o+TRK$-jshAKVy8>XrZKD!GRB7)2!f9YWB0)YrnUg z(QQQ&gB*yLJm)%lcO2!%cW%^qJ_Q(By=(UkS3rAsHt2e&Y69HZ+l3ft4<+~aGY*>K z^8bola6KyCT!;+=V9xvYW2-sY>4~6iboo)9hoyNtmsd2|r@Ka5iF8oV0P4eKy$&TJ zfklzVQ~ce}PWbL$ilJt4T4}&Fy-TRSlYcK(blH7b)AWPnqp0$*_dOS$w=kI&`&nnH zs&hi7YdRlnHxf;MVHWtFT%LYwezM z&A;a1G86U_A^xb)g2uT~cT=?NgO^NUc47$<^s@MHDyo0sQ`a}+$4^DJPWcTN7}3F0 z9$M?@N&Zf8p1N4!E>(Kf{bWjxY^l_$q_TE76S@!iR=a}L{I$8O#i235s&F>O=f;PH zVx`SM&h-@d3~WwCW8pNNhn+}d1Di)ozPm51X98K%-I-C>^0ux(+_o3=+jf@g?%&Yr zVdyd*&`&G|(4=g#rz>XAV&tQuBS`qu90!y8stL$|;lz&u+s~l_O(Q51#t&}J8RB`I zf_Sf8vnu)(2MrTUQ1FAU?;IKbX^q(?ku0;{8*TfC8RTD^H&L_97HViOXpj4O)dg|P zScG%xA#&Fxkdqjk)A}J?XuJiJv1)Q*_b>~I-Yuyf6=;k>3_O|Xv)%CK#O893VTC-c z9nkj$vjL#*V@&DFzW6F4OCs58rhYnlrhGv6qt&YPvWtzOwq;0HX*wxsQa%Wx<6ykU zGZqg_{6%wtI6sx7K>@|_!zz%hFvAkMKIz+B6kKwpu-Ef1=pqX@BNQA^*k-c+E-jr; z`;S17H1m{{>ZzRk<94NhG?`E$8qrd(!KCE2I1f%ng8dGG!FnX@+=ut)VwnC0I#8-iXU zt;Nufd->^=C zVhSqe8`v&eFdN+-L0L5qGSC(Mh3q# zo++ZJTebpk0c0E~d`*e?3d27pbV3bgO}-^|dxdfE0bFza%U5z0IdX+kb{fDLA&?7M zrZQhm6v2I(0+n=Io6&F>ESoLo`FtCH$H?C_jRD85R3HG1AH_kHtACtrBrR#aR=a`?u=8H_6 zk_`@~=IthpOtb6=_tjzJ&AKa=5AQ?942e6Gla?jUDx=EN=(D|h0}pgsL)IPjLo}r zzVS!QGF2-e!vYFdK2jeSVp;ef3Qh$CsP<)82-YqT54jL!ghyr?20!AgAQIhvKa9{{ z@gf^cNb~(2%+R%>kxKP|7x!omP1bH8c=NRa^#qHnl0i}kr2OcJq!)k#iCpI@IF-DZ zSp7c$Q>tT`P~$41&yCAMD*AmJg*RXN!SKXtg~^mJ&|qRBy(Uot;fH#aR4V4_UAY3~ zyvSLyKadfepZzjS>?qzEeXBV}V6x%;LS9d-wogLgV#-^Y$?)>(tL}!S?Xr`c@i&Kl zZ|@h4J9RGec(jT0QNgBw-}3~|R9(y_JDoR2AGMnh><@($Q0H=LI-euleR@;i4du=c zr$$I`1no-|DqaqcDyytLaMtJUw+hYvo}?0Fn_X!!Vr_kBG7Ji7x~p~uV@(apC0FJ{ zck3$@4GfEY9&|%p-eSHueh@TqF|(xh-KwzO=k>1d+@;GLRkH~457KcCRM_+aY3 z!$-@rdK!0}PAo;c@AH0E$ZD1r!JTal)JXi@MDKL!v-b&ZlCi!lF=R4aeWx$1oX3lugzoH7=pFB~e6Be8I( zKpfB-S-P;Yw9KKpbb)tJqwDreK9+wuhZvOi=yluLjWfie`d`hR0o}{zr;a@b|48K) z%Gtb;x3ljxpM7T|)Y@8b9P;xY==JHR0ySRV0ypI8uj$axkXnL|0!OCQP3;s7tGs9P z?8rY)pCM>C_0=3H!z%DZiKG20*BK=jpNHKk<1&WQ#*ON=E5c&>-MJeBhX;ozDl3DB zm0f1)VlWUwEy;4@?uPot!wu~X{SD&{xl}!dI~#vUQRjMm{7wOtAd;xR*6K!*Hy%6o zu^ZR^v{;NR>W!a6y+1bh!qHF8(<-_Av2q9Twi}!>S-8~T0H=(48xq#T5};Fk?5W23 z^Mcs;7hC>| zn%m9V&Dp&fk9K|W`+>Bg1{0o5WMAiF|?4T-!FQqC_jC-q}^Un+%BW+SUR4a zn~JY^%%eNd5SZ@aGCsSS%&Ao5fJ;)jIb5Om+{ck6e2!cS#jqVcUh3Lk`Or=|0PiTZuh+~>J12EwpO@xs0; z`=tbj3A<}19`3c34Vw~A9WaxX4kel@iq)|-}BkL zstfTmUCx3tx3oX$ofG~g{*y~vVxX);?@MjzX!Fw}$F;Zqdk?QZAN>)XD%2-lkJZUc zFn#Sl#CdW#J1_6Dug4R$+~GbMnkG|uC0D@EJ{$T6DwE@uQBnZ!y>!f*#^P4~St0~PXEF@y2c*^{D#GIe9< zz=aj{$$FjL6{+WC8M#ZYe3(Rdqsl#g8%23P*RjDMG&kKTrl&23-(;~vr+UjeY&`rN z5bZ$EM6~zsxxANe4ye*c+Au8t_-r5j-Gc9IZ<6Go#qpukm_bQI&jaV(N_5k(B$kC= z81=KdoYaj18nE4oJ?lOYs6XMMbz<N1>ykBwmte&aR>CrC)b(aqRTg$MfnKT@k;g09mMCk zZPQcJD^9$<(ACY(XFZ3udmQA{uR>2IXc{kIUuuU2O}LwPw-$WOd8sXl46XGC{r8>O zM@>NEa&|$!6uQKYHi}ii!?K4cAC#tp1trYPJTwNxs$acKL4ELk&t)}@@q{%`+YC0$ z!8>$5OIKM2%bL;0!^0B@t-E?~zQxOZqpIdExJo+R_TYycH{AL%bOj#U z3Z_}Oa}HPUA?h11xp)!R>ojKE;M}qZ^i`M@JCtF?-E7%!a&T&v$C&Lt8%P9@nk8cXyZcHKSoMQDB0^CR9wORqyozez9wjwHW73RTyc!fPucUgirNnDPTF&>7BM!Ots2D)pV6IHNiViK zTs8qsDWwUlzqBgMeucG%k;Wa)5PTy`#oHxYD1ePb#T0LIv~Q4pO}+wu%GtjTG{T*LYPPn_s3w~lx~T@hc`BiO6@r}w@^XBgX^yvhZLyMR() zI`iF(}cGdriDqRg7$KQH(Nx1@#qJ zpm6pfK_qwcRS~<^$0n1BRbGcsl+s=^GJ@@ZvK%SMHY6?#GcmBVaAtV)ekz-IFn0|W zl(HdF7$06Hq7nMo#a$P}iYS9EU64f1eKRL+QY@w1mLDbGzhDq6J!R5Sij+mjDlE{7iNqRKkb)tCzh>obbwto(fPUz&`k6jo)mIwppd z)zoz_Lc$5L?@p&01LWC)ZR$^*nwwflv@t{HQ#qVOlh-$onKbF7$$v7zeyS1&y;3L% z$F)@Ui7_rjdHF-w=A2FjuG#gxVY-^|tFr@wM3P!k0xGUoROQBZg!3!}Hh&UCipuFE z=_=va^ah3SvIF~c{Gn!(7t56Ot&W$=$)0DFmxpI|BoJ5E;kQ~Yy2pvW59$?2kLW9V z|3@&*FRk>cR&^&AU-{QWZ03MkPYNDpKI28ns>_#hbi)O_HT${l9*x~!e3R*7=;7@* zop)ZN<9gcGDgRXCwbsa(&o)Ux&N-YcxfZ{jP5>^MG&t0$5dRCs5Aubw*2m7SR;uD% zPVUbY#);Ki4L>xw;cG4=5%>NiWo%}Fm?y%^*m$OlHr04lrw$@rM& zp!z&Dbb9i~$oD)EB(Lt$s(r!rz*C#ipqm<{0iO~9cdG6q*l7ZTxoLRs_}shpAwGOS zcWFJp$5jb!eh3H<7Cx54Q(kH_+#ETcIt|4+tIDH)*7KddDr0iUVRz_1)~ZRYu;IC_c zZJoFsxfP0vD`jDk5+oMMdF>lH&hV_d5qeeN&&6f&Fuc2_)MjNzyj|-1afR6M zoY*cx#{CqTVPedEO1<^xV5)wZh%Z%2IJoq%JJ( z5_CG-nDm{^=nv7p^)UzyT7F{*BvCMVcECUsyi2q}Eyjiog_Bx-2}>bxd)-3shkxD( z=l2f{>&&!E6vid6O{0tswhG=l#pxk>`N2<27%eNV7l2GY zC<2kqH53=RXo9|_M<^~0Xr#!0BH}LL7reh5Fq(YMt*8)&%@;?7uRn$zdZ#F`4Sx>t zYsA3*0aSAVx}n|MC!2LDLQu`)R%PBo5RZq}=+W;9w9(Z*ukz1an@PBAxK|>^g4Q3^ zTK~4^aClkMFx-IU>oYJ-E~%2i|E)vCsYQ;dfzMS-DQ)~Q+x#Yv*9TQ`)n6&0kA`d? z%q6TSs@c{=ztlj^b^hM!IS_l}hsCK-Pj3JIu*jvLSjE!~k%Y_9oY^mE@c(82bll=j zi60*HP~u9LOb=sf$r?%WQe!!q7B>x?w?rd@^4-u;?BrPUo3AH%)0q0^-f zp8owr`sbkmTB(!}^9T^Dc=F-Bg}JoYW~V8NmnXjpga-L0p}^2sH7?T0PV!6M9G%s0 zR3mho<};UN9RE9_6dg6!lrx~*iE3&Rb#z0(rp$MwW`g8DJ~;ZB_df1u$2_69Z_Cf2 zZV+)GINN7!Yq|VJxBR$~?RLwru#-V_YeS5u&2P)NMgY%ZJF0nb=Z(DZi7Fug%n+bH zrtoGbbASVP)kZaeMNW-u-1vSTDqdb8j>4qy2_pwnH_2OyYW8%E_|0Rr(didp%;N#w zIja{HoHfT-{g*C8=t@>6C#WC(d5^mbJTVW%Z)AjbZPVWP3uGg)vtb;0rb3%VifriH zp83MRF|I7$oMV5vGH*4kt@3x9_*5 z(fp~ewqgnW@@((0^1v99QJE2MSuHOG2;^XEx&q#sbN$(hy_jnDQJGEd!O{id<7}yp zSH!$-ZR+Cp)(!nf=2R*2(ilR>1LB6el{<||sRN~}dcUjXjh9v=?SD(SY2}s45GT4u z>FH)wJw`<29Jd%8G_GzlL!M`ye7!O-{4y^}g!}ldTn-PnFaa5v^goa$zP| z?RbLE>WL`O&7d72S8@)7^RZaFciVF6!GZ1R5trS`#I4x8dSHh`1=xGjA{y*d2UN}Q zJBI_RJ-EgQV9J3xf0s81KFM{f!6ZP8R1BWh`haS?3A@hG(3=BQ@DONTNd3#rO4BI< z;(HpJC{e)COT(i@ol!K`J;4&CIX`onDu7ILmim|OTj1JhXj*B&u8k(P^zYZe=S>dZ zbF|bi(aa0~Jq|dsqB`{i;1yf=zrF?{Q0nVW2H3g%eb;UH_kiGizO3T%M_W`>SEeAddM+aMk zs;{iI+}1(ENF?%LvuPuEaCL3XV>m~hg!3IlBmLK?I+#HHIGh&t6PwV;N^@tr5inZ? z7uC9sizuuX<=$}H%}bOA@+Jsz>t-B-BKUIaW9roJcGF6d*s-h-c)pz7m(nyoF@XU* zgC4(scKp2;Jci5f>A;t~zWff~cr~8sGFm_t!E`&xCDvU=y=$HH)V-LMdCik|e;JL; zgAF4yP(-At@7mxPMu^AVR7;olStFTZRssIr*W}XVp<4cC`*!^`rU^G2CzhXOFEeVh zf4|!PL&Q$x#IBOCUW1AyUQL9+-N^}AdLMH;Wz-mE4V5k`oa+zsse`smR&TgYBEldG{NP1@d z?T~2YednVzpmON6D?3qUYHxk;lba&T(X);CKqMdjnTv6nC{Ps&Q@u44v?V|;Y|Gb` zU&-ss1$XT!?%CW2lgE#jlYnxcXSYhmJO&yYNS##y1ms#pZLb8X571tH!i$@7l&$M7 zrNc7PpSClS_SY)OYpYCLLjn~&_R@t}1 zYp#5&i4(p@HzRor+mF*+5879t>{27*P@CbIEx^(z?dwJI@lg18^?!l&iX;9cih=fT zI3DOLhd{;r#SMmXiF#!DWqr}qX=E@RN1n5+WdGQ>IYNx?R!W;zwz2gqkD_|L!3tYS zks)ZBtZ6O?ZJd3`yG7t3SKi$b_*Uo6#1eLDNVC!7sW_DjX z^R2$0uzou>3aBDyUtgl37?#TMYpKnA-w4@7sg`goV4yVXeEWP9$)iolWb?(NMQb40 znQV^kttXtnMO}!Um(yE|Qa|2fqtulD_G|_sk`6?E%T+`Mi~pp-sc}5uVIxS!s2n~E zm5Z$%kne?T)_5e`9AdVkp|N>Vl;AFsu-RKXsEpE>TyN_J2i>Ixhn7cZ&D-b|!t zH-;3rn{_*SB(?52wPi&Dqau^Z*@oQ6r{K1(>A&gs3iEk z&3US~_)>WH6Zxd2UuJ1BHYQR@noV2q4SA0p}R0Bi<-p7^rdR4eB0l+KFyw1&>0Mr~i&W z07^L!(W&&0O@?ahI^HYYWB1TKE-58Pcy94>*GY-{>IAgN=K$n+t>? zfAT!a%n<{N1L*)SG~!=wcuRt?Av0+)w<}0Jqwd|L`!>gE&a(;E>1&;1xm=Q^icd1B zv}y`05cY2}_>)c4L9u4I9nmgSzE5WtaQs!tMhq)94vQv)KhtA%>5#ZE- z)olG|4FLF&Gti{lB}6j@j=tG|YyfwYpUMJLn9KL=#0dozxd_PY|*HdH4T^ zqmo+%wx$lao=`?`+U;=Q>|UH3pPFjux&l5Ao%ye46j}DU0sPS&)_|Yygx2E?b*h2P z3Qk9PZ@$lrhOBu5Y!}~2xV_JJhiKuT^;bOHwA!J5mnq1^fjk*h{#VP5D4406qC+_& zqG65bf+gokeq}JE4!<}O^b9~f0g2#oB3DB9~T{KnVrwd+O zQc^=D9%d9uv!N0WrvpO){~v!lIF(ATK-FQhX9M(&j@lT&jYx>JKFF~I3QfRWjjmby ze7}-xejG*BrmsK|dvLU|EOgQe=4aqYINoF<3LU7RuwHJNZZd;*u>2lhk7Bqc$;i$1 z$3&LtsiK4Uid$|^W}4H$5a*ww9o>rwtRb5B=uA$D)G-dzD)`w|^WT#wQ$|M zdp-BmQjch59aW7M(84%UsfdA-nJ_7PZ0ox;P)}XNl^bm0&=(&^L2u$MR}3MnoIu)# zL(NA|)v_Wa5+A`5-g7w8rUi3MGaH}UzxGRC^`igI`!`HtW){woC70lS_umEkIldE5 zwz5m`mG}U3Ji1grOR6vKEwmmP9G1FJ zG{R6$&q+h}%v29ESxtP4vJzl4RloVff!J`p`ZkzJ_hjoI;g!G2W?y!{VhcNW`Rsr> zHLAINYx-HPW$?~81>V^RXc!5=H*ZKgGrs!lR?*lAo&~ZGqeOS?(-&YN4r?UA#QSx# zp=ao1DrPti!&${UDTN3H6ss3@}FktA-+y0X1 z$Le{pQq7w*)JdvyYJF^MY#aUQez_-?xY?M~pWMXTW@8^pRWQ*Rp)2`Gq_Z@@XkUM} zTC?2+9@cVTKWS`V7CWB!G$BPIGW;Z^;nrOC^PIRq2s6-?YJ6|=Qd@)t+qIa4abYl- zIxVdg#4Syet1C{6knJFhr$7VUAbr#L;U8VUR^JwifgRXqOD2!^Oq`g!ue@G@=SqYA ziG4`xmpzw<6&F0@K-sHZGqTY~*hiK`uD1&7EBG0FW6iX(lNOD1M#sITuJor!M4mpR zEMRMqKzyI@;rtt_aNzovt%2S$0v1RgJL{@Y>NfVrxnJ?04+LOnrA@0^%0c;k^V-@` zdCUBVwyZlb+m$;^0XMI0YPhvqO^-OX%uM_^p8lcVJF){Q zMl8Xj%ugb_itDu{3^lW|&O0+co`>FM7p`jLR9Bwe>y9eomn$7Bhz}dpZ4IGrB<|dD zZS*~&>|%kN-SA>~EhOmu?Q}@i&zDG-oynhtDB#g1*}i=N`gY34FTdiqu@SG1r>vLX zCvV*1^RQPHQ?k-2!b;9eX$w(Y?`9Ft`<7lJq1jB()&gb@3nvs?tDNsQImyD&(tKtF zwtD^v%*Snf2}eQrIJ;BSx!Cw~mvJgg1LMJ^V!Sn%3e^b>0S;ic8K{^GlGvyog+8k- zP7v_?q6ly-AbFW~tY>ef8p~G!&Iex&p0JSKAxIEAzRGGsLw5w=GkXQU)r~JxcQ`O zK%`n%z{sU{DSqG6V(M=OrTY_YMsAEU#!axm)7S|ZhmP6T$_$~{31kS-7vxkW6A*eBh`F;pE|X9-ZXc1GSZt^HTpPIia!s3 zWy3HPhdf1DT4RA?dr@UqCKd{p_(hZqh1!^8IKDI>-+I|f*8-m?66tQH{!u)+$kg_I z(C({u!?DJk5n`)WhSJ}=A56@>I^(0lr<2pms{qX9$8AeR_|0#G4}g{fxrR;o39lDl zF{fD(vugX;UOr1ZZ$5ZwiFE%I9P&`6c9uqI-CcW1*W?yPa^fZip7>^Cvv@;* zR4`Y93?3-@2V2N(f?nc+pr3U9JZnsiAiX7>-;K@~ExkOXSDFZ3n<(ddYEtG70`$;= zMDe5TKIoBFK!9U-Y1@e5SeO=zEyqueh(2Xdmli**@ccQbm$KKdRBTFRU!H&c!J?#Q z<&9;VNpRqZs|B55?OIt0An6|Oz>Tbk=&$S+{_q*gcfBU`$8&4q(*rb`0WyV%&RjLW zcx=uxP|;zx8SM=FGHqiHq(4%A4KKrs#P>HE$r>~M{JBPk5Pzl5L|kzHXm$mvV#BS9 z&oVjJ_*Xw0QS@mNCc61MCee&}zjy>6jERo+bv;((RG2AOI)6uwvOW4AsYL9Z(Rc=FH-6}pEfg?gI!urxmXYJupYsUXnacQz#>JG7 zLiNeHCwa&h#~Saq#8*DEOKqyE$BTsP3ID=_My-1ZImrvQ=8E;-qB9L$wF)&n0HySX zazX{y0(bhiQuE31f`%rmQO`k7SHw6LOO34{^CR}b%!lbRC=UUp+Haon0rb+-HWq;bF!fP8BA+30mWt>5%5FS$*)bUyQ}v-#a@& z{hrCcsdlX?Lfot5tgv+23v{ZCyD{(?E-hq!uNmG!)u{&#zfyJ=q3}srY_hr@uH?eF zo2GY_OD~Uq;Ka8}>f{k33A9=2n|t?hD2(u1U$3Fg@;R$h>)mN`zU$^Q`-#-(BCyXS zzpE&6d?a6s%o55`L)~{btLqLDuJJqva`l901!C2BDP;HTDSz%0cbH&QDR?|~cg{UIVX;v(DhEZXna{msS2m8nENee@4An1 zA}+f|KY(Iuj#467MOMZWpCT9(s_F#L=Qe5_q;p7>g#$KG%ux#7Fx=z4E_w2>=*}Te zj)}Z#z7taWNhi@DDvtHZBIJ#S4_I+UA~ot~F3Hx4*ctYIHQ^VoV?uCbVCYKO~qx@%kZO~`b5IQilxZV3h5$;+(}yw%6AYQ+3nj(#_9 zLP1_2c;zi4^n1irv*GJKoPpHjQ&iwxh?swX!Q-3?lU0N9;GQi&>^CtWx0F`aHK>0+ zcSs#y19$)_@?rOx!t2td2Nk8)xMWj!DL~esn(ZlV8(io1j}ug#`TevT{M}B~YDt#A zr%cF%aQNLY`MYarszTh@LM{_b7wfg%FFr*-%nIy z3>tiYelZ{)7E4=RiDTmFj6lNQ1aAQ#&i7sOG8|iYMx%W!$9z$~W>0YH7-sRs!_(AI zGx&+)yM9=bp{A+{C(8oP`(amfCn=Bcw09q=L#9kX1A8r-TSOPlDI7?RBAG!whH{v? zo%rwg^!e!C86}YTKYv@`^xt$-_rqH)4Wpg`#RDZbpZ3uhb?9Z~{=TfdE}~=o*vzA= zPk8G!e+-N_Y7drbM(C=P`7@y?qD`lWHlpRV7e?8k)ldgT->H@P{I;H!{VCZ%|G)?~ ze|l97UOKsSO$jEZAg#2og&KrEjSkS|v7-Kxf7puMo=E6v<%;(+s$BXZ&1Vi`8rGQ_ zjpMr<0FP3{B5S1A;0vlrlr>@L1DYKkfxmmU`Lszlg>^51Dfi;BOoo35kpqs#4!#QxhdL=a($@mSqEfQn(;(tEil;K#Qi#jsr*1Sy*#LV`n`p42`kn*EK6qEK`1y2*BrVUB?Wm%r&f+> z-t6WIv^5ND=}IGRr?2=8iu%oDUMfhMY6SjmQ_exQ+HXBf4uERL>aPGP!*bFVB6U3> zg;gsb88q4N-g~DjDP};pI#j`fOI$4C<=@n*+(J6I6i5s1rj1+rthNDz^ihp|!lis}=djup7^t+A`2niLB3RoZE6WoN1OS&&drpLvLCt zN4(Fx32s!ZVMuLr2L|^pBs4p^v*z<-_8N0#xi~$iw>o|c&|Vj5k58f+2~O7Aa&@S| zIRu~C4YwE7s(5A2`$ilr=T?{9ay&C5v|}(wu>D6UG=He_jZ!~cgnZ5oJ=3B`f8jR9 zDiK_|u+sGnzs#4)Cz)CP?yh}$_=xjXE#bQzh+D8->)qcg@Mj`(&CC%!x(knIdum&t z2m6ZCMSu;tTK%a1=og#+iiGj;C(^DLrWORY*?J47Vg}L(T_YC;(5e5$3mHKv`sg(( zs3$Zho4VNpC>gY#;2P}L94qAEZE_Zqf}@TLfX1mVJWCYSO>nc`4p{a**7*qrgZ^m? z)uLa%k+;!_E4hfGL?x5Lz6xEZgmM|(7ZFWJ?x|>*i(Hm|W~-Ijgo>mIxJI?~;O4;* zyLc9@(m2n(Zwx(q^+6|Go<7m$oPi{-ZVfHbMqSbMaIPn*mCT@j*cD5pLX4jv(q%`1 zt-f5#g*HeoUN;IC>1|$?c8)1rFWxCnmf>OkcY$$e^Wm(WbII~Q>m~&s5-JoKM0|rK zS|9&J1(V`dFB>}Mf4oPY{x0oqAk00YH}lG~8)mh;`( z(?>oYXY8e-I3Uq27NbvAEk~?Bl6D(u_MEdkGpmhylwr;Z;&!qPw*NUscJI>Azl*5S z*_G%dTZd8dl6?X&i6N^!zrhZWq7%RxrLG`vFfkKKqRYNV{&s8ufUzVJ@_Xte_r+_-@@p#D9 zWzN4dV>8<4ZLGpk%VMz^d023*EOUag9M;*`KwV-^r^U?1i5(Qbj`kt_67WpB&6%!%f)EMIQV!PVlsn=}LoXEWa?fwOu2%d< zk5eIKT=Euq)1dM6Doya{8&f(<$C+o(Q2^W|{@({7Hy_3N?|_;{p1$m0w&3MIv~m-9Czgd8gy> zz&?Fgb(oeWR@Ex#x4P)HYg0|bnsH~ zAIGBx4}x+jUn^bLcT=%tmz107e+-j@hnqHzR;G{kRItmvstY-r`f^e|bg@lUK;Y?< zB`HSN3*i=GX)n|Nrt|oJQGyrlQ!}$Pa`Q$14{z@o)?~Vc|DuQriq0ra1hF9q0wP5P zDHcFMdXvzl_YP752qGg@q)Bhmdr1O>fS?rVosbX^kxl|q5+DTrPte(WU)MS3I_J}w z4>R*YA?1DFXRUkP_iyDyRh5+qHr+CAd{7Pd0y^j~Lc8r@2#`cGlXx`zeX(p@$f**6 zQ43Pjka@tycNXMYqcRc2>WRJx<8-8;PkV1RZtgp}u4=B5ln79n?~?((4PA+$oguO( z*w`Z#m|YGg5b$r(NKYnR}d ztGOtZlhOxWJ)YCRMtC=RAqCphu%nE zsM_uQG*WYY1;@!r48^CxE3<}1M_c{EIY^!*9jL5q^)dz2-Yl)iSm55>RI|vaGZInm zH<0!^7BNu2hjnSNik34;TJ|9`*Ois)NC(7T72oe^mgKE^7MXNim#6Jn)37r??}@yk z78XBwgE%8}$F<;ENgA`JwOc%C^z8<-*9$Wh;{QgVmY!w_6hxsni>{^^or8y*53_$; zT&sLjXg&B$Vgd7e);mu3AW`@Y@_-@*=%A|>}$!D zgmsawf=9V!+J7UMPP^Tm$n&GqX0CdzHr?{#&bcd9jbij9%A)hsw6%JcKpMopy+@!r zT7VZ(N2nG4(EiRK(`-cE%ihPx&`qwPt}RG-6Tg}+x! z8rTb};+?I^forQ$#(udXp*Jp`g*jq@sh&YXOI@jU$UN<)UBt=APg$399~hWuDn8P| zCxls}b$@EPX!72_2j8JO(-<0C8W|^ z6mnw87r(!%Pg}IrJ7}XW>F=1t3H&meN?#VQ^JdhNs!#%^tAM9R71DehLQ$yVAq10q zXkE$C>E<7QzOBtGCl!wZ&?^zQ>Oba)+R{k@wpzni(;=R%%)00ro1v9S-&I(70A+b} zc-Y)3-8&CDb8)HyM6fN>>ku%zv0Vo#(5S&}hHf-De*3`f*+S2=J#U)=T>s^}#rA~^ z1Hjo1Eca1zk3kaEB~c1d*>mFdZtJVsQr+X({XC0C&l4f_69?{vi6a^dp0ecc<;(Q- z+3k5kd;WP7GW+%VOvAhhgSiRseb=A9y^9)PuM#|>5}_rJD}YueCrlQf)) zso`{>$EvYbCxRMN75E*ktnx?dw!+T1M`$`rB_q3CEZ5}gSOsZlc9y9-jCh0@6n}y_ zFwA3lbUaziZsi+KMhy@#yMRtRozHmyMCchIW^@Ob?U=)0uzep@pHxDIq*vKgl+oiZ z<-53_h;rGd5C0CFENuD2ay#^S6y~f-hK0-nvjk3=@?lXw8>I)c!3hJ|{c-{>oBSTn z?n&Kq@m9}@uge`4Sjx^NYyDDJx&*5l$aSEF~=;o=#jtwn$pzP6evxGf(P6t62rOq9WzXViJ+ zKzFhPJbRq%9A>+aD`Tr-*c7a!y}nY*5+=4$Z0afeOFz6u*+IWNYi!VN2?jfh`GdnB zFRkgrc%e?9SW)>|9C@4KS_y2NHQ@d+p&2vsEj0|FZ29m0B9vM&^&0>czHzHpNeJ~* zfBc`8G(Z|2r_T7|e&TLc47iDk)#Zt=Dp%l&ium*!UI`0$-X@$Lewi;kVBr;D3x}G^ zKl91WIgimrz_3ueWZ*Q`cd*iL31b+1{SJ~Bq5IH+k5E?N@wuHfZu~y5;5+Mj;=*US zbv;@4Tt&bSD+51F!OT&>Z7N<{A4{Q`V=z_t;Cd!xc*$q+jP~Ng#F49QhB^ui_8=2d zq}ZaPV_+R~)nnt<+SI_efqsIp!__MriP?eT3D1p-v?qI`J~>Sn;M;%Pw8KB&87~5w z@s+vJx-E&P*4={maCmv39{J7(3{Kkm_HK?*ud@otae)eyM5;;^*8Y#p>kK(ng_wU1G$2>xZAX_AkF zUbwW^{h%1EOld+jbnREbzIb`7cOeHpt(Mh05eD!>hGSlu{u7yG9R;q0)k;Madoe?Tzelhd_Y=*CVsg-< z4+eRZA%EKd*c2uJ75x}T9v}~rhseX^5%MTm_dX5VrI0H;0htr~Gb`hsSQ`<1O)#I| zKbV!qQ1 zt0q@}Y2wRN`zp!OB7Kg#U){+mXO(NBdxW+~JcgjPG?qBGm>|V|@eyK6X``{IcF|+g z$Hx%Wc(8@VM^Bwa1Yr8WAFdXvJ1k))7AK=86DKnWJl#j+Lm!2mpNk(?=IN{O?M*W? zmb9(nyicm7CkN}cJNd!;LXOoDtS)DILg!)=ilMaF0% zM0+&E5LF#2(iJUby9?&Xo!IJ?^o{v(XhxD9B2D6pPOV3Vo`wT8OTv}PRJr~%i<{xp zt#o>WA7zh*=J-U5hL43q26+D&s6Dszwqoo-Xhli+we=JI*6z54UXQ> zguwBB-+tc#-$CCY-(lYo-%(%P3kA1Wv=kQB>$q;ex}moyvNwj~)l z+IWx_6PHy;wV#l~f%)I!^c2IfLC5b4xW`|HWe;TLE)}V92yU7_*Q@<}L+-JELdw#I z_sX{z$z4@XeV(6|ax~WZ!1mz6%s^l;4{~)4I^PEiz9E0d?s%SAa{^E>E9!cTu#=|6 zc9QmPN-f~)35qe9yGc4oWt4S4?ToDVZ4-=~(p-qrt?v2)H-`)-s6_4xyIC^c(eg(K zTFzUq{XCMK=$v|?;Yb)0@I}eJ{sv@3=$eM1AwHjFN;l|8Otp89Nu~uDvK8H8f8+jA z^rwDXfreX4kgFuQpKpqJ3D}jsA{w%VUmlfu$j^a-J4r1NTM-=YBpWVRImQZ)oD81q zI&eMA?8PJm)lt2(x6AxU$SD|@NPaPPvbV1RiS$w8JQkUH1gfSyCAg{KpP|L`MT z>^Pie#kdHwQdt|ofRpk6)zqEOS~@l3;&|k?=b~hpWBe%~^VNmw?6_3;zq0hX>_x|Y z*UzthwbQ-#iZ!!#5(4}E zAsNg9TFJ9ZVPaR`dtrj!xc#qF4*oZP-Yh3n4s-EQk$ z_@m8S;6>Xgx{o(yh;@O}M!EcJ1;tS_h0+tOUjjx$Gfx}oBzK}rtTsV15H#lAkFy@f z=o_K?mz>PZA2d~tv=BZR`yIJ_K%Gv|TrRi1kpK+aU<@yL$L=-~2{ctffG(=z@3N!dfW?JCrY)u*L@$c$m?#jpr)O`Jl94@~VE` z7LoWPV}w1XqZ%#($Q>;D%3Wz!yocgbI-Q`=o<=_xB4S#dfNeAR$RTG2<-?0!Lrx{MH-2m9pOW{2l-H)LtCU_?1aDrO$W-t&gRD zRj=v2M~M|{^z%p5^&}>CMyj1y$bi(KbcRd=NF6#@HPx=P=08f6(jQeLg1$(U$vsJG zTcz62eae#D`9*(4cNOtM!O!oEKZY=gm~85NIQy#~+0*D(U~ptyb6an&QG~r~S?R1} zr2>w0a$Nn-sUGxmK(l|=yo~BjCF5db{Dj;b7Tn)rlUAzYiWR$yqtG``b>e|xoY;I* zouB=Qt0 z?)AIYB;S5q#*zg71W;mT0&IT?(2nFf+`iX)`qCdk^64>2T;ZM3XVr@mvSYuBQ)x>7UcWDB!GxTEvls@RQf-!GFFLoi;0-zpX6=u5TfG z8$^$?3-$-gJEpuZ9JBXxTt29VoHG0793>`^?tWbZ%p=C%ZFC+EVq-)UOPt?)88%3C zrTeu$>PenWz5ymAI(92hA)*Eg(GMTDg2w9i6|Y%UXwQwixuRyJJ5cR@v_y~@7o1+0 zYg!B({0-|B0%`0p+8eCcxDOS|{PcP-eZ{L}$5)+Ti6lEFR%bbZ6HiYb0(yj*Z>WRy zvlp8BgKz}*p6|&Z4h!{WGJBYPS1bc-+lQEwG0@Mk&v#a*Tb{KNztMI%?4;h&Ux?x| z8;5v32Xpjd;B5#;fzU9QQcl)1oy3tSk$tLU! zEe_XbRU!>Jdkk0CvA0~X8CvJ6G)O+Vz|%cq*n8{L_%KM3@$s)OD~2;r{Nw5rBav8b zdnWiNA?8|M*+I|qj>!6z=gF{o)&VwIhhK3p&%BZ{F-MpHJ$5v?22VKR;AohFoES;3 z@g&{Do4vqx+23WmVO_hbzp6(TF1=;1OxOylS~$fl7{PsQTtaP14psm>S$Z(Zzc_#n z5Fm^gmKLoZK9gi%Z$ZAzc8L*;AW*34q5WD|kAHP#&t!SHUa+Jk6V>PxMawC9JQ$Sk zzs1=6P2F*g*{oLW^nHA+2p$K9OC;T8XctT5Z027UpH%FF6~o~3M!hHQNZ5^L--k2p zEeO|_DTN5K58YsQMTj&{9w_uu&}dpiVhQ!|@}+b^7^9&Vt3Q3v6$j(Z zk1?5en+#Eve;`*WJ>Vev{;ri6uYiCg`8Mwxg&uxyr#+80lavHrFs(1t-Y%}{IFtHU zWsX%Mra3mup%E!n_W;pO!i;~Y*iv?xVz(NZ6Zb8bouEZSl_&-(Vk2ApZiX> zS;Z{7Ykxzt+5sdoWE#8E%I~6SS4H)}NL)92SjwhG)j7C=J9BJ93BgKeJd5L64ZdiY z=R|-D5%qArTEZz{W+8I6tR_4`hwSp!2s7#ky31@4>3OTM zk1o+6clQ_B#9+5@_>K2PS0&vc?|RbI%r&z?hHmtxJ!9mPfV^ARar?Y%Qv-7eQEwbd zqOtlgJkita0dBTh%#@QL{I^%X#*5P1Jg-zA$2jP@re1jPTkMUq4@yIV9FX*#oa?AT zkXV)REgrb!Up_8gulNqqRp1-P_xH?>x$bOkXI#C0;Yh!MZp;J9X9jW?aKDsK?KXwx=I;Z?7LtNKr3^73>?Zb0RDg{ij`sW%i zE+-H_!OZLZ#A{E8)staPja~WJRPp;0fT!+K%qLC|`4 zn+`I-A-1#(zlnf;p5f!YCM>92*3}><;~B;0$>6S~XYimD-K+P)21tAx2r%JoekH0_ zao(+~bI9t@)RXTdw*9MusqFOK?~8)ly?Mdu?un`%zlJRaQDK5x5Xi80bq6H}te$bQ zkqHu1&!&;fiV+mkj}J<##eRh6hi|{1OU3(tu5nl$kN!Pzv$)r+BFmh#@`#Ja?YVxu&%}+K-Aj8mdgGb(vy9}7&*rJa!c!FTtVsl?_ zHEmJ&-bbT@Uy3Nn^qLn+w`TR%c(pFz&7R(H8dol7eIqrvu@&6DtdXVc)W@alBNd`# zo27Z_rh9uP19|yc5&p8*1D_^oN2`7J;P_3i+phm}TTqXqMRPARX!pJv*0fk0j^Xlh zhZx$m==O>_zG=BMBC>hvmD*HC>-nFVL3#a(O>N5>SEAYoYIL?Q^?>A@ipIo*!~}zKMI~rJD~*lN<_AT^)wH{Rp*LE~tqExAode zp@n-n&U$7iZ9XqtAiUUoM>k7MYSs4a|MUabp5?Xt(z93UBE6^lk$(@*6X4Z;MM$Nu z$5$h~TJ1fQk!O99F|nh=G3gKkL%1J$Mo{caywQ*`NuLeZsZSbHlY5pZVL0Z&^`lk^ z##C^NUe7}GXK-pO2#CFZ_P6nCzMFg#sL1Ba)T;+=l8;QDdvln+56B;%bZd`g@iG|r z+|g|RiUN&pJIZM_JfbK-CwAGlPLjC5=04iOKt?yXrWjR{N{o+5<^Wm(s4(tZhz6&n zyI(D-v=+@=ATtWaqqz;jNp=Bln~vMx(iNZFvM@1w6QTFm1|M*fy5 zC~7;igojaC5io0`ewHVK$22Eua$guV!t z83lyoL~UkPOlr|TK2M(8QuqexraX7^4H1lMPbh zL*pr3P2U#PzYUg0M?63Ik!Yui+D3fb3#-9G&-}Zyg_kr7Zg-%Lz>e~{^Sc)catvjM zhzp4HxL7p^J*rp`uG&KILnd`12k0<3ud zID#~L3#s8d)-F(XMlYWj-zF zzbdyYC&NiR7CmkZpfZ;t-7ALDfS?>Wg&8-s^J-g(*2k{k-`2uBKIOA|h0;&WYPQqO zax`M|B~LEg%gk+Boql@Kh`I)nO9iw)0VFf<1WmF+1Wg%z+sk?Ya& zPOw~s$e&h0bNveXg5BXSw5%A4ZPZPB7w2FD+}4aP*agA6!yXuFsE_^j->P~k#)C(~ zgW^qy(wwBAE*#S_i!x6HnT#z>F1NFVo;N7M<_B@l@>|H!`P-LO=nreG1)skv?)9>= zrcW#~*>u@HnpqwJRg7 zbzKjvR5|jz;>{_BlA414Xy2TNBUV~W;}c8&^kh`b-)S!$g8D>oT~ol7+`++v=nhjL zAm#D)Xxddo32t&4bbAekSkt994^58K?EJoyy>mO#n)k<2BK@B;oHj=Bw;%Wy4_qBS zO>U}Qeh%ev5QWeQ_5byS>VYySoA}r?jbiE;` z=%IIQ|0SRN*8O(S0O9I;H#s{xkw^)=lObr#w4$_Nfhe1|g_4ujHE_1+UtrK2u=2k@ zK-);mq&;sgRIANfR;EG3C)qJl_{pW?h>26Hob9jwi-;D$O3xbb5&B z%K%QnDX3>CS1dzt&K=G1!qbcE|2D;>&1=qb>RBjb)@nO{O}mVP)*DDN>^Lw*cRYCM zHwaYGy?Fj;yNn_jY1ynXb$fuLBmL+*)`BmOjYYw@X zk+=@`r8nIHhS$%StwR(HMHQk?TqoJsGk9z8=R0B=loVJk7KP+ij5wNm@Z zBc1mrwnWlUcah1nAmV_J1~VOHhkTS4)^rO`&o%c1M?SS28PVce0WWI=E( zxu|`77P#p|y3PBF@mbwPf`wm5#Skh6>^)-#Z2e*>8-47#(FMm<+bFD#t~z8YuENJl zGU>TqIC9v)I9U)Ks!Z5@dQ8Q3R`a`fT+iBLt=iiO5$6A_L~{|4OdiIcLe5|H>~6Rt z>8Vr5DN%~fo~|7DkS`Teg|L&v*9kZfk&LBqxU?lFfh})l?PKP4zh!S{sywksUWtH+qNUI?uoXuIl4C)S+`xTJtAn#jPZ8gJX5zt zs6TpTDyR*wdOfbOY`%RWR(o;CgHF_eAmx5z2s?I9_L)~`TYmrd5+6fYBYhoyX$RA2 zG-epVi&vdM?E_O9&^rsEtF37|KPH2XnuHGDmi)3TrzF$5dwuS818Wd8g4+7tpe6p_UTo!gNJNjdGx&{!Q}c=#OKUe znUMU1JNtJwq6J}_#J!m8ghwu7!{e?L8HROiayHASnap;p11uYt5;G$jdCRx9G)7LoG-M^Pw~i8V@vVO%ml>4kIa0CHccHY69NW`{BmK( zi(cT6M!p25@S4%yPcniF+eM$fMO#w;r~OnEZ|=nb;gTy!{l^%rj^SJRq*LXA5ze~Y zN%iamkcn;aE$H5<-}1{9YsoC#OrGN^AbZGvVGM;fOZnX z;t{R6o#Ryc$P^zlRcta=L)i=o;0)?_VMxGx(Q+8{DeIP+q01g4A_ zSLYLZ)>}UNQ(7}A~vQ#cKKof{*&7^l9Wf{JFPryKJt>wS+(~$m5nVDZ|lZ9Sap7!v9*|P zaZl_Ia=$xll4;3kol00wB8-kNiK7W;XfQ^dD7CAFzv>4cs&d$){O26a#({01v)~17? zk2R-aw}4cKq)i{l7FhNzNZ!q8ie4N?xa$kJ1WE4u1z-p$S6u+Q5%9Ozy<|vQo*3My zyLR)WJInKb&~i$}_*A)gI7-YWpJE;y|LGzF@!kKl&v(&_Dot;lY@)DT`k0kMMhD_# znTq}tlNV3(T<|4Ejgm6P9K&xHY?}9rQbLY<=)BK~-vAu0&p;fj^v?DCS)u{BgmKz- z+*FYOs2Zd+nXxm;Y`+jG5}L%%82Kr_wKPLvuGEMzme;6(Upl5yLHWTvaw|e-3u~%b zbo4A-B))l5he{LGF(y__zh(3M2y<|MsrX#P#uAMlcN^g_mO^8m7#%ODq2`2Y#wFKi zwXf&9pT;lZzT>0M&k;Q2JaSK3&J8x`J@YDm+pedkXD(8F>o?OG!V=Le7OU-S{`e zSB~P;x|vZNO<&WdK}0G$5I11T#83hJD7)&e+1s<;6O@_UpwgL$M;ueLL!23%VULK@ zdfc9b7DZsuER45#pYHhIQn=HaPEu;|`itOqj?sz z=0#nT<+Q`uygfkgA1f`Tw>=M5~IS#P4tPN^K>67&h|1^-t0*7@A7}fF}vu?u$FK z0pCVXi~2;>s}$NL67{Pw3%Yy%=&KuOnY1R4x8ZbZbBs|V4p){&i^blbHc)22PnA>T z?|}Pa>I&oceMiH5ioaV*>EwuwKKl=NA@_9SnC+2|j$8AMyV8HryGBv8h0jKb+2#}k zD(bfsl)4=A~#7J{(^WBkK9^1dCh0Z?>O<^>Z~A~CNuv!&5VgMB4F<5$raq<%a3Z*qCY zmp1bK1t~X~mjRk!!rvOSzsd3Rp6NxFY9s95V*8ABEShx{DfETU@C= zXK2}yRutv3G9lkaFS2E5yr4}j{2+$*bBEI*J#{HpfoiV!oZ>R zlg}TOSkN}{5pVnUtWm|~>f;>&b!;mU7C_mt3cN}UlM_q5&tGLZ>mNjr6V);yHDT?A z>}|VBnw?8rXSW0Y$LoEuWhUmaUev!T#N&KYKcyhM>6un14ONSb3)qa%7hn|{6^kF)h#Tv$99h0d2?L>fdLUl&>OL-BEdEdK*&M~EOu23?Q)3TXa|W>t5F)WFLBmctCr}* zGV@M#%{G93NTi z(g4KFdcQNAzoolgz~gN0yh=xbV+IUOy~Onm)J$ZyAE!}m&f}mM`X$n8;>4F|Oet(V zY$x;9m&L=f@D4s) zI{Y!{Hn0D_Gwv(lzEQwgS$bdEnV%zaT- zv-Xwcb)E5@&t}E?U$ADcA7qm`Hoa-gdY)}`m4J(j(sP~@bje$hF38Q8QewLU{t&qO z+=Ar)cp}llc=JLW3-c~8#kaf9gA1kO88scWkJbUCsT6G{=1pwXCuFaA;>|M>?ygjJ z<{;Inr7Uzdf0aYQ7ILmJq!+p>I*yf;qzKj1dLS7V)O&sjN}3uK;{2AL^ApV2-7jYp z-Y9XYPlrs|=F;xnz2w#&?_AqoW*|Nwji|+3_2b#iogsmEA(~`dRQ=?tMa+>XDF?!@ ze`$+4St3L#Q~`X?uxbHQW2k!y%3w&iz*#}mDEJX|>?Y}I`7X`Jqz?K@{++TbqP@tl ztYN>R6nDwDyp;+I#o`=7?#l&#w2_b2DscN50n$2!BKGTSfdZ#__wHZ!{oXXxKhl7B?48`W#rm^8TL=-f53;36KDSZeT876M&EE{ zn8p`h2ayl|>#yS^ag2~(-M7wSe-v_i?xkwz15U3Se|X8Olh|(Nv|n)!)?wIXF+6c4 z&r=_T!olI!JrTV(Ia*Ywmi#^9ifbp`*H5QF zO2trTgWJ6+NxV90AN|Ib8HwF(;!1h-Rkl|O6hyyj5aX}$V8)`-Q;ps|q&kCXWP9zF zo@1yQ&n3V7@y_aPy4t%wVaNX({i!E$MDR=!Rm<1E>bbdDz$waYJJi(zQt?0e9qQzn zb9aFssOARMhYc^v`?9aa>ZX+6`eCuX)~7I|-VbCicSjnyW2&mplvOx!%8c-7%YME` zMV~hLnunKS0QyvJ97@{a9NN}qKfV3WBB)}n#QPI#-{sCM`)ZCQ)Xd+7Vfv;Vt8^!X zznzen4k|gJ?-c1ZKH#QEWvo{5;;?Tc4)tm8hgsbLs7VtTHowffT*f4 zNaaM-U2!a4eyOuu=42NJ8sHd>a1J`*A}w3lL6C%v&l4THWlkkv2EaaHLLYyARfQ6p zKCxqnLVf8xJ|3nj@Jcjih{J1TdtpUGatjQqzW;n#?A#t%SpaxllM~}M(Wo)-pmnTP zCe$+V@pkx}E|&$o3#GinFxH@i^T$7~i%ECp@;~|I>K`r5kz7Mu4y_}7d*}xY%1>sb zJKj9a;tH(03bCGTHRbn0fXJr(2V`l2fCT|=>8_3t^a$W{-MVkc_e$OQ6T#${`K|^o zA2Tt?uC$Zz6e*#hgH5kt@j~W`O!FzT-&VOWzCmC2-r{!7d7`%Z0TpuQPkTbNLG=Cm)maGWnCE-l?Lnm9@n~>vo0?R7dWf z6VmSH9rR#o1;U{2L3QPbQR!lZN2E)WQTz9-nsfFp?VrEo$>FJXM-jfTJ9ffazn^oG z4A-g5#RF3G7Ch^U_`;E(6J4m(139Ba$llEw-}@9rfo6J`AdJ`V+t)k(kwyP7M7r}+ zB4mthkv<>zpgyM{H8^!YN#u!ybeSuFxcKsrxTw{2wu6;Da4)3^=h)=a)EX-Jm;zal z%*)L0f({h}PdYV}X#TR2tI4(znX18FRm9;iFoaI8;dImkK^P%N2Lu8)OGdsN?N4%D z&FeaG|FM+O!gitB{P`1cSTEI7+w&Jvp-+C7PEKO&8X(Qaj^}X_$F#luSng~MF}xav zTKr_JDPCN4AAqJa$R_b=zSi;D)+U!|kc+;qWUl2EqV5u9YvD4I%_HB6Z&(>|Y#34T zxy8|UgTF<*E*qdrna8jECsyiDV+G|2|3dJ+4>@rMaS^EOGXA#Tf8fE$eUPnM%tKgz ziVcz0xW>VD3-lf*ouoO zF8V2$Hi3M(W*X&hlkt-;1e_#GUsA6bgoFv|$`VB{jrL92*Brb;HAgq+j7na+;B%}- z4(i3+&6}yNt1>dIZ8%0kQ>Mx_If^TrHaX9FUgKo6xrk}WSRL9nKxX7D6SzEfhT%0T zuipniz$AD$trS76{dyTnt9OgM87Tm!c$dluTF0RiXwSZ%vRUEd{ENzS)v}AO6 zCQ}v>#3)cSQSc~s)%{Mnh))OvB08z&VbejSg`b_+9k`z>ZW__sOS{4kCRfC%;*0os zJ9f(VIol)o7Zxk-_J|kg#18SdfOe3Nyz+xDrKLnS=QonhELp{q+V09LBTF$D$8rZd zgczgnvh(tfvh^(E(h>e=O=0|t-)4)FWn8=t781RHsm7QXZa^pUo4DeMjyNaj^B>~M zh>D3h-d+hEyef(nnslt%BHYVv?#s!_I$QNXr}lA-$8}Br@1z|t09|~{hwl#Nx4#p7 zZT0-&4bBFod^-*$p69Bl)cO@qbO-;HKO-zxl%bQTLI^>mIGr#=@@#li@*T}Uas<#Otd@e;T+m-z8i&Q*N=GeeHgmDeZBu$^` zyEUr#{I1}o5KJJ}Nc&U&nG(J#n|L|#>gs3(bH zts3xRZbu~M1H6>mRMH?MhNbpTuqQ1`)a{b1uIgT3 zV6E?Z#P2zllZ>goXFls#=suQT8#Wk0wfLN>%k3x+ujjG7sP!>$BCj0P_QM-6JyA8K zUyOhhb_hRlf4(5znCNRz7AmDkzv&-TiDXif15i&yc1P4lqnBO3sh<8T98t<-uESc0 zhUVIH0e$!%^ouV*zx;-8j)EcJouQ*@0tdr(&&-Ba&ODunA2_4*2mVqSG~u{28qCfl z!NgZlfUT4pk@M`2E8x6y^W`5BXCwDH*HeFfL(X$E3-H_pN4MqbNc)OvqziVE1EI_a z6ob^YhpLJC8jk9`*TdAPxE#%YaXFhMnXt&B-TL9Y8o`D2oBp>h!!Ego2c^<6o2Fiu@PDI8KV06p|t^;yAX9KIUhGjZo!#=5RuDgNheNl9)04VF-QdA*Lj zghH$p8i4*wuN!=CCtYp%rh53DgBsjB?0yIM5BO)D>Cc<~|C>Sy?1ufYF(W%VI=cOH zG=bBHpTuW>=3|@`fsqkly}e+C1}h?Cyjh5di%ty#0fIDv6e^z^{KXNl0n^IR(2xi? ziDc}Ufm>t~4(k1@mGux)37|MrRBq+Ly%l3dM#fPz`ePj(4H`_Y!QXwq!6Im|Kzlhv z#tY|>NM*kz`L3(}Wxn{I*C0E25AZ5iT22YoP!nEBVgQup^t+(or$)UTFg4%2`i|0= zH2f}mjh5~=c41(4BzE^YvPl!;KqynK3reHYm-4r65Gc+l?# zqY(O*?Y<=h-D13q+t|U#;O9*ieqj=h%bbCqKdn|uuGtj7?MfoKQ?|y)9?kg4gk}OO z&A*XeU4YG65GpPz+Ov?ISvwXiaDrAi{3u%p7a&DeLpM^UYQPfigOAiG7L}#vJ)F*T z?&jw@fRM#x z6IAI(rGTQ0c-T7h`ebI~H04oBA0eDKt<~SJgM1nO*QFXE234jf&x{|&FF+UlVPDnt z7QB7@Wmh+fip$oqkSg!H3A=@`ueJ;v^LXsG22+m}? zW&bzbWdt?tw`O?RoAVMglhz(>{WMD(`ln4auo}bl}(Sr=+EES{#EbV!>nsyI-e2HNF^*HkFL+bPs~*ZO=%qRCL2u9*|e6_cfXnt*$L} zZY~vxHIa;}bjiThP*Qp+(deSEu>MiNC9N9&9uy`7?kj9)sE!$}4N6Zu|WK`&^ z^tQ=d3^~0qR-$ZHVTyDMv`9;1JFYX_cYthyzo->@RoyuZ0}M!4T~{TmN? zeoOR{f8Fuj92SXct3INcz0H8^3M7A(@qPL4zZC&6s=dax9PjLp9qFGA(O< zkD9ilN4sA%?@s^_YLeJv*3%`a4s^r_k>0gaw{>_w)7P8Q8OFOC;wr1?Rp)zB5DH`M zglbirOgE@;5Lwi1xJbKr5BfTt_Wp7myJkswbJ~1w8rDfEI~{u}p}7|_LV?m%uWrFq z*&7;#B;Zscpuemw{xNC3(Ed1fR@tJ+p^&5ANeMfe*}*RPoIGBgDpmkpL%*JkPS~H+ zl(i^5vWM(r%3H?Bpyt27s%wJyAKol9IBTCxz`!BLZtpLc8$JAH9o?5jQE$~`{^zxI zhSs!NNIs84epS`rA@g)}Qzc$RJ5_X}hZRt5yD=!b(m1W1CDk%_J6b~1fj>wpR;~sy zpR6}qY<$f(%Z^lx9>`wRyZlj3u{401U|5y;_4Pb{SW|TiK`V6vYy%L@d(qdN7A$8L z?h%ld?&GMc6cD|tL?Y!@DDGnNl?3a)PEDmm`~AEo{YK~euTm$d9m#Dtelyjrw^Arz zr)$5q$b*)?QwuvNERIg-+@OLEWr&xcn*;uaeS&#jliu@$_OqM*HJhaLC+#DT&)okS z-JCaLz1Bcw2vXrSWWX+U0I0+@|FmcC509Az`RdQSYy%Nm4EKDF->p}@60S1G6|nb9 zitk;{Lvjwo8$RaUSx9^Y!Sr33T^iA&HH^728;zBw!>U^d7u@p550sBDGXa$xVjpsK zQ5tqbV^*o0tLE5XE0lPyP7zYGS{QECi0Y@sX z$T$z9Lz+qI)WvFejoY^nVltuk@HInz#buL|W7L?b6$G1cccU-LLEkngXe+l#u+ z+OIb2oA*=Q2cP+;5w)+V_HSk0Z6*(vPfJZD^6~Dr>fz39LdF~JQf$kr8g}MVy!s|` zmFS)~FE5PkLbX+7jf2W`tkOIZnpRYfMC@aG@+5VE%h$WnddW;)U2c8t?8#jEr~$yp^OYlO?J0+y+lP6AsN& zDbxpJAH$izn4H%gBNhr*B3c5|nfi~3m~VLosIpgcTersa%=qRw?0u2h3(m;%E5I&1 z!#u{qb=R}5eB{f2^azcT_G*V?mgiDX zVLzl)S8KF6n9E>Be6hi=9Ex_36*u-bg6*{HZdId&8Lt2Ti&kVYFO{& zCqoU6n>={+{q>2x*{K7{)au{j?#5+}yS7{s*53_Jr?>SCeE)`+a1CE&DH5*NN^i~< zM%5Tu;J9E#gO^w9`#nJBSbA4 zf=VgOghSzihW!5c2}aAfPIxx0i8WJp(WywwM)m^OKaH`)y5+>aheXldet`7c)A~*u z|4UXyhT<-B&9rgAcdEgABlE=fOE(YCjL*FNS`82HMiasDAO{gO`sbvCkjBfi{^yBZ#lY_#|FylM@|iQ{2X@sVH~ zM?xv6a{BzilVEqTo4o56>{y<$(``jWCkQeVt@YXUpOwP^7B;}xNqTo6dY3dHa(U2` zS|Q6Uz=;;Sn~Q*CQhJoc_0$n@^AKEb@)yIYQ(mE07!-!rA6@cY5tanC*xuG>O;st2 zjP0*HKG25a20GTx19Gf*g7i4Wf6-eX8vshjYKB-Qtvzzn0rD)J=(RZB8tOi>45B{n zi_e)Sw-{sq1w7*fCgVGRtT*9lBM3|lyfp>o<$WcK2b3*%WFT>IF2#vx3R&Bp?Mfu8 zDKv*clo#Cq=XRa6EM;3U+t~T+N*Fv}_=D)h_=P&YDJn+x#LMxTujlCQ?e5h8xL`qR z9Awj4A7kl+9kh!}NWhFW62)ZvqaZI9>ll7M!Kx{J5`r!&(R#{Vq;4)a{Kq@&{~JU3 z|DECgxz=kHMZ$o9XlZ7qNwnNDbs1ZC&TfAD;(gTzzn)k!%408BrB=4j%Z<~rff+UU z{kO{uL80imzcYUb7X{df(UB3DuQ#V&CGA_WLqf! zO<<@M*WC%{U_*})ZE?_=bV~u)$ce+NJwhKGd-+XT1tJEv<2j?(z)1(T64KD*{I=u& z-|QCHRGR6x4xCP}mS2RAF7Ma5&0`|(PJZ;3Ullcru@o*UE1N_yN(rIm1L~W~;5qGf z6*C0vAiO$>`C0je2lIepOIi-XN+p7C7dJI^5jTc)JB03Es~W?S2X5&%FWaS{Q1X4y z1w0IfBSa4jCQeRjX2Rj4PBLJ7?6T}C3^Cre*9-EFb~^v7x{GyyzKN&sbFri_Q~C<7}M5p2BO!n!vTgl_;9 zKA6hD!gYHdoT$ZS3v4AJEdYUGXwG1}+z3mFuixE}dbqPHAV!qTyOCAmH4n zwp0aM5LYDtbVLN_3kVCwH+cnnl#}SZS2F4j-A?HLM>O(0z}Q&M?6Fv1Iz z4-7O>GT;^Cz;*|Gx-S7t0FEyu%<}C*;h*jUaG>9EB-og6yZQ!VkwPT-i&A#?367r* z&ghgvMwX@1!KLiKsFIOUU%S|pwr_cIC_tBAw`_B$hcqgnglibCR}zTY&0hBgCBFy) zkfwjj2}YufwMRejm(^Yc@46_EByO>dXreew;pCauUh^KKKAp-JNcl|!Nrr!(7=Cq4 zt3QwW)pn8AQ(@3oW4pSE`ti}e^~KR?c35ppMLoI#okNA(rFd*CsT??@fz|+Qd%V4W z_>?yhQUzGx|I^!UILU)Gr=F=&8n6dbPxkitb51AwZY3A4 zEMwVYYPC_T)Rw498`z2fDf2gca3^r{`N-`02G&72sq{Vxk-OntBr%n*a6U zN*(fbw=xZ_A}dd{uEWs7z^lTLl8cG|_>1G2Fls26tUqB1Lk9;7R6SCpd5!k)qbI92 zi>^0546+f0@MG8&CsDf#zMXh3-Z_jpPoh|^xxDUda*-sRZjU{>eIN^5E$jHVjA66;P?BjnRr_*OZciy)(vwe88KdF)K~@s< zN%jS2w+imvI0}a7NncXsqd?P}nPK%9gxSFWr!UDT-@9X_wZ=!hK^O_ge*tNNDB^M0 z6j>xz)CwSiuaS*vR{iO9w8@W%wo>~TrY_?r91nGx{Snc-Dk3|)S4 zNv6H5G=3rWN7OY9JVc%i7N#l=8NxCuVe*oG_lkN(md8=c`(r7(VUv=8p+1(3+y|S> z2LJ{!Tu8v#84LXm*!sNINqCmkF{nBqR9;DqP0GMI+`H8 zKlO5CzM0&_mVF{KzYd#B?9#=&*c5qG=ImXtu*{>~zIlWmrAYlf8%IG!nD+~sy%{P$aB8n>p`EdE8KVN&@ z-NHlgFvpHn#>q|TB=CWX`%I=84M%)H zC&eq29u0LeGLkSpr05Evg{c9b29rqFeqcTbannyAg5;uVg5t#&Oqg>;tI1$kjONpd zO*ju+YCx6U7YT+rRo^xaPW0l!A6Z6@yoCVG^5N8j(N;gg)wr@P9f1J(3+36~=4cs^ z1sD@d?)Cf|v_1lb7uGO*tDW}xzEWP?s*!Sg<^5&SY+v2cx?R#pFz%BIqWCS)sx4Z0 zs=n)D-agl|@dO^<6sOyqsF~txJqm|Pt1AgrQ}$FwMJUVvstDiRq;yrsPV?Lghm|di zm%D9Pt2qKb>uBjm9abQsC~pSIK~_bjQf1ZKsT%hLd`LiXnk#7b+>pS)N@CkBtqqz% z1Q>q6TX(3wM9|mW{WjCfZ&Y%SzNgE=ZcF9>=hWXflK>$zCrWrtrXiiT>iTLWl!MN< zZ$LbgI(Gr0xN$xQ&?KtDsc1L5^V}qLL@Uy9R1wpvg)-zpt+%=(& zJht|n(XmnEY`5ZRM2|&O0D{+Pt<+uSFKflyRuC5=L7H9YbyGj5t(qS{^(rT>eIidx z>?u7i9=x=AZ@v}kpDPqQY-_y;3FeWZbB!^W*62}cM*622(uS#-P9;r1!Uvi?wEpT;I%wuUxqu=HH6I2gRIln-AvixMj8|gU@=s zS&(Kp1iy37*UPH0>e*)5kDhKt{UK8r7T%5qALoDyEy8ZUcK=%gR!}XT>4DcyK;di_ zT570k`!lCTh4XARR><%n4m}=9Z#&7&YmC@YjxJVl9~9QG#cU<8KT#~&peFLEe!iK= zl}IFx^mZY<7y^m&hICJJ#uvtS2RiR{EUtU~Vaye{T=DIn%WXWcP(^EUvx{$AMnM@)-(hmyGd9%TL&7ri4oQ7A~%w5HBw;F4DUDaIhUG?u&l9yWSn7GRq&A zzluI#G+r-e9U!LxRffMLlb8lCJgjgk z%Fvg07#TWdx;K~UUA9=1Q!8K?{&MG4AeC@;jU9#<9Ety%iN`;;*W={goeqd8jHcRj$9US0#tXNel3noIgUz7P@KgD z+btb1@Q5BtP81_OI!UxgKhWq}m!^lhAtI)`6<(D(Vi$g$VBTAN6CAVpcy0LE`=&9X zlME=M@&@ycr)zGq^Y!EP6_DYg>4OfE(I!Mw6Hhb=ZjLIEJvi;&0P5nNCPbBlmY$qJ z_d8H(6RaKRIzm^%#9=NDO!7zcVEwpvJ--qF`TC`)x(TANVaFeniq~p=jT^}c=(pFw zgD_2wy({uo&+9f19%`W`=Bvj22yrWfCSpo@vqSsi=Vi0c^krQI6xjs|j&`cs+_^b@ zz{7&OLTo==R1pYQsp{hABe3T4Ag8M2{Xi}ynDi&w+dmg2h>o7>bfqkK=sV56*H>`@ zwXD|<{}dLL+J95wz{A8>iEgiC7PYuj_qCFyNN4t2=>s9nWR H{uloRiD*;H literal 0 HcmV?d00001 diff --git a/docs/images/powertrain_build-ECM-white.jpg b/docs/images/powertrain_build-ECM-white.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a9a2d5924151834e81adc52c1d5e3a60a2ea9d8 GIT binary patch literal 39424 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%0D7>-%yUdT$*A4n)YlVy=Pq zyj9B6-RgDOqXTV!`7qNlBhbU-DH=LVA9lV(2}0f6e2qC{Ay^jjLka|}*x8H7xvanM zE`1ViSk7l7YQa321@ID>_=WH4y=lN6Yuz0 zf?EV8Vr3HA52@mAaAjR3c?*AyEsHN!;NYY|oj7B3o?oE5Fd&_GzTtt#hAW2C&Nv_Y zgB5Xo)4DzeyEB&hBwwvZj5Y&{bq^=@T+5)XXqB2qXu!eD0D`=ub*RPo_mZuFxw;xx z@TpJudSwwCDclZP<;yF8C&Yk^Mv(1c%28Xy}|5_#-86M4D6#%%Wl!%Jni65a1m`!aUF2=|Imhj z#)}5844t*ZlS&K@dwRbuIU~|5_&RH$8D%>r=&soe>T7YvNYD3Q5ip7_?_!C!b6Qp} zOj5XYd%orVHNHPk+Afh~nF2KI$+@kLeSn5W>&Utl14$`qY@HSj7dvPDxxJJxZ1U_D zixCO$^JwBx3!^uj(^a=6`^2ZBZry8)s5G{Qk0J9)E`_?GiT+<}e1am*SPwWRf;f50 znA`(Ud~*i0nR-ML+pxhLOyct6GLuG3F<1?)SR#c&R;{!|oEo@WBO_efiQCvcv^WZs zJe5X&flg4klS_>ytJOeVNhF+n^=wT*m^z&u6y$0z3Y;AaCfn{3VW`gs5+6nyzM9+F z`eBcl(C2Tn>Fo}Sml`{A4cg2?&TR8cF*hhaRR8o-a_VDtef``uCTjv`Tefx~lM!37 zHE^}=G3e#>J6+||I~aTB&k4?Gd*8ckO>hgcUupcCqV^^{xaT;J;-`Ym*8Kr}v9{C(Kvri!9HSmY%8k%v_gDJMd-QE=+V-=NF zIXvjsR2G|+?3{Z3{THFwYzYn1C`vi1>W7xA9t5@enT4R#QR|4}YxH#^8St@^cW8JM zXt>+O8HpPAz+Vxez#LC~MjfdP`XSYjro9-2tOW7thm`6p6EYB?27`H068tQW(_TS2 z9=ui~KJTm1!j)5bTa7ZkXQ(uV*Ra@wCbs@L+IZr3R)DL^x3R{U$cQOqtaC1H4G6d}@IM z7X%3W!-N`wC9o*@<>ynpZwc~aPQ~*y9CNIGd3u`G*Qe&Gbgn=1J$?2Vqa?rhhty$I zLD^lkaBEWo@8^uZc6?Il?Fhz?$vnd^C?2o2xdKffrb})zJ=MEOS^>Cy|HPjn@8#*@~QuU`e)Pw4r`G zee7inKdh+Rw-e2tXgy}Bd&{ji%jx3QGK14XL(W_&>)UfbU%t;USUCP1SQoE|E{Ww> zW#a8~Evv}{XtV{XWWkpQW=&XPAJxXBaB%9Y#rrLmz;9v#qL+*4tF{>43th+1rFeTE z40-)H*S-qr|3<5iFs@lwVLJg@OwIAispX7fB}0c~hqOKb1?25*pAT~GPyHBC^t6iY zs_=J+rgREOtHd}@I=T$`A$9W+SfHx__Axj&@YEV5J(R>@$e`HV@J_MzwY!Jgnx#QY2iW#z~f*)jZb8^)@!`=XluUEFA)oc0m$PauBV9 zW%&9rppSUO0iZ@RNuX$zVNIv88z6c!NC~2s^llf74>Zk1^&_fm@s2{$ahM(!ezB4s z1qFo1Rz>j6Bk$+~bEfo}4%E#2aN-ZC+l2XK+K?Rb_7Jkl{D)K#$X;Xv2<;CMKd0Nf z-VRt6vr96)UOX(hP-$0cspwHWZ2K}fdFW+N)rW7mcw(AmNsIV!iv^-*pGBJ3+xF>e z=BZqD$IcxDk7qzgbhxXyI5WekB5*pAbC@`BL+NLkoumWKrs9WGiWjBHf6E7-$H>0+h0a(|MG`@*ivNEH6?p6YUXFOBV8)UE`C#wMQLXrC*7Z_s&#$7T#0;N zyjxT&LnBPZD7kh(s9uA|z-*q{c?~r{+5R~33Y)eNp}k*X=)d zQHJ7LOuipu%>W+8g^eJS()=OS_mkE6Yt&ZvI+?6tTgo>sBD&Bko$ac&n4=6M7 zV8#d8*{6mtf4~0MPXC8~G^~Nap=_~`{7#=~!Hwrqmgs<7dB1Ymx5&R6%r1kd;&m*< z9t_xDKLIK#O7aKgD-BscFxvaS)`j-(kNt=5{ijBQ*t!4cM}l1orYb-*_#gcic@1b1 z;Jx7dSX55+)e!P1z4BWlRYoi$DZrp00vFI2qO?~?ZkLgay|@AN!6@M#c=nmU#{E3O zfDmvs`J+xPdpRxW#B4KqZ*VZ?+Eqb8mJS}2Z7od2zoSCIw4eq9gyh&s2^|OB1cz~! zvRDnkkO6)C1^p$SVG>7HtU$U2 zcq(?|6alnvSq|$nG(5A1`$AD`i4|ZW4B3g~(FdynIx<}CBO)jl9uHsjSwQjNb zx`5_+1q8Et$y4J7+%y)Q+!{`4tSJRYa&N8JlMYqx{${=lemugZh%Nbuq8trnTvgIH z@>%C#q}gw(c0JGTY+p7+VHgpoNSA4H97Ik=}sftL!fA9_zaEPurwckjonCTx1*dl5$yofNDfj4k{I0*ssF+XW)l6JDNaMdhG`Po z#0|>VK{RALEG1F-*WJC!x=`?zt{8~kf?GzC%@;dDsD_#)QWjkT4e5y#@mzBu%=E0vcton`nw+PlzCNm*mhd(1!znGRs0h5IPNH zG~z(M?H4>aA@l;ywEO&*=2~pc`Q)4sE=?Zk1<^4FgXYVd+rPt@@ecQ5q&P#MITff{ z;P})#)wFfE@l0f;q_i#)1gc!<$ip(E3;oi&npqZ$T`fTW^f^@ZW+h-$1ss4+#sF^| zG(gbDUX+N51I2a5<5Ue_$NOj%L~D|40>$0_Do2oqgPGVp1L7S8V^iZGZH%gO5FM;$ z;x&jS!df^Fe9iUO0>FR(orq;Xb9VYooDXUpd2|V>=dzN9(?AbS(48F+>~bN#(6OH0 zjjR`+qr>)~H5!nFFgVu9_JRJ0?-=Qe`Y-u z9|-hko_G%F!)LuIdx*aij*wUu+t%Iu`# zP?L3lc;#=N1oRzE`|8jlZ}pq>vCA){fP7nZq z(fe;in2QyuTxJWXZ_e?V@jzaGn9}4xQWf|#6BNNPa;4nJUMZ=^t_L&RelyO{ZniKO zbjA%BCN#3(qhei=9ca!~&uOzI;Crg-ceSO5bI9-dag`r$S5@_d25b0@{rav7Ei))7 z6diXVk7@rRxd%RV6wiyBU6v=_PwykE)8yb)d_;Csv3+cGA-qX@pZ>HnbVX*>G5<$j3-ph)5{)ihn-=o<}syS5|&eigO1vZeBl8PNi|{t zdW)&HQe$1dwV;zcP>@wLc_s043mP<{j^J8S0ati&)SMUB5EwGVQVLznwSmRU?_Gh3YAoVgr z+#}RekRAQ6XDjJIw3A=AR$s6J>G_0Xojn0^RGXnXL5)lco*ojI2gFh|^FE$yeYcUJH;VX`rLT zDj;pIYHNE~(TI*e?Kvp+#8;wcK4)YUmF&A37}PN%e+m?JINartI^&CX|-=po{Pxt?`QK>8i7ce&r`V&;o8bJeGS~EHtx0)Vk?8?+&&4MKS z*BQZYyT`VGcn=CgP5T>EU=Ies%2(sYAK@zSttMzVs)fD=Ye0UBEQe4rb^Ex4I6#~a zzEh<|XhF8Vt6XF+W>hI^em%Sa{mk^lGQvvIK>*!mB7YKu=g^QnT|xj4x{Zqz;Qj#6 z5a5CEKOz1Ee3|}xhrjmvKl9_CL96@GVcq-xY8-;*qW%M6{jVU)|A~

z$P)7bs1c g==o$y(qG+Hz*6oj=;FQ#0BF|je|IgG{xS6506C6rVE_OC literal 0 HcmV?d00001 diff --git a/docs/images/powertrain_build-ECM.drawio b/docs/images/powertrain_build-ECM.drawio new file mode 100644 index 0000000..d8e3370 --- /dev/null +++ b/docs/images/powertrain_build-ECM.drawio @@ -0,0 +1 @@ +5ZlbU6MwFMc/DY8yBEovjxbr7oM67nS3uvviREgha0qYkLbUT78JhGuqrhe0M4WHkj/JIZzfyUlCDcdbZd8YTKJLGiBi2FaQGc6ZYYtjZIsfqewKZTJ2CyFkOCgkUAtz/IiUaCl1jQOUtipySgnHSVv0aRwjn7c0yBjdtqstKWk/NYEh0oS5D4mu3uCAR4U6dq1a/45wGJVPBpa6cw/9h5DRdayeZ9iOdSbP4vYKlrZU/TSCAd02JGdmOB6jlBdXq8xDRPq2dFvR7vyJu1W/GYr5/zTY/PyVPZCbpf34g18t0B92kYATZWUDyVr5I8tMX3WY70on5a+JpCHLcKbbCHM0T6Av725FWAgt4isiSkBcLmnMz+EKExkRHl0zjJgwd4XEy09TzugD8iihLDftnHvyVM2aen5IHRPS0K38ELrqOWIcZU+6BFSOFgGM6ApxthNVVIOTURmFKngHQ1Xe1qEwUFLUiIKSKVTBF1amawDiQjF4BQ97H4/oaHgMRwfGw9F47HZHND7cCXgbD9ATj8E+HsczPlz3wHgMNR4aCxQHp3KeFqWYxkKcBjCNcjigDULq15BzxOJcsS2nIlDOzcI70zbdZ/GhDPNbZV5e/5aNTFeVzjJlIy/sVOH1yIt3RoG20uiAFX4R/fPRSxOAHgANvu4evqXGEIEcb9rd2AddPeGaYtHBOr4GTjv/uk4nsRb9V82ai42uJXfSyeSjjiUOWYi4ZimPwurF3x6YIy0wF/4s4wvIek3f2uD3POs9MfW+dDHQplOgpYvxZ06nk5fTRT8sVOb5Ggwju4NhoGdtd1/aBqAvEEBf+Ffjo8/p9LDGh9NNUl89PoC+/r9aXN4J76x9nh5R5nKsyYtkAJh8IprScAONmLoQWwpvm3666RFNa730/gVpfn4Up2F7BFUjqsXpU3fQemYz/6Y0Pk4+1W7gGT77FpT94dEznHlqXxwnHTA+NDr69w6NjL4fa5BII5jIeqsslJ+LzSWhWz+CjJswjikXmxMa38k2kOBQ7vIIWoqXmhJ4j8g1TbGsIGRWvOw0oXmSnW2ES1Oj3iZWQF+7AmSqE0KZfOH05gzNkdtiLxYapu1q+O2Bjl9MjqbbVwToX1jm6yQhwq0n6bbHYXpYH1q6H4Zde9/I/JihKYr1vwDF/rf+q8WZ/QM= \ No newline at end of file diff --git a/docs/images/powertrain_build-hi-white.jpg b/docs/images/powertrain_build-hi-white.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02713e073f126785ef41fb779dfd6134a6a6f18c GIT binary patch literal 40553 zcmeFZ2~-o=zAs#eihvjq1OX-54me>P7!)C;(n2d@oKaBHipnHJ1tdyHIWVY*>26wR zL5MaD0TB_I6oCL?Xxm26Fi21`wIV~LN+Fb_Qu(&s@7#0WTj#Csy?f4m-&^0hVO7|q zDpmVG?B9Rf=w9h$(DbbyTRb2=Jw51K@B``OP|#*}@No$8_J)>15HtmvsAmmL0wX=rLs>fq?)ymp<7``4R2 zJipnpb@!gV`+NYS1CAa$9vBoH5)m17CYpWr+@-kqgv85NuKtknYk1Oj%4UJ9Bzdrr#rMSJLv+Gs2M6OW&@%CNc`~Cs!@Ujx2f9oFT@xlw)SqbZg)Y4b(csWGoj7UUs>w4p?ld@j%IvGv7p9nR z`u|OPQNg+Sl}REh zi*HZ33jOcDEmQJeJyH8GSV zFOxQG=3X={Ne2a+xD1MfSR{8|X!@k*8Hm!2rC5wj7UqYJ`J`VL{sKQGJT@_Ar z^}BN^v``1tZ|BZnyVps${D|X1Gy|#MCVll)-$m{^9aOiFyO0xx!OhG>c$N;5WoE(J zY>pW!^6wymFiE-wmE;WXfQBr3TNIf6ocGMBrEYe7Q-A4Tx$Sgu z1&%g8pSA?X|}d`K4Ppozm6QqQyrN*`;aN-ouMr=nxEu?F6q zRcn3@vD{a)5Ys`bd1&R}H*K`ANPbz*YiWq>V!Td1PcUFHt6f-{;Z^fM7@k7TK=Ap_ z4UF@28_bKHL>eY5Tf0Nm-(nuTP?-*zF^8$%hxydfy8D_cA|&PUVe;yrLrl(E+*|Qv zFr#31PIv!UFSY$Z_`U1tXP-gGiG$h#SoVX|pcJ`=pgT?cnvmk?Bq9QJ_RNq=uhZ8N zPVI1@4zl4yCmkT0D=S~XfrG5e*8ash$dE=X>RnPQ4nM(Jhc+L?!ZWl#Bk!p>ub2ZC zwls|!`I3r$ql0E~pD|78i`a>>zM(@JD)~E1t(p6V9ngG=2*eP=%;TAyrm|6bh=uaG zo!?@|b2N0a4YB4<$A=qJy&`QI=+<~r5#_Rlfhuqp`p!o6hkn2GniCVE*(X}14Rl8tx7woW8439-^afjIs7`+k?yjC=iE zI%wJ{z%k7;`z!Kt@*(iYu&HMn3m7I8S#7F$>|(A}HC!bex%syDK_#B3ho`!R$n5YHY}6 z>}?13t8>=U2kkU$bS|eGo58>rcqA!U3Dk$qjaOjVEo+}7a_T_MY#~n5tRlWnQGfdo zv#YNT^tGt)pV3aY)&S-=)3S%eu+L@lcjB~uTe%m&6B{F1_Xs5P5>!JXK~ab`t@D&Q&Xu0~02*QAqco>;`y<8MC2Z;~PAl)lnlwDrAOaHz7AVBP09qbG$_D~Ajk?m=vc&co9+8?i}=#5ZL;mA#i%f9G8N zGVRZF3i%A^9yy(3`W^WcF{xt6r5CAGxvi^ett%C+6mKf4 zcvRgURXsI`*)569Z{L2~{;>=rIJJ~y-O9Cj~nmR-WaAEgrsHJx8E;}JQS!- zsBBx&Q|lAWUD9D69_H{wdik?UR(2TMLCHBCG(mWc!vZVn0P7+Xa)dA2t^n%cFC3D} zGXoD)YE#Q7mV-Lz;RSr5yd|b?O%HX(YhprW7r073@nsa#=*??C-t-F5&lRL?=#y3X z+Vc-Djq=ZP=Wu^TW>y`R5BJdI(HD^8V13!b7%MK}rW}zJ)n-}ZOeHW7DYa~u{o<;1 zn0VvEcE{xCdgT3>1@p)Q>==3R8>{zv&_`bP@CMvj#-GLQV49Fd#H1JGg!gnv`}5F< z4l?({nW8hc6clODLALB3HCxN)E+0f@5(|G0+IPm;UNmX8J0%_Ls*J>5-Y%8+*UOU_XM0hiX27i z19Z@ov2J0T4k|_}kP_^pa(35sT%-=s{zy_dX87PSnebJjtm0~w6=q@L)ridE8gLwN zPmMF~(yDy-%bKYCgX}JEoL4|N;IJZdzYhAvKg7DLkzo-$ex@h1slAMT69T+#Zf4?k zd=*P$+OLDGs;EF4-U%_jsI}X(aXdT?EmD8ojvUoN-8!gAI*U%l3wBkY;rX&mcbTA` zY0OS(Mob8sP(`&}Q?CsMCsqaD!7D^0Ra^zDTW7E{8nUQj2kP_?>sZ)^`&#k;{0v;sCAKR%6HFRR5Sa@70G22%G2$N2{=F}=$PH3-%4vOniFfMUt zzouS1lQrwb@(<)3ZGyNl&650zInncuiC4Wv)&jAkV=P!aJH(d_-oG`6c5ayTzyB5? zEm>5iq?nQ|!V>9a`aI5>2e`db8zV#N!vdPAlSiH)#r;Ae=nC^THIZ505`1XC@NM3$$xPW>b>BK1tuM&46WmxE!g6uP`65 zt~%UR&Gi%QKtrpS!hC?-5OljOia#U*W@+*swJw+M_Ue$YPV_-KqcK0qR8h;J~;P_|5Z zF@m!Uza&Qzvz$@*8htI^qd*#jwxN7$M@EvZX{Rd!Jc=pNb+Pkhyo>O|a0jU|-YTL` z0c%pKP`RsoB!Yx0mK?yS#)M9GB?x6%I;hkqp~j5c?I}V^7(-x9wn|`ijyCJ9mOsk4 zOuB;SKSt`@g`sY18q+<>9J!8=qgj+7(Jk(l1*cYknBX$-G z`{AJBZXRi5hJBLz3}px?6plX1y3Ezb1x=Df9(@LGss5xbq)&Zs>+}<0)lOQ1MMEZO z4iQtdsdO9ei(acrw6O0AhZU=&#AR8cyf_Dnb$|M>I=m3G2J7VEs||FHHUs$Q8Pf8; zA(4#LJ-D+NXK9Q%F?bRxRj8ON+H5j0beY){*VTQ-h7@ujr`r#8XuN1ujru3 zs>!}aCQ zt2GDMKESOgv%3lh<@y3@fOQw%%9O zy9CcD?{WV!FA;O1!<ooEX9WwFd9D-;mLOCYEutbC;U!vpi1dg*dn^^NpQ0KWD9lXSv zdF5r;}bj?sauYOu#5+@*5h5l0NKvNXvuvfw6)tzore0< zF~AJUVHK>|{oZAiKh%OMoB7kiftkBPt)Qs%HEx5#(uEywN4t0c`5f@QKTA1ZLg7Tx zgq>Jdxek2}SCmnPWRx9M+Dq^Wd!*Ul1TQY&IBI#3$uWL_qMz9A>LHwu^1sGEV=k-EEM}>Uz8)3kxfADOl%{jTaW$6vK{S4c9jI|&mVFA9 zup~MN-PYQzR2B_YXdI=)S2)QxmSdYMnuOQ=ozXXGb;Fl!SK{BxG?Ymo8Ie-NVTc`) zVm+If#`GD?;OKLeD@(r(BTwxxH$V(!@+*Fw_w&_|6z`qE(A1^5L; zn8&YF;BVjyv-?QbApQQUL=N7HYDl9(ELwd)`;cookir$6LmGy!ruSXt&LN+3=c4d+ zx+|OFfeMGl6mRH*8{4ZkVxfMRXT31lIgM#^kK+~*q0J1GAyaq;b2bfyz>;&wD@0sN zUy8?Q43RqE1sL@%)-a3oyK<3Qrbd<*FpqbohY`<-& zow_U0b-u<0sas7qW>c7`-~wrTD3nRz&gsRo8SRe4Rw4AMsAU81O8Q}OQ5h}HI*Mlo zQaE%S#CqeYo`}me^V!kzv7y)i1(GDR<``hM%BCy_ZLu(jciG3 zs@nY7#yzG7>q1p+?aYRXRA zhcS~?j;+@Ed2Gf`TifCe%dKL^HG%_^)=4Xx3CA&FHLDT9zb(Qy3g!3K$QbxuDq6yA z1V|Q0{D>GJ^(<|PHk(X(Le5Mh7D~Gx^=TMGYd@E_89e?E`E}-y&vV2Wc!!~^1Y1Mx z4blQn+Jf)Iq@*b`j!JQzr`b-n)zEOUlB&mX@8r(I1M98##Ve$<+4}MoH#Btiu!!qs zyB4#!na{oj5@f!(zXM2MZJILoqh5cd9azjk!JNa`islBYA>AaHtM{_B|0wRP@TRKI zV>Q)Eifu>$=>`I;E4GG@wHc*zsB-)K;TSp7mUFUZL`?g9-;1;eR9*VAGBly2Ib{gM z1jZV21{L`7_25W&g!9447%<`W)Gv#-8j%C2k*@}Lcxj05Ow6aEt?;+4#P7iBF>X(* z*bh)eMWI}yTff2)xm{hMPpx%%ra9lrb;~_&o2_#j=djFen+|GjNfaRyd$=tUl81$~ zPfM#=iuKiM$nBBO^shQFsAStqT%HiXQn?-1xgIwTxzumoK^);@zJhnfV`Dw%KG-7#cj{#|}gVbHbVrq8@X*otL_>yFc z2ZzZi3?|LTh_7nSz-54-b0De%T3!!8+R&hz&cZ!lc^0>h|M})Al7A??SP5JhTk0&1 zV==HZ^^8ltMduyET$a#Rvs3nKZ@aQ?rcp!||N6SiMHPP5ACH4PaY2g;)aET!im{O9DaUiGRaw1yX7yt(6LdSTc-n z<_sagEZ2_$3EBZsJtJpO9&)7UHALhJ0RGczrIvo) z!aphF$8v8XEzoHuS^}S-;=6TF4->tO9B;*$QuI45pPb1j9GijN#&=86tDj$yT|j_? zI%p~b+$4=yKt1|dD4zxBJgb?EygSxB9vfBJ{AFRVIfv2CW)ZlGZW2-hb(FsU1%ImW z4*0S%E-5K`1A!#{1lBorN{j+x%q;kFivTmmFeEjWj zma=skPLtSqnQ=iO7rH6`?v8{3R1)LQfbbZ1Rm5TTj zTp_NdqVaf=hN9>KRH&$wK}l1_)$y(8=@IyWXpJ9dCCV5oLMs}48TGvDV2NEN=Hh4N z6iKu?9z&Y=vv6aDZ3#vZ(Wk#GrCH$0TB>1WQTL~2t_}7cYrb6C;??j6yFk%Zj|p^8 z$n=c{eDD9CibU^cHdxIGX-(7_L!6ChimWqDHfP!PR1l;ucmYICu^H@LiM`8(l~M-q zAu{;gPd2_FXGpTfYGz`6&Bnvt0JqZr5Xz5pfqMYBRW6io0P!p;6w2pmU}71Jhw=ct zp#q_N=BHw95dgz3au%O7qv7AspMFB>R{_QQq@JpSet*Ur8Hd{NK(uccid^A3D5pkf?mA0t(R1upc&lTj7V0BL9P8skwKqu!!1>Wur$uiS0>z?tgW6L!g z&`~m5L9t@NFGrAicQu0VL(ncNz&<$xsbAI?pkb1hAY_7xMNIU&*pznw7y?MEz9Ep- zznMnuAMG5p1t2EJ5=DMg3IRauF0Q{%{Bw%Z?usMt3y4v!xfOycjO!mt;qDAM+(5-Qbjf)tGnAr4k_Z+y?ty*@NG20s zKO%eZfFi;OKP)dwl=h_7%pe=vvtQ7iINmdYB{>SqgFis@{-4hqEr$MYd?V68!d57; z9wd#Af$-Kgr;z=T(H*@N#0}>-Zdh{y0iViwjnr2pDp%xS^?hEQWtq;qoRA}x7?b!4 zdGDM29mu8f^e*MfuAS$W{s(=nfB!YAC09Z%9c!X=CyMBXT{RT4Ne5XYCo;Vnt>5Kj z58B$`v^+M`yS>ULFifD$l{Q%S5eqF-Es&$aCpri$pN%@`r}$|8L!_B(;m=qq>662X7r#2?FQU?52m6eFY>CeIx#u=HDKk6V4&7#M^XjVp-FV%&T&%iDJ#bsTdE8D z)ODzKth=x%a`^LQYT1FS<9_Nkt)ONl_jkG#y1g1j)Xtz9adg0cahIb#bw5zaSoiwz z@Elps`Y>4KM9%Gk<%_ExlxP-erQ??46ry3Vew8+bT+8`dd#A?q0Pzi;qj4s@v^NO9 zi2I=uSN;@oxj!4(g(VkeWt>v`v8Eq<{oXlk+_~Ga71xTZiumxIz; zG#O6<@>dx_!!Us9>r_)Xh!wXFnL%H|1t2v81bB$W>%nw2&#oR$vdp5kR|SLy=DvekCmX5#%NWB1CVX#;v`|?ksTY zvKy!-@9>!HAeXSF{LnCEQbvqltLhR+AD8&~_e(!bheJxt^+qaGcQg#nx7wdLYh;-* zpvE!8!UXE4?NvMPhxpQq<-&{OiSZ+Eyz0u&NDxUFvGG1qzw_+jK(&`fI6@nte!lE; zR%1t;#II=FIrB>J?=dg+DLhTHj9uP$u&eYe-IUm0g_1c6ji0xZa;Us_Zsp@PmZJ%E zD7}y1_DgR-96$6KX*5T(n?0zGYa@YeAPpHBUr@lbEl|Gks*mQE8eDbVi1xA)E1fRo zz79z(?_K-2qO6L1MW@zi9Lqjr0>0|23sy0`{v~(-{nLQ3>|cfl&_53d%lHh*i_^0t;hrz!L5N7@h@L-3*-vQyPzW{;t1rYH69uSl^ zer|sO!eamkv=P?BP(G#+#2l%y$3c8PX__{_DoV2{2$@W50gkl*)I4l(%3kb4j(mNq zM8DB?F3xfmy|LLS4tMnOW6eI;Bk4s>P$|;bbjjFuVAn5b_WpF6k|PYGNMe)*Ln1kU z;-J((2L&L>aQXHeMRLTh7o#B1vut;z% z*z}~e8&)PZFeEnenfwOcRb~nBgu0oH6)x|pv!8-qmd3usQQ9m?cYg)-SUEPS<@u$v zNOo+>LE!JaS>I!>hp|L7d~vkOTUjJAa|gK_2EGth1*6j1b49!;nqe=c)L}zPk z-%F-toVx4V!&bcO?fj(q7Uyb)I=d>Pi3W<~USq7iCWtGR&Vr9qr{Z@0IIOWDg0&B$ zXy&2msl0n^maOKEJl1&^8kSkkS7#v8L;2{B{`(Jrn$57*SZhEYG1u$mKGi|9>0fc% zq*LyZ3pl&98RSCpH`4xbm!ry-5rX z)t4Gt2x|_vEu9K707%^uko{sLkop~*n0)s3PayjCyiB)gLB~AWB72f|b@nt{I;ku8 zJqDsN>GASvvGCnoZpZP(`u(gPcXbwCr&);y*13#t62#D2G)g&FXWt+ANMuDc* ztrCtO+5;h?d7x8n$D(TKSsS`O963wsp}S0Uw$KvFykvMFS-I?Hnaob+f};V3%J?%hg*H*U#}lg03W9|wuRqnvmf8ky70SN@%ZxU@HBbfen+e09 zjZ+7`9JsAdT2a(s8o%Und#QLhD0u%Q)vmY;|JUXJ#hL$7g8$j_kaLW42{yh=6UCW@ zuT!*wl$)|yMMb5GuAv*6gM?Qn#}O;4LmnpZwDC&hB4Vk74)cuJ%MPHu6&e@r@B9gl zxA+te7t`kE94nOKm$tWi_kN$h;%4r^z6s=cXIPd?Ek~}xhZ*Oyrh=Yqc+z`N=ix9k zUvsA6v{Tvmr5)`KJ?jrSE2P)#t7!S57F{mP@j%JQdM|!?a3}L4MH@Qe@>i0KZVFK5 zfDZa?l~8s|sy+-7aWt|76nWA$mH%sLw4PY|P(rO4k2a|g7d?Bl)05>^rK*0C_?h`O zhWT=w`Dmxd-KT~A64rZ5!ug}o;;skwXS&3{F3t`U`S)(z44LojX=SZvh095w&;DH_ zHEAErciw#%>QkOE4y>~Yaq;SzSpFL+tIFa@X#XGPyL8Zcj^FuCmSJBOmlO+ozyeE{mBKjzLW;0VGy|-mGT^_DGjEty#qs)l!*fddr;|R`^)6(COT6LZuxSX_{zVlmXZA!hJ2(c4DXwg%A} zVim|H z1G8pL*JFRG_jj^2K4-(#JIVL)OY`uK@LEc8bU)emFi#g)jhnE^Vw5Bc;WM!T29b1o)@_ zfMfrdVbDM1*aKIP$)B`Fd($;I_uwFXI%pGpqG(y#%EWx)K8!L}Q)n(L+?TqAiLyZ2;*W&rG-@XqyaH)_<-_ zj`-A3lcm#;AYP&itC10ZF7a{{&0xTPF4h+ZboU-gZJ;F3m%Su*qfZnDSLv2GsBMr7 zP=iK_3GUULWr9)Sx%1d|4K=gcBSG7pmuNg8GcP#$#-IZTJvs;5m%XKcb|Bu6GaA}7 z-X~&Qqm~B_-9ZZ!aDuRecZH*e*{Lt%?lQ1_M&I{EX*IH$>_OA6R51ez`UCvX4>`Gm zzDUnKSP>uyNj;aE0dkYiwDkL?;~k9r#=WQWr@Dr^I2_xzW4toi<7J%RxuDP7SnnWl z)>jeR9YZzrknkJUYYNsr{n*-_C*JjAYVSCs=CT5o_X$yN#`rhUL(U+%9*kP*pp10z zsTB2gRg$(;jY*%FwC<8ELTLE*g20OnyLaaMCpfl?YPRm&zm?SbmXG=E2&SE;e|iz) z`Ktdq^QY&l3bYy51wI2Ei`Tj?T6h<`K0oVLc)!GXH(vEaO&$|J+eeuB@bOoyp>?2D z`WfSVRV<=-{0kM`4Z81d_Wzk;NO&G`joZoBqinBsjp(WNt9^HW?YV+U*9!ItO4K{q zA;o)&hO|X%{@C(ykQ@F(|B=Ad0JA+=`qY{Gs+}Dk?7z8WcX)dG={+jry-E8j&t$3& zBYzUQ9abI|KIm(y)j`)vapP7oxhxAY`ilu0P9m~9!Ur-s9|aGN&_VevE;qTMR^77V ztxhTGP|Dtdm#Nk#JKR;9vOoFJ^NNPIq@;Bew0vs+`SX%)(b>iI!`Uwi zUIRKol;=nOV5OM`^ydHp%+9-aDWvULfI%I=`%NH4d_0w}hkSmVH-7(HN%FP=%bm+< z<=#6BKR76}OC4Vhw=KL8=)IXiYuZ(|eNU%#X?2eGjPQ1CdzB9Qm4TlfBg_~@gzI`W zh$S0JaYN8)a;LBJI|P8QEd6WX8vtZ{74%>rTU~}5evc#dQRz7sn_5$6aTd`e-MKjl zh1AgP_r86cauWaHhR?BRLF}GqE1Gxu?4KPO5bi^}>l0q)TP%p4IrJg@)?LO8T7uiX z^`vbKn1B0!KmT6^-+4`c+QaJIAkpT{y1H?-(!Jx`JYGIizYIP#D&b$|j%i3%W77@Bc!L zp%CU{q+#A#7~LU#b&~21vf`7dnksP?GrcJ%i!yU&a7@yF)0eTwF7?^x2Fhc1GP~LD zgc1LyFi-ynh1m@h|4Scq$aMx`zD7Mqzn$zv^gPL72QfI~_T|hpa0WDR2w?b=6ccUY%CiQfwOF=-@?|B2ID&`VLF(4LxoJikE!0e1BarUZ7Lt0YAZ@pr zH)lpw#INQ#X&n{IL`SlH@9lZtC@=7z_RAfY$m|c2?bE|oNF*648<$ti-12hQv*O}g z!HR_pEq{8)wr%K0-_|V}xBj}*9|uc+AuR)W_!6MK-U&Wm3JfL>MyX{*wVU8o%3HvG zQU0WL`V=skM6QVKMj;#pwcDt7fF0{gXYOchT9vu2!fJ{4y1m-QAju6+V{vFolxj)M z4;|_oe08|fslAJ3#UGNU@xA+nGCi z?qncHXZ7snBEpehdytEux7w?otjx~YR${r>WlP>t$NK{{ha8fJJMO=)xN&^1{j6h; zBq!rm47fTT|Lpc=U2NuO;T&?y-&lpbbQc~L5?+k+LgMvHU_4t9S^7_{gzJBMgrN2y zG7!Pgz*Ga(lEbT#HS2o@$};afwYc%vfx`f*LzL_Yy@<;A@X~F5d!?di=eV!=V&ANlN6XC5zCg4{_C;_*u$^kyGpl$ zvIFql&a%-L!ocwFnCmGTI|m=0`i!&WH^EY5UlHrr{fa+A{rAVJ&B1Meg2~crkAjgq ze7Mbxp$bIJDXpa0tzCcd@e!bA&416ZR>Pk>$9DdPMVbHctHp=-IRR{Qpe_N6VTeq-}T$4E)n7uDyZ-puiD0*BTEV;A_Bu?q&2d;u?Dixx)@ zInjk>g4&Hb=t)b+gIRyvI4fVZC%@Lvu@I&kdpw=$L8!78+-Kv8r_YD!SCHTC1j)l${^ ztsUVYnLFq|t3&qgS(0!Xh!Vx||_`l%Kk2fL~ksUUV=Jp*6XcfQ7f zY)c1~$RgQrx23v{N_91k#{7E}MWU8{wC+t^KKMpT{qRshOcdjeF_Y$Mw|BDhlXul$IFO@#YYb_>Woh9-(RHOEq2@)wFu+nXOki zOocbguVX|wmF-zanxdn*qPuuOQ}6Q55vCD-`ngvNy>9ePc(Z2rPH|*wMaVvXCfNMj zUh@?$S4yu?r&alB=7CK;5e3_E8gebsQR9j}r!pSA@@;j+V>{5$`H>V$DiU z2!24>!tgGukSe@P^c%<0NUP9{L+cxo1R>WWQN22DGyL%s6$NpW1|CkNjt{c%MTKm; z|0E$C(fdCmg}?zJx{E0>Rg zO_{hyS3|l(BAD=q9^@F#YP7wEP4JbA!6^@_SxmE`C30VyeB-J8q@G4xl` zMt{pHY$mXOVVo_uU*i>?;-OLR-Suio6W{rYL$x!=UVImRCqIaPf_zn0TGOX-QIFRK zkMll4_Wxfz^fOg$i1j6KExC<|4R;~lODeabfg)j#F=;fc6k3LqOZ-cU-UMe^pnSqS zTiw<*`o_bAvf*Jn;Z^whRljvqhg9v9lnZJrmzpGJG6cN?+frHZby!wJeLxlQjX0~Y zqGWP8h`>ZyR=5bYJEYC6nH^FgETO0ll{7H*Icri1@xh@^>BQbKud>pIPL(f%(nnJ> z6#(~52FTf%Q|4`dJi5Vpa&{gRYb>MnFw|%9G>pGN%O{p75NmHNv_YyztkZY}Wm$C5 z4LK*#sGQb1rUfHc@;+;IMq}1$9CRIfyttm9-xG9>m%thw1pR4912q&RbBJ{Ub`qmT zJfx*4g(`hCO&x+dAg0{a?9@R~@9ZkfIi6#D=fL}3OVEr=wPH6n^*VQkMN*B}cC}O! zat=GXQD{njg?BYn7PghYtfIXfXf;R}2Kl{ZnvH z{uJCM>DTD!^?Zff>37ZFi0|KTN(NgH$KTz4FFA8lzzp%8lLC1vdHAyCAp^9poz z16iLFCc1hHf-Gz1V3RN84Ny1X#%i%Pi@T5rZ2Qt#Zp7v{rEq*P=UQYM_oc)xzO3~k zbGGZ8;0V;GF{Qt}((YO=7I>}3<~`lCG~jN?8HsJSJVSe~xyhD_8Au3c1w1Xd_bc&m zsb(d`QCowA<-y-d4G3GjNFkgQ1UA=sDyi4G6LEKJcf$|tlE(4qB)awcUbn|tUEWyY z#TqJmz1*_l4O6+O;8+AJ@*#&V9sQHQE(Gsscd5YAXpylb#5`P?Uwtvwoj9qjgDpu=(81)TNR@eB8Y zOC%xwmY6VZ#N_PGp;1!-h@b{6EGy1aLAI@q4*!w(B@t9Y0DD@147P$I@VMscm&9w4 z0&HPChS@bBAomqY!07;G<#w5;biq ze%*;|D(}7*a_00#EAQ347^wLoii2i5$i#7nd|zvU}K z4u2HvGK!kxQqvNVQ}i%@VbRj?0VW6?zuv|6vDtjw#dxhnj%nxY5+GoYTh!VdjrF|mo!`j-$)4T;O3ng? z_Rig*mv0npTL+v>nFTh>T1Qq?Tz%~p|7=YSb=IL&@oho;?++exf~7P4 z)+8`pW_hZXymQcI?*HxdcqZf6S-Yjkz;#;F2lKi=ZhlziAgjt|vzC7V?4FGg703`Hyj78qRWtDc z*m3RrqQ)k~*1~ozo^}U+*-~2QyzfQXdT&2(uoLNxyJ#%^_cWKs;t_@=n_1sGx7yog zU;BydO5?eHFxm-EdChUm@M2!cnkVKi)j=nU;>wCBoH@84ulu#Z2^0fge#S?Bb%Lz2YA8+-vY1EY8B%ZwsQcL!B(27KB=m zt6~^ao5Q#j=Mn?~VjNcgf`(_yL3V?IS-;fC1xXxcF57)i6{_j4S&aoIx~`K<*0qpr4g;CUy0LD*r->_9EYC9>IdJaY1TDxxlD!smZ?1hR#Kz4-P`vFeyURj zY*7q|Z>)AU*G3$2cy`55-^xHGnqjF2IAObNvgSTfF z?HYKu2~_9e zHgciu8}Kg|DA%G)Y?{tE`yQ*glM|9Pg=yYF$9{7A*cCHGeZW-%8{Ib5NyvUGN~yPhfBsx_PY z9AAHBX&_@!z3h*N+x9%Lx_9^O(u+yCInVPeOPAdJj#t93%`sONa9&gla@I7s>Noz- zdiUs0+a@o~+Wb@N(w1XB3lgl?o;bFsW6N&#wdM1DSN&*bxpdc$W(S}9NJXx8nr(z7 zR&mtA~4kJW$onr+uS?vbGgrJ2}^L(lOOtGw>9eY@(%d-+Gp(_*5$ zoexx&9KY(|rH)D3%e2Ql8-%9B+!rv|Q{ZofS`!|R(4r<2eV>jhM_XaE{MqBuS;9bJ zx7IQ2h=imX;|b1WV|mbM?ADiFLFN5tDp=ZIJZ=@_5i4RFs@D8;^fSX8Z8~u2_uxOe zKZH_`?Y19JD)OVrT?c1Bc)9oFU2fCq8%uWI%ip^CVzTe4^jlV+)67pHM#rtDF&YW# z53)7gN2@m9avzv=E$3L0+4X0*KK=Lk2`NPvquk=Mm+rme?+_x+x83qGd4DCR^S&_T zkpu6FMXyy?DRXi+dqS72Hxm;yQOzO&;JIYw1k2}8c9vi5@hV}N93os^tQbx9Jb+Dl zo5PPUythJCR?XUw+Ox}gVQ%)R;5(k~3YIEc1{=Qe_mb~djUEaR)htBmiONhHg)e6# zJ_nQxy!qFMl@%|lJn!+%Ikf6_>eg@g8uz{3IZqmI-)KMam2jVvPu4MH=A#(n)ILXy zvnI7lY*e!D?c*pHBlf{oX;tg< z*xXMCe(3XY;a*XIt{uMy%lzyRN%D`;8;=?XlGe>~8(u<5a45E>0c81^svBr(nSA(? z(0tTp{pFG5^}9O+H&p@XcbzP6NpRQk&Yn##9gQEINYk7Poi(zkveU0y#Llk!@uOts zntK_Pi!HZSKURFawa91pD)o*Q|Gh@jQop)xFg7Cj9bK{dn%ggLRWq*Ll@B)Y+rA~f zMb!y@=dVYJULAbmRuK1W%{B3&`lB~W_RG)%PkzgPabxP_hyEVgdMN{4AfiNL<^Sxq$=th-qAjEj%UDa&oXI`qyU_={l_>bG!;Ce z>y>uZ*!8e2y6VQc*@fL1XPm}!-d#@*Q}n+2=9%`E0$xwUXbTcfd?beBPY(%}?)v>U zR{RSV75v<)j3cxkZ?afx9kqCQv%#fQm+bt7Q=Ln0xLn_nlvj1Hq-ne9*)BC=igNe< zaBO?-k@^Zyc8vMEGj+ zNCS36a|P3cvr#$6b2Ap7{5&HpFW7~Dk%$Rog-$Na^8+~dwzuN!7o1bM{)uxvv}?Xv zj>DMczJ2}o9h{%d8%ye|zWQ?f&a~~A9)9l3eShQ=*_ba9Tb-5v97Sj*C zzD$1;6`b80dzn{Zv#gj*WZr&j)oOHVMyuWTZ(l7B{q@GS$*Ubt|9UuJx6PLIO*0A- z#_m{pH|<^0bc)f-k=TuwZ*HiX*|%7=0@L>07HQ zxZC|}DP7m%C-Ma|Ka=yF2JwxaBL8(+ z^CzwCtbdVtZdKlodHZfSZZCrmU(IgW9{Db|d(|VqvsF3Q{eJ!-HZ$#O zgE^gGW=Sidgd~~!?8qYNhPVc%JS#()aAu!O z7#ljOoLv#470U_t+jx_-wq|MDNXrkwF3Ez+_8wW|M?6G3>0MW52V9ih^4}6CI+<|b z782gP`o==|aQu#jZ$plSm}l(Ywz>M3RgQn;_75(1Tzg2f*9F{8d<;We};`+J7`*l0!3V)hd;k zq#VX!k|e~W$i$eta;hBWTapzqm5>~BNF;;7tdb_@Q;eA@B61HJcV_19`B>lm?BD)l z?dRFw{p{E4`DgzlnPKkxbALY9^}gQMb-k|~28+9l5;WFv3h~aR?i1SHnhtwYl<|94 z<+?droKojp!$Uu>+IB`$`ud2^%`ML#o7~|%{Zr(E?=LOlu+MmHJvHm4+jwCP(cKy| z>wlq2M9p`I{XIL~_rtqO7S71JLGez>UH(B8kFG&&+gn8~#?n_qdxgX^JCdQ+)*tMMU=ZAgEb=wtu|! zseg@qS>Jei&#Pw>5iM0wLAhUQoaqlK5rf3u$|8rEiO5KIMdL%|b+xjaB@cUVPGBn; zjmFx`IZc=EP{d7|QCyJCvI}2+6E5M~3>3!-Vyim@FWbL!m4*>NLQi3sf~9#8ZewoS zIdo&!`onohxLvR5$jdVN+1?FKGxIT6~mQNM=14sGYk*XbaUEOd)-w1f|>_<}R2sV)Ovcsh=x5;|_swL$D< z*4ipBQ5O}-x>tK{o3O{)36~`mmlqx^+7|13WreB71g(d=Q*<9O7=d0K=9{W> z8lI_u~y)-V%gNE^Oc8|Vwq12Ie@US)!2+$~Ye-HOTy zC(fnQ6KwXpO@AMsLurIoGFET{G_3(OA9Q`t!xiqZszVt`#E~D(L zcXtvi4M#h&Tvp;*PPmwLe?1nz^K(Vlqc-`29f_aS?tj06U4uk5{ej!aKJ$`VrA&wq zsl51ZCdVUdo$rAUiN20`H(5?&Ie&HuoEhduw<`}hT<~XZLm(hoLvEV7A~7A2hPzbv zX2V@LQ+s1~7*Ds^XxpJgMk!w zUsdp*whh`8&McbR&HAHGg`X%V$|9tB?^w4j+@X8s5AT32%{iOD@Xzfl)C})%>>u(! zbNND+cf&{T)Y`9lt)=EOm6lE~3^pgPeU|TV*kR|RgvQPiwXCc;wR@GFwo`JF)njWF24AZ0}}D;?8Iwl2*)GO%wClX5bxrvOP-90_5pqakR8`SP3go>8So9U7s=ok z>m=coCBI%gf)}QToY!4Pd|-IYtr(ZN;^2e5P1%1I-tjDY{!_+=W^quVg`nckQe1Hm zw^10CO}M8bP|Y}N_T@v2?zzV8C%UVT+u55P64%{A4wTK=jv6mas5pV{&;LAg0-9b= zQ}kaUfZti>etj4nBcuyN-(j0AQD^SWdbzfRfWQ*8Szf;ol)mKI0I5HtV7KoEFV`X0 zdx^$<6=zz0wbA9NOV(u6V`b}hV+XA3p%=`lAvw0a!!*B*L&q5g(u}3|CHwjKgr1)= zYNtBxj$_pv3dCEvuE;!#p*U@}*j_yXI*<#nlbCq*o>x@MoZQT$Jqwu0XzD9|Z_iROjVF>w`N2?}5EauO16FQ$dG za?Y+z*|U?1FYfnqelA>|apg)bAR>X3&yHW$FsV9X1^y#1@xqwy+r9AUqJy`b{vs=9Mk>hJ^5R{Dl=Q z^Yjt{s7*9e_LR`Tvnd<=E%H*HeTX&2- z$=7FEW?Da=yw}`SgMCo925Qi#T>@JRyrtQ-azMyq=mRyh>l?cDBQnd6tKu{J8BI7{ z-W?9>JIvwcA4$uDHX$n+;e2CA{dL$$&u!@yV^zQ>|b`Q}%@$eDT zc>MG5=CAlft|A~x2L_w#Hg(&m0%cOFcPGvO$sW1K%t1Q_(r%y|z-OJuDl^Yb+3iCx zJc2rCFnz-_T@5&Lw{qC8>8A{GWNuphoX*FFA zO@{MJ2DLuBh=I5BHpJ()UB^VIb9~EVMBIy%)nQ#ZN+8* zn>uDp?=pQC^>ma>fFKSQF~+l9ZFHaHHMjYQ3K0u93Az+PUM3!u{~^#; zZB#^0!Q<9h}=$Q3_&=5_WeuAv=WDp_<+ErfNn4-uwULrp9M1iHlFA%baP ztT7S11baQDiH3nw*#jUYBt0@V#qbg9$A>Md0-@Iq(qRK0CLY~MVTq#Ksj`p!K@$nY z+bdU3GXnz7+HA?@EL|9iDaLj4n3xF{{CP39-^{uogE2Whw^GIox(1#kUYOE?ty$}%~X`$oQV!uB0&7&cYkANhC9y(@A;WrqYgxloK1|~<|;D!XtGp1Kk$SfceHHc%2?3E@)$Hdms zU#{AaQTe_`e7`O~mx{l{?;;GkqbuKbP@LbJXqVVH0v_62T85G6_6VA)2C#8xZ?Sfd zOkjH4{fB8a*nx8c0X5ow3dfkRBOX(l@)6@NV zY&4)@pbCiY%Rm}$6~)g1 z?Y8p0HQX-~!IZ4Y7Gb3MI2o#(^oiu8_#i_^qAM+^+x!O;5dYWfwjlQls2V_FgcQRp zo37``GFGB*6Vt<4bRCHuto?a3Zeg^XPu8Tk)rQtUH)?;&a~oesjTeQ*WfliOmnqpI z3+ZEOl-P{+et0=T7oX~*{w6J6Y&cKI0@|Rw>4B0aY&j#&jIor$0ABH!N=4-ctZJ=B@wSIOUgn)tf=_;5Wo(~ZC$_wo#T}5Vk1)8U zFMSMJBVJp8yDzy}>lRhi|B+%l(sB(p2A%0PxHsA_(njdY&MS_Rac{R7C);vYaGj6_}OJ=*pZp14GP6YV1jc5X>)d~s|XbA=Bf z{oJWL5D#0WqsMHwu?ntaWvr1_=lj?P0=kC8U5II1g1?48hhI&_cGMmy zMyi_gc?omEMP&uKbNhdV*>R!MQ%nN|Bg!q`y1VSuG#nf3#^kH`6*8}BUCRB@Oo_$;jOT4euu99h|hG^IZj>RSDY0oyDdKk5DMr;&~+{}+Mw`Un_c71a;%*bcfqh;+$ zy@XtNPC&9K&@4?5RqCz-4$CRV!?zL0HQWW8<~SS!DN4LSgM}L~oaVw*X>Lh%K?D$8Q+y(a$FVZF&Hi;O z5z}0Y788u4aI8W8dnBZY42yZ*n%i=CZMF?W=5>=fX<$Qoc+=i3O8Jk*t9r(c_G|?P zt8c2)F^qtju)p&3u)ZrnjuMybo7ff*a!)f?|Ao^%-w$M6dRd;6A=}q2%gOYN&>|EL z+m3vhF}js=h|iOAo-^HAsv{dhQ{TZJds&C8AJr(LGK}9`n4wy)485@Z?T#M~KB-=b zA!T9bKF>a)do_0@e%-IN;z%v6F!QKs0<%m7ugT@v&nM9IzFrKZDPHG-Qi>vjxVa34 zl7wO947c`LyL`m`*o*eyxg-nLy^CLoZZ#dtQY&Zud%}Cw(sOd3&SQhmn6({Z(gX9x5v z`C38hhdN8ltzTutM1^F(x_h)7;BA8}=sd|fx7_Bd<(pYcpTJX5MOJ}Ets$;PU;7Rg z869y=M}7!W;y3#{?8tqz&AqA_YfG#>AO*jwaZ)wi&uvU;w5-MDt&dmco=^988*ghu z`Q}eMPVV?aLY-CJQ*$9_Pm9i5k7Bf)$BbpHtuRf`j&3r%WhHl(KXT(g~;)BWy1J^V)~<-^CPfavN?9G#2%2^ zgp_8IV(q2JhaY{xVoYk)A5kJmzcfUiHX9;FLK^;6(Ib@}X;5t=-_omh&_lp(a;jLMk$*+UR%W^Y#;}Rdf zr)|^l&cH6XB`uhHN@s0{&C-F`&mE+Rox}aIep|DabWDaZ)}URQyGsHUzoiyZT{?k) zmP0jt-lE1UTfCdPva;qywGH%`MEs~@TS9eFRnlbpuJc;`X7=bna?p3Mch=ay&03zd z{K178-d2I4rq}zO4|2@%OZ<;J1wZ-tKzH2{6~S0LZ#_G{v{v!Xm|L^XrhBFdA;*qC zN^@%UXDe=7#<$V7(an+XzVyK7a3t}&{t)rOOrrnsRIBX(2*yLt_0vGez);2Myb+p` zdc){9BGO{Ng-&aEetGeni-3G8dH4NGaQQ)dooUCetzntgjV|{vqMtHzNvi`R!n%Yd zq7Bua`(6>Wz_0_3@E5HELJKxXux9RR8D1$&PI+w5Ad|JC4EkkQao=#Gy>{JZtVY1j zz=+gZ{NTKLon_q%vBI0Y@f!2EjZFI3779LNWF|sG$G-XQ_E5py6RqVMy>IHOY=RC8 zgw=_98m-C>C-U>|pG*|k&%QS@9o)AgfMje}pS-c*0;&){6TGeQl>hNJ&wPKxJhwDz zA?(a|!lsXIzmvc9q^0+GOC8zS+*^Gr;NT7bNAgy@Y>feOA%@f=NDglWs)euwr0a`a zCx;3vtxMv)R1rCU9ziKn{ospha}0U^UH(|*PeP^JIc^iHJp!O}n$6wF>$Bx(SH*Mv zmigBm0IePBq^iQCqvS-QPPTw^U3o%;Y6)M@H#VAi+Og8<*DIl=?&Ax+(Pq;(B93c2 z?e8QPy}w`RMu{doAIyC`0n}E~XOG=ETAHOKR9xSxk=`ZPYJSxIeBRd9hr_m5kUMZp zep_yn>-B~oJU%kvEo}dEQuWB~=0>HWFJ5k^Y?kvS+kEJp5Ng!5ce{u`a4vUvpODKc zUq-y|`pi6F8@*m9I5W}SI<{Zubwa*IPu%X+sT8T3)gL5v=!_xFoY|N$tp+;lKJ`en zmet)98W0JJa_;D%d;tIPVkFIL63*VHOcW?KlfCWhdog+4jk<)oGvyox3hQr zhWpq@(g4B+8Nj`hR@d4K1|b~;w97SVvRR&|8wtu1?P#`_G5iElx-$?MCEKWDQUkQS z!+Bgq3gg5r`@p8%1KV!rc?E=rTdY_R*oGV4_ZwbmXMKgaJKX;4m7Yr}XD_ul*Ncgv zf>htWLel%1>G!}oy;Xy>B`G3QaOX^4;VWhF zjh^hoCt7@jv+qvu#~beo)!UpqGn{Im zsJGo;XJt^J*vMp8ldM4TqgqW$GhgA!>uz#|_P!R27td21KAi7fbv$gqC6;E?2jnD` zs>6k6Ij(TetGq&-4D6f@&mOwo${WpJ6>wZ6Cboy!Yk3J%E8o5Cbs4b#{Ql-WsI;Hd zKjP&w=LT_0+|#P<#Xd~eumjs&GhV5ee*$qD%ocG$gc2kA!8|j|!Oz-; z)rWw(ocDpeFL1JMbV!}*NJw?8O?$UcK^+%CAwAn?jN#?2`J8mosXQmN!nSb~RXi{MdSA zd{33SrF76Dz1{xPq1&D-a@1x#e)o&hsQES6BzEX#HP)TSIJSb_khMyBBM)ZYqG?iC z$C0$W2_lEZz)}jD+w|!p3QQ%2^0=2#w|P=n?cPEyt~L^TnL>8&HIJlYCN77JIaG9q zMIJT@+eJyspI;xwlX~rZH?u0prV$uvhdhpYd{`ci$}(<7r^JU2uD!cGY@@{+$G7Hd z=hp_1awxZXG*kMnEERU=`~1%*_JnlbeF#IudnTM6Z+2vT8aj6{@pUrE`9VhB$+zob zn4u55%Jihy&QHm)SJ+q!EyTMA`FD*UQ|yj1VUP3|_u+zuaMYZ91E&Y~#QTy3CYwx7 z1)%zB;aje373C40SE%7nF)gs0~df77<6KA1=t%bkG$Lm(YU8dSd=XB?+#588HoJYQS zUGfH}ynj>@&GJ91KBwIGh1+(#d~@u{7w1%e`%^nCX`ahg?R9HDm1(Q7#qhYKKz<}x z{c4D-gK*%ddAIo?edC`C%-I6J=*0ZN#esMs7IohCMX?7v&brn96+a4ZWB&>)mCE|4ajdzhzR2tH}6&7#z9+a-G=-!xo<=sFhN?9$M3e9YC2H*S=wUYU2( z<+E9>JM1KoOPDK(cMO2EY%HNdM47Lb*VG^8={GWVpZqkCc(|)5G)n7eM=c&y-A5mW zX(>5h*AibB7liXks$9;e2^Vx*vW9L|w7MXEvRgn(NLzT3lS}nzmncVp%ChJlXa)6b zJ9P)N=0M~b8#~imVSAk#;g6EvpL@zz%0EdXxCgnQYiIMmq?vA-kaP0wNwMKHew;P0 zAEOvOaF0DXyTVsx+y}tjP0t$lc$8(iCyjdCisRA2Q>+hBxww(#rT#0n_BM`u?}8t*6(eWX(|qPUXV2nuD?+yR{f%n@=f zFiWj-PP`?Qp*Eg{FE4vt6}3-4hO2ki{U+?rCi*oKR4C#`u3BRPXC#T%b;*B7! z%b)pHi?poXOt3e_S2SEIY&-kb>7M?Rf*v+!_tP(3g+uF&lFYvce5};=QfEPBJ$az( zmBm!8-7g^hGNH+dw{hZ6E87)O_K(n#U@jZoLT|pjkesO$E1<7GhufCb+Z3TsU)Fkt zq2xYc729=TI3VKMPIaC8`BYtDd_pKa3D7-B!Xu=06g;13?>~~cwznYy8y8%s>fhNw z%lB7$o->?KqWQ6~m-u_jnA?`xb1h9(ePQ;$EBr~_**5dw)%N=0jd>1k@54bM+q=>q z)GhmW#QEHda@c;?^GID|NXrq8yJPCpUB{zibhjKJtwOAuG?Ym6w*kUfP5Axn$1zL( z74M4?ltZI^=Q(;;!nR@!Dht1yjKf`c_l&>MxT{G1KxdxDn{5U4wDm}KPQY3($?r%` z4l>p760t5wngOuS7-?K;q^;Ue?0mpa{*k8Qh+E=tW6o_@bkbcx3DXi z!Jw5%L?sN!u>l0m6v_gIl|@iQn|1WSU?Bsq^@u5)F|xOg`PhR>ktU*M$g~~kn#Iso zQsl%(nvk!@V5G~WB+SIrzLQzux>|t*zk@0`Qav9L2ryV=K(m3a^zjRTUtPr(9|e*q z&Ui9LvKxq|+D)Tr%RqbezxMtMI;*5HI8#6*t2dKX5j%9{B{5~3wgKS^W$lqiLXas# zSJM&wW}vYNY&LD3#0oLU3mokQeK*%HlLpR#GGBlA5|16H!`WZjIVXoUq8&kdkb9u3 zR5R`oKrgHvXeWLymHwA@5mT~O477_HewCB#!cOf1Qb(?fQb&W}xtcN;JXD~6<=v`Z zxaE11U%^sH0Ru;O?4s=iGV4MCgN{|(h`a%!QMN61Q1k-%RwYT*pDDMP)#(hCTHAvW zCD2IK)j1~S3xuhYNAz0>&Z)mh`$(*4l{o-n_f>b z9x0h3i8uCB&4hAn`hb&w95+{T3tI}c(6y1--|!X8sWo7#T4ImHvBZ5?$IVlHr*C**?{DS`+bOvfT4t<&WDRT-haWR-$^HZji@K9E)i>^%hDPv0( zF999H)%bICG(C#)Q>Gpai<(7O;$h{6bk4O}ZLtrnDLpy0SmGspi0<+t@X0_IfE_q> z5UWaS=W3(6XuH?$&Z*!~4q~)CIuMlieM=CKZs9hz*J96z$WQwyM_O$=K?g~bW@d7B zNq~$_!+&!5^uN1$nZLdK?7zKwnQ&|w1g>9|#)0It>UAuIWAUJlevk;H#ST&Zgz-r> zTSn|{d1Qu3%FOAK=cg4gc6czCa_Cl9*j+de95X3`)-Lz zKH>rfJ29hO?tP$i{w{rnQzr%tcuJX#t)|LxAl;*7&+H6SBu?9-AG$yxf?%GeEgTKw zF_pcM0^LO4#N;&{Cnod^iG^3rKJXY}n4RgM4v>r4<6f$i6b9vFbDx(94<(ea6mDHl z6mV2EUwR$(+LmKnrD2Y}LL~MNu?h-h?S_ndO-CM?-lUS`>@1t ziRC2`IC|N9M4e7RyqPz!98`-1x|~YBgwMSdDuraL+b*-Z?KNQU{n5k4I_SiUEn6as zcO16#+8y~K?Ym7K!^^l$yv<|P*b$>jckeURY33T|(3-mLLtmKo1mxoMlu0M51&xrz zT)0UG4|FXcUJX+Oq2;!cHDpoRdx-avwsfo-TRPUXstP5Cw?^u0j0Z~OjL;}j3@;P#C{ysq( zhMnouA_EQc$bJQ2ay_Iu)rX z<6#!GdWE11VufF)yvKRd9lA>-4t_V3Y;I@AI0UOa!g%X#{*-yd-tH^u?AnB2srkil ztpysT^zlgksVk!s9WiQZ9s|y_H~CSK4$dQ;;kBVbPgv;sYO!4~M`9sY|JZU2T^Gq; zKHZ9HRS2@O!v(gB58w|0x+`JC5itIV+Q?PBDe_(*nQ-YeppP9lSGC#n>FzjZUfJWh zzhQGpVcnTLhquIPtJ*f>OPf)Kmyx-qbN$7AsaqUKC(~XT)k*xTz7M`VvLj!vhQ5=^ z8IlDa0IYzR_7VR}e6=*5wgC$s$jiw2V)tKxMOH)Gb=G%NFBJ@+L(sBfKQP)PfuuGO z;z?`5Sw-6I-N$O6DZvL`zxc;SX^qJ}#a&{ph8oXr!S_bt;h}(j=5Fliva*q8={B4F z&8JKE6dqW$6{NU9RewOctr-NIBQ_sa^#*u zhWS_+qh z{FDI(D{ksMdOGu;PnY=xsaq!KMAwn|aNExWst5J?Pf3XBa z30y`gB-m58Z22BAAt4Uku!ap<`QoOJfAqs{Zw{!tpS8jKjpm-;#|#}~PRegF*gWAB zKq88_-*xYG5BSuAg29W1FO6JvB9e;?4|w~&D{>R-=Y5~D)QYwr7PeP!2Klvk6SU*U zQWWf>i@P|I?cAnSvtJ-y?VkDUzxMYhsO17xo-M>8-rO4+xIeJ)P%TZbyf^u7TBmN4 zCegvwVA=}$)=8V%VmT<~e;rCXWNG|{d$RI|bg$$@^z}RSkrgIKki+PV3Nc?VEGgi7 zwO??g+mT-9Bw#16o6tG{i*Lb#H`5PFvVlP3&OpnK>PBS z=Easc;BV|oh_#JQs~G6>Zzze&OmR&;^YNQVV!nVy7?8>%b&dVY)c1j0{p4(L>d=wM z!pqFHgBi%-q7PVP6BxMro;w&l;zhV5#sD8re?}jy2>vNkm!>lpjjjOp>8FhP6dN`a zWBSN^87X0k&wX1C9VM^POvw3eJbURx&Q{|Gz6xTzpCL#2t@O{FFq11O0Soy6>HiSg z4&7<=oyL5p9jWk(y~{HkavDp+S-H$_X}(ze=KCpVB!N*;4GsnmQK@5#fQ18z-+76} zMd*wEZSW$g;;AJbEC^`u4;N_)7XT>vW$_g6U4Z@B;|Y9C=SQ}`JUz+i?q27ua=Pci zN9NRFR#9%@PniRlypmh%B953D`j)b~Q|@FFmXG9U)>b7RZ*FG4o})#A)~a~0rqu?E zF35Eb*mo4bPrzt|6`6xihAK)87C-rcPV1s$bm~k@5r+fGsGRfYeXk9zDfg1)9djR7 zt7%V+U+l{LSXbGWQ`mt_-c2u)oBJWe-&tP)A4xK7R8qh=&Ch*qb!?f|Zu@3>%Y_hj z+4`?j0ky*t1vVLJ;9`O02#0h&ey1-<0_nz6Q*UUzQS07u5LW0)tpEM?CU3(2ZuA2x*t#%qDOfU}hr-31SxXZ{&^iHcUtNpz58H z9r@Iw2s1q5d<8Qa4vdJajO3p|KQMcz&6ty|n8}%eq@OZ3NHZyneg*X1esrb9PniM` zy~qcW-rh(3U2g1p*K1waS@gi?`Te4^6%NJL%3g&7_AgRW`d@TZewxQ8P|~c6nj{CB zEKz;OOzN0b%jow9C$cr1+jfw=o`FW91Mdq9A7r?c2TeqA4^YOgsw}42sk-29%74n- z^?@2JnUgG#OeaY}s2FcP9|kno{t{yQfBfPYz7W-LS;Z0Tnwd$RC}KH{=s*5goObGQ z^1boO8u!v=Dztl&-QpTK25CH2#l02AbQwMdV)OL2%a~qh`{Se+Q{*%6^?H*{c)Hx3F22sc16|)c)b-z+Li^7@`+t6S$=+I%5QBSVM%0wU zqleMFH&s>QL+^35jPVX~88}%V4tAna(odNgRT-==s91iOlqX%h$WKPNR=_d*rbQ4h z@+W_ukcqm-MX&E>%>Pv;`;Vt$6Q*=&5Ptfv_1$=EiO3yVSTO)`7Z2LL?8z6vEUu~e zDZ_LDl54TQuKwsQWxSEj?b_P@D^W+n;IAX>Ys}NeTm@HzI4#;BO~zRVq{rptQ^TZm znmICmQm9lVloR+Rk-uvVavJ4YBzwQ9ux;G<#}cRbd8DWb*gB`va#xesJt%BZr~1TrVZfB&CUve zp&Q8>&`CBAH>8ltFDg&6){mW~ znl-b+B-pRCN{Efck7U+l{Ui8z&$sszcII_b?m&=sw`2EH*$#kd|7%P8ckBIkKa-ik zC?SCYdOd!yU?jYuM48qHVe$T;0#==QhB*KTk+WdvMKTQ|y%P$?de;WR#y~uN7mvI& zkhZ=D??>*ZkL<2^Re_;1S8uJ|?^Dc05`e<#``b^8Vv}<~X)fte#s4{7|I&9$A{_ug z1E9BL?;@!)fAZkfl|SbBc~cbfZisCUrh~KUyXoME^i>wSF777)~js$(hik6 zJd!d3uMAwp-F$p?+ee69m+@1^>kc3rX?dh2l6}C#JwX2?iB4l-N9LmKfbEDffFcF9 z6_`!rKjB9MKj6LTKehom8dEWz18nlwQv66p#gYY+12VJ#sKK+?+!E}?2i!_1MuHz< z+=A9nJ%zeFQ_zQv7&l_&(ACsqNH>4VubH;BecGhL7(x!_Ak@zUL!*yMa~FjmmQgJhtIS8LZkkU&m+S@HLR_URZxK;5Gy{PfjjI4c zkA4$*_EuNrZlmu3x<$8vv2UPi9h`guGk|cFyY9QEo#-E6M$c)<8R=tG8*vg{0CQDK z`0U9_0U?37JUWN=rY4HhNR9*5x?}9f1i~+%d~g|urCZpCteC*B{64J{s7b!@UCYFx zIXxAYhQK9L)^G-p+}46qK=`&4NaNxwr>|3Gg}s8|=Oa=)&$a>6C)fwOBuKQb@CmDj z2LebHwk^zPBG~#S?mP?Dw2G(y6hDg4j9neN*Mg4~g>?frb<0LIZ^GiuX&Kx>Y0Xrv zZ$7OH(keu)1A%CbRGGJv#>rZmA=;gR%BKX1omzcOn|#9ff%F7t)U-yLJ{PpV9)e$$ zm`_X(T2ai1XIgF+SURo5iXsT1|4&$t%M6(-5f1&yoAwFK+wfKDG26w{BIS0z~bR%t- z%WnS_n*pt7e%1%+u{_|-B`Rq@Wr(t2`g_V+R(K^224^k zs3##NbKEL?6Q&?l)FytLRH!D%AyExi_a<*CXjbwQP6 zb99S3epM|7o*8rkS8Ad;-&{kFo|^_&=0l-70WC^l=jd&YWX%$30>6vIp+1;q zZvo@4*zopW|B^$-t^g+o@JyfAabX9tcst;GfP(^Fj@Nc2uMs;C*nlmYp3(qEQ|$vd zYnIZYjnGYIC6~p$g_G&UX`qda7fd#HDNN302z*1)cXbbm04zg1{wnm0;I1Bu5sCK|0Zr6F5U%wpo=LGzW_h-6c3b&fi5mE z4`;~>YZeP|B`5tPs&b3^z;vMQISKfWefULf`&$5qUVpgAME#|OY%RUd{9+4|BEpjl z_yiV64+G6XsN6yd7O5&8H7Z9}MgssB1u`iA%5_ucbAa0(n*tDQnX)vC8U(ZJu@yz} z*HJZE3${u<&L$8@b2G}+r@Y1Hh>N|@wi%O*haJEWSRHIsVz(!y363dcT zPyc7;@BI?#c5j%x^UzRdYr3WGVH+?lu}Y041eq*Qm~*(c74t*%3S?cx5PIUnl2KQP zQ^`f;0OX#@rSD{+QN_S<;eIr55Flao|K_guquKz6FJ%KM){AH(7P-MFpZ_Vd{Vv2RWRCm+He)iWZ$EII$|4$2 zo?QzRt;5nJ%2@Pvt9S*(-$dhZC5_-wDV2e}>jScomXJ3_@;jkl3`X=E0b1ETB={(_ z0Gus|$8Ovd*0M1y?ER9Du8B9vS za2`D@{M8iE$4hn7M8KFe{VruNf5ZTJ`~SV{|6T3>-6a2eB>&fv{I~74OA%E|3ivM{ zW`A$91-e_xfX)EORWRa`_}x=!ws9dZ0jDTY0Hyov=5SQCt5VVQWHlJ}ScF)xB9xwo z@xBhZ|K4sIrmY5|p-H)89dl83sE65t%!2d3MT3%J>CL)dP%t%sKIt#s1agvAix>wT ztno{#+e>@Lkf}4Hu#duY7N{(VO^Xc$xK<97Uldj$YofA{0R|LKw$Zu6nK z)l_-m>k<}F?}smtn@gghwbLe{gJMEFLsbG8u%&@WlpwHRZ@?w;lK?f)&Ky6f^_X&N zqSy7Mb44dvts%|vLi_mi?U`A|8i}LWO0r&9Tm>&m%SqPz3rb>1Yicb+6myv)K)zp% zIg+3wFD#A@xfDbWCo5I*@G7)MBCRs_qt}4Ppr;|T)5q_5dVklIqj6U^wo^&sJxBsy z?LM3ape7u`P67$#Tj^sri)=KqCA-?|wt?GL3&YL(NVKrLh1=iD zgs+V+T>Y>u$ZW{Ysp~)-fOnezljDy&#ir1G?pxyG;;9nUGJKfUHD&ACWhu z2=-Yfq(Ey1ePbV)@&>S9OCV;z0doUPSC}5ayLFG23)z!x{$fkXo>CA7Dk_VpUDS;w zl#dfxT2(MPvAEVLDt~-{6hCD`CFD=2krbvwv8yLGtj9F&4+3S$_M`w%ocMUE1uui7OvRSM34orI@=i zP}4C6yl;8|w+MaP#iyV-9I#jafBwk`If=4@=n5ZlNc5swEIZ/jY9hEBh/HGPitIckk9ap0/aSUUAGNQJ5hGzj/vpKIDAgktRJcDxjczB6ASHts9qVRM92o/QLg8vwmvqI9CzTT3v2Rc8Sv6El/qSyzZXxyMmFgGE/l8BOmOG/SImmUlfYR0ntRk4p4XhZFz0ax8jjNQ0yRjf12xaU1N+6hAHShJkHia7eY5+HuTpyzJ3+FeEgLN4MTHXlEXpPAaOrWL2vZ9nmhTzyyxEs6lL3JyH06aYi2dOe7TJKeX4WpS4i0raF2fLnLp+5WraboZj/zwPrux/pE7lfWH+/8Zs5+s2uluBM1bKGZKXskaaGpxrMt4WRsm4iWZHZsyebEHM0W0JPXt0ItxBayCMiSkCcLmjML2GEifQIl64YRkxUd4NE5ycJZ/QJuZRQllVtX7ryUI9V9ewndUxIRTezn9BVyxHjKH3WJKA0tHBgRCPE2Vbcoh44GxZeqJy3P1Dlzc4V+koKK15QMIXK+YKy6h0AcaIY7MHDauMRngyPwfDIeNgaj+32hMaHMwZv4wE64tFv43E648NxjozHQOOhsUCxfy7ztCjFNBbixIdJmMEBdRBSv4WcIxZnimXaJYEiNwvrTOp0X8SHUsx/qurl+S/5kOGo0kWq6sgKW1XYH3neZ+RrM40GWGEX0T4PvZYAdAeo8HVa+BYaQwRyvK43ow26esMtxaKBO//q2/X469iNwJq3Xz1WnWw0a3LGjUg+bNTEIQsQ12rKvLDs+Nsdc6g55tybpnwOWafhWxv8rmu+x6feFy76WjoFWrgYHTKdjl8PF92wUJHnczAMrQaGvh61nbawDUBXIIqKKyRmG1eDITrN6xbXLFjmtxZzQ4IDGco9YSkBxp5IO2Kx9jpXFyLs+/JdrZz3CPPy4kw1G3RMswy2RYwEjkZz0AKzGUo/jqW+iCtjXZdTo+OKdXYz4Xx2rAP6Wu5mfv0grLPyeHJCWcg2x6+SAWB8SDT67OD73bRDIMe1imjmI6dlFTE+5FCx9GyEZcZYCGMbXrLukExtLfJ+TNnxUeNmUMdURrjauDkoJz3TGH8SGp8mn3Kl/QKftsVad3j0jGOcW1enSQeMjo2OvpeokdH3OqpT7xAu5X1RGshPMcaC0I0XQsYNGMeUi4U/jR+syrSboIWcvRP4iMgtTbC8Qcgs7+xkSbMgO10Lkya93RZMCXTf1RVTjRDK+BOnG/bAGDo19mLiZ1j6LN3q6/jFZMVwuvIAfffyau6e0HZy83OLY3U28RDF3ae1fFNp9/3Snv4D \ No newline at end of file diff --git a/docs/images/powertrain_build-hp-white.jpg b/docs/images/powertrain_build-hp-white.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ef2f5c1a66a52ff668d4bbd2de4cd74cbe0000 GIT binary patch literal 44867 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 literal 0 HcmV?d00001 diff --git a/docs/images/powertrain_buildDependencies.svg b/docs/images/powertrain_buildDependencies.svg new file mode 100644 index 0000000..5e59735 --- /dev/null +++ b/docs/images/powertrain_buildDependencies.svg @@ -0,0 +1,1460 @@ + + + + + + +G + + + +pbr + +pbr + + + +powertrain_build + +powertrain_build + + + +pbr->powertrain_build + + + + + +pbr_version + +pbr.version + + + +pbr_version->powertrain_build + + + + + +powertrain_build_a2l + +powertrain_build.a2l + + + +powertrain_build_dummy_spm + +powertrain_build. +dummy_spm + + + +powertrain_build_a2l->powertrain_build_dummy_spm + + + + + +powertrain_build_ext_dbg + +powertrain_build. +ext_dbg + + + +powertrain_build_a2l->powertrain_build_ext_dbg + + + + + +powertrain_build_ext_var + +powertrain_build. +ext_var + + + +powertrain_build_a2l->powertrain_build_ext_var + + + + + +powertrain_build_nvm_def + +powertrain_build. +nvm_def + + + +powertrain_build_a2l->powertrain_build_nvm_def + + + + + +powertrain_build_a2l_merge + +powertrain_build. +a2l_merge + + + +powertrain_build_build + +powertrain_build.build + + + +powertrain_build_a2l_merge->powertrain_build_build + + + + + +powertrain_build_build_defs + +powertrain_build. +build_defs + + + +powertrain_build_build_defs->powertrain_build_build + + + + +powertrain_build_core_dummy + +powertrain_build. +core_dummy + + + +powertrain_build_build_defs->powertrain_build_core_dummy + + + + + +powertrain_build_dids + +powertrain_build.dids + + + +powertrain_build_build_defs->powertrain_build_dids + + + + + +powertrain_build_build_defs->powertrain_build_dummy_spm + + + + + +powertrain_build_build_defs->powertrain_build_ext_dbg + + + + + +powertrain_build_build_defs->powertrain_build_ext_var + + + + + +powertrain_build_build_defs->powertrain_build_nvm_def + + + + + +powertrain_build_sched_funcs + +powertrain_build. +sched_funcs + + + +powertrain_build_build_defs->powertrain_build_sched_funcs + + + + + +powertrain_build_build_proj_config + +powertrain_build. +build_proj_config + + + +powertrain_build_build_proj_config->powertrain_build_build + + + + + +powertrain_build_interface_application + +powertrain_build. +interface. +application + + + +powertrain_build_build_proj_config->powertrain_build_interface_application + + + + + + +powertrain_build_interface_ems + +powertrain_build. +interface. +ems + + + +powertrain_build_build_proj_config->powertrain_build_interface_ems + + + + + + + +powertrain_build_build_proj_config->powertrain_build_sched_funcs + + + + + +powertrain_build_unit_configs + +powertrain_build. +unit_configs + + + +powertrain_build_build_proj_config->powertrain_build_unit_configs + + + + + +powertrain_build_user_defined_types + +powertrain_build. +user_defined_types + + + +powertrain_build_build_proj_config->powertrain_build_user_defined_types + + + + + +powertrain_build_config + +powertrain_build.config + + + +powertrain_build_core + +powertrain_build.core + + + +powertrain_build_core->powertrain_build_build + + + + + +powertrain_build_core_dummy->powertrain_build_build + + + + + + + +powertrain_build_create_conversion_table + +powertrain_build. +create_conversion_table + + + +powertrain_build_create_conversion_table->powertrain_build_build + + + + + +powertrain_build_dids->powertrain_build_build + + + + + +powertrain_build_dummy_spm->powertrain_build_build + + + + +powertrain_build_environmentcheck + +powertrain_build. +environmentcheck + + + +powertrain_build_environmentcheck->powertrain_build + + + + + +powertrain_build_ext_dbg->powertrain_build_build + + + + +powertrain_build_ext_var->powertrain_build_build + + + + +powertrain_build_feature_configs + +powertrain_build. +feature_configs + + + +powertrain_build_feature_configs->powertrain_build_build + + + + +powertrain_build_gen_label_split + +powertrain_build. +gen_label_split + + + +powertrain_build_feature_configs->powertrain_build_gen_label_split + + + + +powertrain_build_feature_configs->powertrain_build_interface_application + + + + +powertrain_build_gen_allsysteminfo + +powertrain_build. +gen_allsysteminfo + + + +powertrain_build_gen_allsysteminfo->powertrain_build_build + + + + + +powertrain_build_html_report + +powertrain_build. +html_report + + + +powertrain_build_signal_if_html_rep + +powertrain_build. +signal_if_html_rep + + + +powertrain_build_html_report->powertrain_build_signal_if_html_rep + + + + + +powertrain_build_signal_if_html_rep_all + +powertrain_build. +signal_if_html_rep_all + + + +powertrain_build_html_report->powertrain_build_signal_if_html_rep_all + + + + + +powertrain_build_signal_incons_html_rep_base + +powertrain_build. +signal_incons_html_rep_base + + + +powertrain_build_html_report->powertrain_build_signal_incons_html_rep_base + + + + + +powertrain_build_interface + +powertrain_build. +interface + + + +powertrain_build_signal_interfaces + +powertrain_build. +signal_interfaces + + + +powertrain_build_interface->powertrain_build_signal_interfaces + + + + + +powertrain_build_interface_csp_interface + +powertrain_build. +interface. +csp_interface + + + +powertrain_build_interface_application->powertrain_build_interface_csp_interface + + + + + +powertrain_build_interface_generation_utils + +powertrain_build. +interface. +generation_utils + + + +powertrain_build_interface_application->powertrain_build_interface_generation_utils + + + + + +powertrain_build_interface_model_yaml_verification + +powertrain_build. +interface. +model_yaml_verification + + + +powertrain_build_interface_application->powertrain_build_interface_model_yaml_verification + + + + + +powertrain_build_interface_service + +powertrain_build. +interface. +service + + + +powertrain_build_interface_application->powertrain_build_interface_service + + + + + +powertrain_build_interface_update_model_yaml + +powertrain_build. +interface. +update_model_yaml + + + +powertrain_build_interface_application->powertrain_build_interface_update_model_yaml + + + + + +powertrain_build_interface_application->powertrain_build_signal_interfaces + + + + + +powertrain_build_interface_base + +powertrain_build. +interface. +base + + + +powertrain_build_interface_base->powertrain_build_interface_application + + + + + +powertrain_build_interface_csp_api + +powertrain_build. +interface. +csp_api + + + +powertrain_build_interface_base->powertrain_build_interface_csp_api + + + + + +powertrain_build_interface_base->powertrain_build_interface_csp_interface + + + + + + +powertrain_build_interface_device_proxy + +powertrain_build. +interface. +device_proxy + + + +powertrain_build_interface_base->powertrain_build_interface_device_proxy + + + + + +powertrain_build_interface_base->powertrain_build_interface_ems + + + + +powertrain_build_interface_base->powertrain_build_interface_generation_utils + + + + + +powertrain_build_interface_base->powertrain_build_interface_model_yaml_verification + + + + + +powertrain_build_interface_base->powertrain_build_interface_service + + + + + +powertrain_build_interface_base->powertrain_build_interface_update_model_yaml + + + + + +powertrain_build_interface_base->powertrain_build_signal_interfaces + + + + +powertrain_build_interface_hal + +powertrain_build. +interface. +hal + + + +powertrain_build_interface_csp_api->powertrain_build_interface_hal + + + + + +powertrain_build_interface_csp_api->powertrain_build_interface_service + + + + + +powertrain_build_interface_csp_interface->powertrain_build_signal_interfaces + + + + + + +powertrain_build_interface_device_proxy->powertrain_build_interface_csp_interface + + + + + +powertrain_build_interface_generate_adapters + +powertrain_build. +interface. +generate_adapters + + + +powertrain_build_interface_device_proxy->powertrain_build_interface_generate_adapters + + + + + +powertrain_build_interface_generate_wrappers + +powertrain_build. +interface. +generate_wrappers + + + +powertrain_build_interface_device_proxy->powertrain_build_interface_generate_wrappers + + + + + +powertrain_build_interface_device_proxy->powertrain_build_signal_interfaces + + + + +powertrain_build_interface_generate_service + +powertrain_build. +interface. +generate_service + + + +powertrain_build_interface_generation_utils->powertrain_build_interface_generate_adapters + + + + + +powertrain_build_interface_generation_utils->powertrain_build_interface_generate_service + + + + + +powertrain_build_interface_generation_utils->powertrain_build_interface_generate_wrappers + + + + + +powertrain_build_interface_hal->powertrain_build_interface_csp_interface + + + + + +powertrain_build_interface_hal->powertrain_build_interface_generate_adapters + + + + + +powertrain_build_interface_hal->powertrain_build_interface_generate_wrappers + + + + + +powertrain_build_interface_hal->powertrain_build_signal_interfaces + + + + +powertrain_build_interface_service->powertrain_build_interface_csp_interface + + + + + +powertrain_build_interface_service->powertrain_build_interface_generate_adapters + + + + + +powertrain_build_interface_service->powertrain_build_interface_generate_service + + + + + +powertrain_build_interface_service->powertrain_build_interface_generate_wrappers + + + + + +powertrain_build_interface_service->powertrain_build_signal_interfaces + + + + + +powertrain_build_interface_simulink + +powertrain_build. +interface. +simulink + + + +powertrain_build_interface_simulink->powertrain_build_interface_generate_adapters + + + + +powertrain_build_lib + +powertrain_build.lib + + + +powertrain_build_lib->powertrain_build_a2l_merge + + + + + +powertrain_build_lib->powertrain_build_build + + + + + + + + +powertrain_build_lib->powertrain_build_build_proj_config + + + + + +powertrain_build_lib->powertrain_build_config + + + + + + +powertrain_build_lib->powertrain_build_feature_configs + + + + + +powertrain_build_lib->powertrain_build_gen_allsysteminfo + + + + + +powertrain_build_lib->powertrain_build_gen_label_split + + + + + +powertrain_build_lib->powertrain_build_interface_application + + + + + + +powertrain_build_lib->powertrain_build_interface_base + + + + + +powertrain_build_lib->powertrain_build_interface_csp_api + + + + + + + + +powertrain_build_lib->powertrain_build_interface_csp_interface + + + + + + +powertrain_build_lib->powertrain_build_interface_device_proxy + + + + + +powertrain_build_lib->powertrain_build_interface_ems + + + + +powertrain_build_lib->powertrain_build_interface_generate_adapters + + + + + + +powertrain_build_lib->powertrain_build_interface_generate_service + + + + + +powertrain_build_lib->powertrain_build_interface_generate_wrappers + + + + + +powertrain_build_lib->powertrain_build_interface_generation_utils + + + + + +powertrain_build_lib->powertrain_build_interface_hal + + + + + +powertrain_build_lib->powertrain_build_interface_service + + + + + +powertrain_build_lib->powertrain_build_interface_simulink + + + + + + +powertrain_build_lib->powertrain_build_signal_interfaces + + + + + + +powertrain_build_lib_helper_functions + +powertrain_build. +lib. +helper_functions + + + +powertrain_build_lib_helper_functions->powertrain_build_a2l_merge + + + + + +powertrain_build_lib_helper_functions->powertrain_build_build + + + + + + + + +powertrain_build_lib_helper_functions->powertrain_build_build_proj_config + + + + + + +powertrain_build_lib_helper_functions->powertrain_build_feature_configs + + + + + +powertrain_build_lib_helper_functions->powertrain_build_gen_allsysteminfo + + + + + + +powertrain_build_lib_helper_functions->powertrain_build_gen_label_split + + + + +powertrain_build_lib_helper_functions->powertrain_build_signal_interfaces + + + + + + + +powertrain_build_lib_logger + +powertrain_build. +lib. +logger + + + +powertrain_build_lib_logger->powertrain_build_config + + + + + +powertrain_build_lib_logger->powertrain_build_gen_label_split + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_application + + + + + +powertrain_build_lib_logger->powertrain_build_interface_base + + + + + +powertrain_build_lib_logger->powertrain_build_interface_csp_api + + + + +powertrain_build_lib_logger->powertrain_build_interface_csp_interface + + + + +powertrain_build_lib_logger->powertrain_build_interface_device_proxy + + + + + +powertrain_build_lib_logger->powertrain_build_interface_ems + + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_generate_adapters + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_generate_service + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_generate_wrappers + + + + + +powertrain_build_lib_logger->powertrain_build_interface_generation_utils + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_hal + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_service + + + + + + +powertrain_build_lib_logger->powertrain_build_interface_simulink + + + + + +powertrain_build_nvm_def->powertrain_build_build + + + + +powertrain_build_problem_logger + +powertrain_build. +problem_logger + + + +powertrain_build_problem_logger->powertrain_build_a2l + + + + + +powertrain_build_problem_logger->powertrain_build_a2l_merge + + + + + +powertrain_build_problem_logger->powertrain_build_build + + + + +powertrain_build_problem_logger->powertrain_build_core + + + + + +powertrain_build_problem_logger->powertrain_build_core_dummy + + + + + +powertrain_build_problem_logger->powertrain_build_dids + + + + + +powertrain_build_problem_logger->powertrain_build_dummy_spm + + + + +powertrain_build_problem_logger->powertrain_build_ext_dbg + + + + +powertrain_build_problem_logger->powertrain_build_ext_var + + + + +powertrain_build_problem_logger->powertrain_build_feature_configs + + + + + +powertrain_build_problem_logger->powertrain_build_gen_allsysteminfo + + + + +powertrain_build_problem_logger->powertrain_build_nvm_def + + + + +powertrain_build_problem_logger->powertrain_build_sched_funcs + + + + + + +powertrain_build_problem_logger->powertrain_build_signal_interfaces + + + + + +powertrain_build_problem_logger->powertrain_build_unit_configs + + + + + +powertrain_build_problem_logger->powertrain_build_user_defined_types + + + + + +powertrain_build_replace_compu_tab_ref + +powertrain_build. +replace_compu_tab_ref + + + +powertrain_build_replace_compu_tab_ref->powertrain_build_build + + + + + +powertrain_build_sched_funcs->powertrain_build_build + + + + +powertrain_build_signal + +powertrain_build.signal + + + +powertrain_build_signal->powertrain_build_dummy_spm + + + + + +powertrain_build_signal_if_html_rep->powertrain_build_build + + + + +powertrain_build_signal_incons_html_rep + +powertrain_build. +signal_incons_html_rep + + + +powertrain_build_signal_incons_html_rep->powertrain_build_build + + + + + +powertrain_build_signal_incons_html_rep_all + +powertrain_build. +signal_incons_html_rep_all + + + +powertrain_build_signal_incons_html_rep_base->powertrain_build_signal_incons_html_rep + + + + + +powertrain_build_signal_incons_html_rep_base->powertrain_build_signal_incons_html_rep_all + + + + + +powertrain_build_signal_interfaces->powertrain_build_build + + + + +powertrain_build_signal_interfaces->powertrain_build_gen_allsysteminfo + + + + + +powertrain_build_signal_interfaces->powertrain_build_gen_label_split + + + + + +powertrain_build_signal_interfaces->powertrain_build_interface_ems + + + + +powertrain_build_types + +powertrain_build.types + + + +powertrain_build_types->powertrain_build_a2l + + + + + +powertrain_build_types->powertrain_build_dummy_spm + + + + + + +powertrain_build_types->powertrain_build_ext_dbg + + + + + + +powertrain_build_types->powertrain_build_ext_var + + + + + + +powertrain_build_types->powertrain_build_nvm_def + + + + + + +powertrain_build_unit_configs->powertrain_build_build + + + + + +powertrain_build_unit_configs->powertrain_build_gen_allsysteminfo + + + + + +powertrain_build_unit_configs->powertrain_build_gen_label_split + + + + + + +powertrain_build_unit_configs->powertrain_build_interface_application + + + + + +powertrain_build_unit_configs->powertrain_build_sched_funcs + + + + + +powertrain_build_unit_configs->powertrain_build_user_defined_types + + + + + +powertrain_build_user_defined_types->powertrain_build_build + + + + + +powertrain_build_user_defined_types->powertrain_build_interface_application + + + + + +powertrain_build_versioncheck + +powertrain_build. +versioncheck + + + +powertrain_build_versioncheck->powertrain_build_build_proj_config + + + + + +powertrain_build_versioncheck->powertrain_build_unit_configs + + + + + +powertrain_build_xlrd_csv + +powertrain_build. +xlrd_csv + + + +powertrain_build_xlrd_csv->powertrain_build_core + + + + + +powertrain_build_xlrd_csv->powertrain_build_feature_configs + + + + + +voluptuous + +voluptuous + + + +voluptuous->powertrain_build_interface_model_yaml_verification + + + + +yaml + +yaml + + + +yaml->powertrain_build_interface_base + + + + + + + +yaml->powertrain_build_interface_csp_api + + + + + +yaml->powertrain_build_interface_csp_interface + + + + + +yaml->powertrain_build_interface_device_proxy + + + + + + +yaml->powertrain_build_interface_generation_utils + + + + +yaml->powertrain_build_interface_hal + + + + + + +yaml->powertrain_build_interface_model_yaml_verification + + + + + + +yaml->powertrain_build_interface_update_model_yaml + + + + + + diff --git a/docs/images/powertrain_build_gen_service_black.jpg b/docs/images/powertrain_build_gen_service_black.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c61238eb780896d776292c8f51449e4c72b7937c GIT binary patch literal 356511 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� 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

H2yRArYv1V3Y&%m0;gA^3k>&-e_S`!? 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 JUgq2Ie*yP-72E&- literal 0 HcmV?d00001 diff --git a/docs/images/powertrain_build_legacy.png b/docs/images/powertrain_build_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..91e521cd56fd1a6c0590cf71f4f7b7e2b8828db0 GIT binary patch literal 116051 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 l3?)3@7|GM;>;TicSCTDw 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 Kuh6}E@4o=0gu3bg literal 0 HcmV?d00001 diff --git a/docs/images/reset_port_SL_example.PNG b/docs/images/reset_port_SL_example.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bcd41144dbcf22421293dfbc19a7e7cf6dc128f2 GIT binary patch literal 81716 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ⓈYYh}z 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¥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 O_p>lVnl>1FC;tg`6~zMp literal 0 HcmV?d00001 diff --git a/docs/images/signal_inconsistency_project_index.png b/docs/images/signal_inconsistency_project_index.png new file mode 100644 index 0000000000000000000000000000000000000000..ba992ba858e89e9554eb9d9803dec6aea061a20d GIT binary patch literal 48583 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 DUfI86 literal 0 HcmV?d00001 diff --git a/docs/images/ts_change.PNG b/docs/images/ts_change.PNG new file mode 100644 index 0000000000000000000000000000000000000000..83d5fb9338653478c2a8a966639e3a8a8647ad7d GIT binary patch literal 42739 zcmZU)cUY4_(>F>{su+~sMWje*7DS|}s328Z2sMPJfDi%cO{FOvr6@>|4hbam9w11K zfPmBh0U;=a8VD_v6QA#WzVn{z{K3U_@4ff#%x`})J3F)a@XSDqjfJ0uhK7disrDmd z8X7tT4Grxu69cscnMSOl{-gCa)_O=&F(|k~eK`00f&K#;n#x4hW9WJ6GxIBL3vU{l zi=F@eXnSBKjx;ny@1H(;VCrwX-pc${uq$A{ZE1kG6-tuuojVigX%v)1E>8AgDM$M6 z?62<$^hhLdtbI<$O}1NdyDic%yu8m~FQD+7`(|BohoCx*C*lFq)5-3-bDwobR%s$O zf_!vUrZs~$)z6O1{K%#grbD|w27e502OR_(8T$B;&1_C)Ggh;?p?BYE8Z$A3ci1WL zUU*XbZjX!ATyN(;Pt?YeCqG+WH{8tN{%?oE@bOf!Z(W#wz5l&;yxr*8NU|`{VTLHb z`9ELf2jqWn?@h%7Mp2(xv~*cA1(k`fZ;}G51{U43SJYv z|E5-zLR@%q!WdcWf?=|$rhb~C_P<&LuLCYH2sauUMof5`tk)Wr>G59| z#(UO`9xL$1^~KEd*V>N?ekmF$8kpjgh^TDPCuB)@c%i{FAgMEZ7dID^Ge5EGYQnL& zpWU4G`WK#vJsI?wxi)MX3dJ7_6VOiT!! znj@2BHN^ID=v$dYl!ON$eE1r5=?@fsn}AUYIgZ;xVwtxC`WeGJq!iz|jj>RG{(4%5 z3s!VxS6zO*xTAKO1d?gH3NFyY#27N;I_++2=FTZO+#a?SSYYN?rri3%`zee%<&%sT z;{rnA!`lBD+e;HFtHcRn$XEX_X#~{cW`5P7UaE?a- z#FT1f5$>Z>h^|gMg^_dr-k!a%gmxw1uC)oD3!h77q{rX5qJg${PYkLjNKD!)m2tL)$+uSw`+eo{dZYkN8X#X8$FsZj0uacInll+Djbcs*$rC%`PU!$d~02vP!jA zzT)Ty5Jk*P0M&DKAlE0WC-7blfujNv?@^XTHNB{E#TK{PWu)w*7t>{*dz5&H z{~sRQjlCQK4{c^FDum3GG&!9Wj>n z#To@bzc%JyN&M$Xe*7;0rZ*7<43jVhRDNYdYKjQHGJ#4OiCgc8DgUF}%$p$hB`F>& z#F~pSf0u}1x8vizV}%T5Fe7i=QKEBeg1}2;rAnV8Y}(~~>{9;0V&7*3)1dwq@{99r z$kxm)Dk=Xtvq@VAzmI)$2=7tt?Sq8;tTa}Ks;i-MRXKbET&jPl4)dSPY;_ZpS&l#S zr@PY=3-TuySFjLf-bSbh59RLmXGQZZ>;I1S)7HV9@^V8%PjXMy_PakR|4e9{*zk6bzu7o8MJ$*wE;828>#w<| zb))BefPQFDhLPoG2e33D&MUpgPND2SI{%Z>HPXJ*{K=wGd~BSOV_1rp^_r8yfPWaOkXG9LxLcq~ zLxS3`#U_gKC0UR|*?^$lt@`|b>BD7={T%yp^s7stu;wpZr((hpv1f z$+8}?Pgj4}ac|!Pl1h(d>+}l2byIRn^Sp$Z1cA8#w8Ph%GvvmcOwk|eJk$I3iLqI2 zlTNIU8?g=wykq}&O$vOC&dhoE0?l#LaZ=Y?>YAP||9EgO(Daj&PWodg`S%kK%O(eF zsTs0(dE2GVHF&H5x+WOoqp@Xu5l`rh`KsMo+L_iQL%8Q?y}Aa46baIKu404;L$R1H;#Lv zGiHd{!M5{7oj}W_uh;Y@N4GyWppM2g6rdt}l99DBE^Vb*Q$+t1wI+lUsL9F}wsq$~M{Q8{gA5frfR9gw$m zuylaB6eLCeNGV0_mWW!(sKV~K0L0;PR<#kp4Q1`!DJ%vq55cNe1}f!h%dx@aLh8 z+V~=lbXi#muOHGrE&ni@%cHf@T)W)oM9Sw^g3QgI82#{kV5`zbX`G?Gt{13pVF1o^ z;qD9I1>A~jU{FQ~k3aM8JWQq$i#un9H3t71;*R~p@`Zx~f40$)rGtdNrFWS~`PQ$d z4nkz@jKz1VzUuqlkHHahKOUb3*m6I`)!Z4#Q*d8g*OBH?J~V9{^}zEQR*!auRU-O$ z^sTUgSh>sIg1TMi5-uLW^VPrsBU-<2uo>Wt-p@N_r(L%0+?MMx~>L_ z7w8mR2AP9~;rCQk5s%4#hx09sjlkyS>4NuOYhM&rm7?r#CQjDFL_`zbm|ny;WeVZ9 z7q+h!s4w{FW+dlDjIEm~=CM4TZT3U1P1owy!SHfc^&Y7MnM&9qegDV{qK;J^Y=hZ# z8XON-S#8@2_^#`KhpSmEx+cyJrq8w(IxS7>-Ek7c31qsW+qkxtRVpd{?q%67qNDYF5bv(xd+(~_W?q18!xkhnIakqmdzCZ0D@uw8_KWdZ`A$A<0 zY!MI#Vn){k~Nd{}f&;9JJ^u;yOyHV7d~DfynVY$7^sj)a;=iVUJpRllz0|lTV-*5>n!teTNCnroKj z_9}ghjt)G;hzpaNbS;?9VX+z1{^oZ{p80V3U*kW&?feb)r1zq8JhPjA9p1}pZzP%s zQX!9N1O<~Zb`v?l2dmlf$UzC{+%sdh2As=gPKeBp%3D1XH8w>9)kC#5B5O?!s~O0O zqt$zMzii{KGjM5fX>mq#Qn-S+nz@2F8M$U-Lc5aeO^pVtKUATFr2HPe^|>I0Qh%Aw zHlhH)sS4VY1l9;gf=N-TU8bS(O{lem-il9Gf}3iwrwOCb{}?sH_J-YV=8)(m?vKV zG3s;cG7qD|oYP_cd~`nMx8rY*%+|0yPlcWV_3n+v8-J!NIDA`g_zakvhmeI7T!ADO z_&u9cZje~n6V=L#@0}9qaHEC25%ag|^39=3V|Mc4E#QlSzU`_@)m>a4t%)O+SWL{8 z4e<(Ibrf`s8Hn0+VQ6Nn!bvp8lL~SB$ZN)|Kz_r~<`_l{o5H_^QTRV%m;n3LV4{<7B*!-7rUUKIAE}w_(kMyq}BNt$GO7;!M2^64<{g7ZH-2 zt}|F$%xii<>Pkh3=;sad`!C4mYvYQ^0K5-$%Z6S(nB3ECentfrrXEbX%Xd&WFegs| zPxcH5KKGW>vwEHbt5=^SW6N{UM;Cc(xju;_z{12R8T*qb_bP?oFVmi{gBmuleV*ef z(p0T1XE(P?>+rS5B?Ar>T@PPazCE1Ol7Z<0_e#_9Z6mp^)iO({<)Ee~*W+>Ahtt

    QBBDe|@ex#@u|to#wBNO_k#Zzb?5A9r)Xj{DJ6@QCX!uwqo|Z_%iEB zB}~mhKP`G)akMC!3lj*gG#oCSya-+APl;!Yc3f9~FBwr|4tii(?}sIo+f)VXrXwaZ zjB*ltrBmyS2dv7k`PO~}qnw|&wM;8tL9Pp@OzdCipKk3eLtGjVplCVGKFBRF`v45I zQ}Rp1?&a%%8GD>I!B-Gkoa~^uos8Z|Dg5IM0EI4FYWb>s#O4vbrLCt;#6bmL_~yME z2de>D!V*BrqY!9)w#fd2(_p@L><-Zf;_OjtIsUWf#Xsx=aJGbA?4K&Tl0~lrjO&b zL0n}BAG(MRu2MCbWBDd_CCh+6L#)_d2f2DB;_2;R}XCWe53t zh>{N#K@$g}H!Y>O@nkBa0SxsUk_&KH;cpguemkQA-1@__&#=O2vj+zZEE&AO+A_1{{&+G0a+Gr0l%}#mg=IJco|%KiQQbR z+*$ek>K(I5Zt;dpGjzObxKfGJxP!7{>m?W0IgofomMc9fk==IpXI?rN&IDUq35poA zu4f+(hC&v5-NJlt0Q?W9FY-`qolrQj-V&iF1|cgR0*uDYKz^NF{&_Qy|0K(%MI@?8 zz(FZvFGxhUqrOsZ?}%l=YOWhSwcI&#S2{kVT3Qk<;GiDt)G+@*NEO8q?_joO_F7oz z=SY)c{&(_L(#yLv!-7e*L07)98^3p{Z)vKwvc-+%j~u0ZewQB;YSAnZ!04Fu(UfU3 zioUaIyZya$XNS?0zrWs{>qfJAk9>fEpc{g@hJCBKAIFmKgKovxo)>N^`)*Q$j;%AD zVO3+MWb7=!&${ND)kzD@25*qI>FUe%=wr}sTXYuBKSkb;q4=Mg!d9 zMOMw-j+yq9OX5XICc6dF4`!!SzUAd1}_t@C38~PShp+D7l5sD*CL#ELbe&VRFy+OuM=EdY~bHH zMjCD0YlQJ-?OSil%M^My?)6@OWVZg@P5KPZZlf4KXSw?;uZOFXb&KKLTKcTF9(3Tz zH&I$%x;O3Q)r)KjpNUgkp!yK)z{s?$q3DpIo4K;2r*LK~kh`9M`7>}bUwqLe(6K6a zsHa^X=BNmNjP$}VpIvPh2`#qXZwu9Uj)pm`*BC1hQaC6K9~mgixA+>AI&WW-g%#(g zk8QYg5zDu_X7XIC59s_4p&{(dB;BV zae{U|>_d2iVxTll&uhKGX|T<79wk5Q4)G$^JBCMTzppB*v&z{0LZHPqS6iAv?RGM% zOsHLfX12NP&Vf%Y2eK>+oPYDtNZH7+W~^uV6Yx~$YGMs0234&8`L;DSlDfgkLGEqU zip%-p9Hy^{mHQ{*?HtFJDsea8?8(-m^4h(ai8p!##b9bX!H2(_PoD)sf{PJq>scg~ z9`yCJp4p!Z3t3h3zxOtNP#xz$LTJZ9n|i^%S`j{&Ajq=^Rg#G!HraFlJ93%3QYZaS zT#P84e-MqW-}!)9WWu(3SN7XCtuY~*SOPy{C*?e8`X@?|SD5*k&q{l*TmU$SVnwhp z`*ZR7ML286Pp*;jzec;#3DOLl;W46J@9j+&nsfX6`*FW~v!!EA-Q0^eZ3|YhrLm@B z!iGvbUVk1c;syO)tv;M0Seq2)A@j3XU(f!iSmd&!jv~IkOiy$J%?7jv=n@D5 zg@n(UOHPU>r1?tRCe#h1Xd=iO5xkA zTF9`pg?~nddPwqRjx)A$@ar{;YsIyKV)e+2>UX?3FN59-b$qOcT(DFZ==}&(8vpLKy^PzhPJX#WQCch0dsO0(HI|gLz-Ae;2yneD zqHx1R@oGFO^kjOgDNjc9?-uI$)y` zS;QoJ^LF*N;;VU$lOrT{GkD4I5PNIz6HIs?@ANl4OfINx>yOto?#xOir}&PI~y6#bqVOo!wgX5#UrJnllq~^aQPD@L!B#`QRr#J0+f4Da39&Zw% zJ};|f(utkkVJ9)rzLFibEv%lFubQ~zNXJf)4%07-LsAxFfv%_t1 z$<~Sia$<<}GF!gR>idL_&{=_}r$_bQyWD#5v6i7I*aJpYKdjmQ;k7 z4~_<7mFv-gH%5}VK;E~u$Bfucc~zY25EnF>m5?8*RoLx9%1ywRK3zxn&p&M}+_?T2 zaJ@UD!bk+f?=m|gDPPKmHOs8h`Ep&jJy1-n%7UQi08Wiv-A4NVb!99t<8m$FYDMsJ zzX=m<3e=_vd@kC&&{WAb$^Fu#l@%Bvh3hiRk)g|haVtnYag`Cg< z$-?Gz~ z5_(29$Y0I9WNK~<2bNiY=8Edbb*WP|v$0F2hDbQ=#4~HKw+21sNSa^#WHPG6eC!f9 z9Jx_^Ra*W`iPQI_F6fz$A>3@jGyXpJtgX2~b<2ubJS)PgO}G8h_}3v0C+uQbi^=N% z_6Y}%{xak$LoP&a6d@8+RVn`q!Nr zpwB5M2@RD6S(*hbzXi%5MVgEcQ3eQs#TNnuS=yuE)ip=UsC`L z>+fQd%~V@pTOoCYV{hu<(wM*>$dingb(_uPwzFseR^xQ@Oibjk*@Z;VIC4K+(K-b) zY=$NZwl2sQEQ*|(hMu(v3&=Vsp%_f+aGfy$Dm*0uEwu)>^zIkuc*V}-MX;*rfSnJ^ zr;yWz%7hdtwSJLQ?-||FXS>kbA>KcMW$CQ}7D=$4PddT|MoJDd z?U3O^OM}p>>Mi#dSb+BpM+T(Zg!xgjyzkiEGo>Beq~JywX;w;XO0#PN@>kb7YNLgg zE^sgfeLjLT_UV{BQnPwsIH9j}e#bDoO+TS*y{64l%_1u^fA#Lq~rDgq2u&l_B(bf!0-teKR z?4exA+g9D~!|`|72XTnQx|bPqBdL9@MSf&X znVnx1^Ok?xJ)iBoPL!c$m!=e}bhB?l7U!lfSu1@*We|R2njU(5=)YKS>mU$fqtqmM zCll>WTfq~Y5Z3u^bWDVQ*?TWT+df*gbk*!txm4OLqW{N5$;s^kY55cjn|-s{3*)SG z$+eL@KJq|B89Lt&G}iI5)dc&Jb#)i0R669Ey^(x={N_{wldH!Gba1E4p<%W z_2J#ha{m{sXZ)UBfb*}*RC%wy@oTWRc(2eOv6kn@MTyvkyQa;-)-$-fuG3>82X#=zQRaXMe)}n5<5^-C$h} zNB7M&8INg+eS0h8YV<3Ie&I)q!<8&w`I59>&!ovUmV>?Sh#pg{eE-nCVw;*wdtb4W zVnCeR6~wm!xwW{W_{jubKDK=bE8KFTTxb>i;yRmp4vT1|_}Ha!o8cQX;;fiOq2{^W zZIF`-v)Kgm>IL;h>xi66y;lRW6PO?@X}-y`&sKyxA(wxcr6Mc$;-gO58pN{5Vi~bk z_~Dy-FP28NT@Nf`U8E4MHp_|XV!=m=Kr0;~=FhF@(+Z%Ahoh8}BDk1X%Liur~1fC1Te-v+Ba>xcj!-cBy57RW|yYrY;A=G%pjA z&32RQo44e@bN!BW?+RA!jkL9DZJB&m!7m7 z`w+8AS)d75c|;TNiEhGCIdZJGls0F0ykX@p^l_7?x~4_M*!lBq>kVzm0JRo9^{oRp zQYd*-Ytu&N47L|SN(N+Kft)VlKQ`kjL8PPN)94F7K$v@f)J6ijRh;IwVd)SRiN7b0 z_$mcTu1;?y;Lh29c*4DM)ZO6y;C1yyRD@!RfmlgpbdAi@+92DV^iM$4auJcm?N_*C z*f@qiB}@myt2WO83cCB?TF&^M1T(SjutOhs^(mOE;ekg8-Qj?LYXiy|HZzs!Qs)Ph zD^XUf6y4sAIglQ`oc7E)E!zIvC6;q6VFhbH_JpVZ&h_5s6jOfP7New=gGT->ulbxi zjV*PNP1|cZmv{544QT)RaB7JMy zL4LPEJ(2Y%#&y%gwAekMmI&R_O5q-VX6wD1pnCd4O!IC_W!yHnFb#C_LLt7JjrN?c@H?dEK*&d%>$CBpTyt|Ihj5UC_?6 zP%0Q>Dz?xFw5bd|jvZpx|DjYBsEh9@KS9gmnPjS z8Hp-LYFv*J%=HF8j^ znTa18&3^=|UAWQ$EhV*L%7XNVO(FtTqvGoUob2Nb1qP~Bj@*S zuRMO3|6&LAnt}SOK1ZkKAy2U42&2T(S#QfXuWVxTY-g{iAyH9>uh^XWxIib4^<`)N z&m?#+vxlxjo`I{?5OPyc+69HTe*qB~jH_@R=JjRYlZ%5ekhT~`!!-LB1PXVP)k}N? z((ge=<_LTQnkPwgz>VrrhP?RXGSa^w;h1_y~f?tYlvki{H29wUQ0qt#%nP| z@%K6vc2LNLI<;gm#NF(UL#9YBwciaD2@kBAH0$GspS@*omZPQ|ZrNyqt5;~3Lpk)k zwcmW8=K9W!$9g>z?oP6oDZOOy9$0Xhs5pPCeNQy;5{N$Symozh^wRVdww+`^RqRP! zAr~&f9bOA=@vl7fEOhO96ghU$`$Rm_5NyMaer-1$b8YQTceh7$96iVs+yOhDz<+F0 z-BCRh5mA2Xe7vyP%NBO3LTbmKyp_=)8xpqC@#2iIBi+LvjB^rUBz%}|#VH)04nMu= zFA1lfx(fK9ifWH|6QhxnH|99myndRjZt~UsaSC#Z=X_v$0&!2%2YYIM2z)vgZ`NmS zAn*E~df^Tc$x*8rtWVGjy*Z7T6|svz^YEn9oVyExvp4E%>p|Lk^bd{#;=R7C7JK`IrK= zYwgMXC5*Q%CGbf!c2Sad19tB$=^$kh2XX5F1x-4-2l49BYN(D^??12te9V{cWvA}yv3C{XfyPa8pA-U2*k zf(x^vL+;lt0Q7oaPI9mKK6>i98=cENzVND~-9_2wT3PH77kDMYtnDHeh*(H^^UD8C zhy#`(a_o^TGw}N;6R=J!r{*ev)HGQYbMmI(H-vsWN{PjDR}DKzWzYmb8Iv z)lw&=PkF-Um;8?X0y4kX%0n}hAfU@_^qNXy4m}SQzdcLF2Z{(L8&u-O-FN; z{5oZQ9L&=GhefECEjJ_b6eJsn=#90#3WPQ2JEP}p-`8aDJpG_JZYH8JOK~1Fx$@BW z%i98{^X{BJmEO>IsNdcoDSEvo2$=q`mQbC9iXu!B0UyFnM1J^1Dq=TsqsgXje8dIB z2UfSc65}aCX{l0(hVfTf5ty>kESNZnnfNa2f#qJ)`}`o2v4H&qb448Qp!{TKU{$T& z?Q>V^qig-4Y}Y1I+ynJTS%4$?PFLTNms9xUo{v=T96Q*@qxOjI^$})5v1?llaS*m4 zbL#LFQPJU*oqJ7siEwoG4;8EOBa0YRHw41PzO=)}bJvEub1>t!geJIBX5206T(0%5 z5H&0f70aAt5Gktv#cgCalH7BF_SFrnn8x?<_ej}_qWapjg4+6ebK#)18z&*TbM5=I!9Gcg?``$pUky~L6h`n6 zO$Tz?_+QVPX|`x$jDpH8AgAO9#GE zn{TqH_sBY4d#*7GfGXYuXdJ)l`l1B0jf)lzENQ~9WH+pY^=?&freO`v#5RM&k(K8T z`Av964ZtqvE%|o$pV$u}i@jPKY>obF0^sWh9x+`>rctdI@xHj84z&j-;g>_vFwiyX>DlugWz1dH~$-c%L1w&nmgQ8 z5ltfQ3h;W|vUy5N_>N$uJdKpURUK#gDR2z?rvr2wHBRz<>~a4Z0C|D z)M?+Q2yin{Ys=0|eN7-Q7FV*|xfK5s`Mqj9a)Hi67~rvJdvQ$w#{Yw@gnc6(E_mRP zM8MRm+iiYQX4trK`%jPG#`@7;Q1Je5?MG*N*H-)8tNNANexJhxPUop9Q=Tyeo$V~B z_;%StfN~qk!1I)QThNKrV9YA~IY*ayF;*V}$)R4As1G?3eX0w78?rXz;69kSsY-7G z(^K1-u+oV8ZC@3^b@N4c1@)9gTr)ktsA!t>w8hUS|7H){EQdordcg)BnC>i zCCf&9f484^CR4-PG*-yrUL9p`Oz@UBV%FPnHQGk9qgSv0V4Lu#*=xox0 z@M6v6#3S`Jw~j7zMxBld^TVyNK5C(Y>^P6R6Vw*mbMEuv%fZM^)r>&9)p%q!Uof>m z9}{cI4%&5fg$h+hnDt#-@@lo*W&mi*GgJ$P(qhv#1~9dn54KSgeyCv7d-~+OGSKVcgC#3gN)2L@Ovq&L1!V86UI~(`nvptW4h4X z)@yE8M0{;Lx5vu8=HWveU4AFL!H4d_xEBs09NsfOJbi~gge2&zp@<1cG%Z9(NnxbR zks0o%{YIM8LC>#*FHrkU#)s^2ud2tDW~uP#b5dLRbi9<9lkcI6qB4HkG;SvD5u5k^ zN1v#t93VS9)6T-3v`B@+kcN2A%1Nc4)H?*!A}9XEn@#7XPCpZ%(z0{R{%~Ojnieq;rw3yxS{l?|EqVi$HD41q;NA2sCLU;*D{y_lG&>yK_R+_C?p>b<)}A$Q?R%L zO)c7ump_~&k93(QO2%wv+&CanUe%AziBP}|JwLzF|1&PP2}XzzX-pqt!x(pbgAWtq zWE8dHqzJHiU^!rN%4<%|^&io~z4H4XPaSo@UxiF+^}5#6_0Zu8tBgT#K^G)M3Bn(| z9;G`K$#uYgL&Uc;onh3jsbJtaN?^er1uN?MJ;(kL1-p7@FTT6GRkX0n&l|{y&UB-e zH4jkrvvXnI!9TWd_29nVqO>%V&wXzC3-8%DuSmU`02J9H6Mo~)j8Ta$)V1pAM$3)Z zK}7ECkrz5EBo9$UkZ7<^wedj(Pq=)T<=RPQVz{!$-iY>ie@l}db@2k=&0TwyD=4s^`28swV#mEok6i@6g<>l_ZuQBHi3)kxKaIX! z#ke{s*~@u^n_uwlT(QRs?m+RJzz-qxz0r-(hDoK=;7O%CYO&Cns-kvtb8{@lW^Udp zy>)#rG;`50AwTGN-P>b=!z6v}p38*I{=*EJHFxQVR(a|oiStl+xiIQ=avK3sTonGw zN@Q~Iq)#EcuMoA~n*Q{^#+0*mQlFTqJc#zTAFM28EZS%w|1j4I@tKKAj_S zqNtdQ;Gl8^`PV1%K8PQ|Nc>LC4d3OS%=TIrbFfd|4D>;|X-?O*4?ZtxK+)A-(#4=% ziaKtmQ4Q$1XfT`CU_IU8fe6zCnLUUtbmt+p1yWTd4vVL->2PYw2_Y?h_zLgN4ewNEA|*htkkA*`vWs3EYNKJ>FjJM?iB0 zC#Hg0z$TAGBMl5CHuk6)b7A^__Ea|%tqfZh%nY=f;Hj@@B>yrWa_4=ZSA@Fy>|z}) zq)n64NWG5n{uST{3&8jX9|r*xY*KhU>4*tmyZ%u=2j^k>2pj^`q5hI4m9_asIYZH< z9I3s5wwcM1XNCuR=MNHcHfLxcLfd0n0+fek5@`49jA(~vEa*k6>%o8SvZ0TRF9wsV zv$xhib*M$5cc5Eitn+X`28fNMXE&!<474jZ58`P$TuiN1MdjQ81SIib5Bf8hq(&7i z&##fE4(j4>%XwrP`9iyH?)(`_hgUSkus>uH756H%FZ%7(mClteEoWqnIIw3LQP^ZT zPqOEOSa6&tfavi}%(Pr9(8nFUhD@Rn><@b%l`=!uS64q4=Y(2%pbwoJPmhQMBIK;; zxF_s5I+y^2BxB{8_2k-)y&6gVK%eQ_30q*b^T0?z<%KkI>QwLAOtV$?s{go3;y(!r zhD%~lp=T8Q1Yyc0>TxW0UmV}9B`oB$YR0oi$ZJS#zgH8Wb}dokv>|)HI_E?$^mHeO z7`Dx~@;NaWa-Ea2#Gt+qQ zWarOWv$g*Mfdq#XLSW)p2`U8I-U=(2z&`QxUP<+BX62LJQ9_1WMY71rUoFe~IU#!% zD}Vncu?gJi9n4Z8w;ja2rtauqjgu8a>{H3CYdm4wv2#^67lk%H!qm{l>V6b?LXBJ4 z)neSDg>@rk zaZ?SVPCAkAi_u30?G!n!PuF^#ooFNtd-h>e#iFoZ~#R4O}VY-$m!?U0`fDEXv%ySwBO~$@@&$ z+f()@_CXRY7)aQ)a@wA z%rAzs*LmbyH03M~^c#s&zEdsUZU(}d5}&ryGQV$}1QDi-H&X#Ke%}Pc&Uoy}qpiFo@pszHLwy{A? z%^0d5zSj5idzKz@JO(*2tI4jhqjH|QyiC_c6vYrpLn6oXjHF(%#J}|yj+Z1gjILIh zh84EBj!FLuM_ix(thwJJB#6wUe%hQ1+DvuArUhWh+uaERq`qi$ zwpiI6a}Bc1X4Rqp-!BtOLqmt(j*qm^VqveBLrC$A=I3rQCktNUGmU<3r(F=HFs}tr z|1I0o(+IE@6FHiDOj?22hz?a)W^;{Q#zy6qmGL_K88qNCa$@`THPi?rJ%R)3Xd4YZ zIx)I3GA6#77<>22k5>kV3`{R7-#P_5UHZq8;M*-IVbx#a?%&>rF1{s<;BvUeD$$|w z%s(`Rms;l&3U&NP_9N`I+tWkuD0QcY1s2cjk9?|fJKK=L!;$C=OYpwXjC@Y$UrS^G z|LN%*D`D@saExrdgW;+0@8{+osSamO71oq+9s*iK^_s>hf&Y+=eAuP5=k_Jy(QnkQ zH1pbuiPWXzQ-JVZ8i5|;TDK{(iGJp+eke565@y)vgu~oZP>_0_efU&)G0w28$-6qu zjC!5Y7$9_6+5g#6J8kj_Wl`|nBd9oaRafJgnSsmcx?l~@ZR^8&-Ho(Z*ul48BD%*O zGhOLbh_K#iYN;Wy9Zu=G5r(_kbYv0umzzH!*L=kZO%0Y%c$1 z$@l&59B2C2vi{2-q_3HonM^gCI}Qma&o20TK(AhWb)Bx!$ z)MOtSLM}Z8k_;&J%`N-hJ1tH}3Yfsd7RDuwjjtk$MDLuG&6ze+;h>lCGlyBlPJ`=) zt1eq3vA9;kx`zLKb+5DZ+O^hAbXfWs_;o#EmRmJ0qW;`5F2uaIUlz6`!{`yR$~gDB zQ%f%Fp?biHy;=x9WWNthA5Avj4bghsluGmP8URSE%0&Cfu<&=YpIVYh0@lrH0{hN9 z^m@)|hq-se*w(jAYbpF`9|!3mRvz0Q-)xfV9^v!yrS&NRa%wi#b3^Ui{HGjME#Hmr zpMU3SajBKSK|cM>_>ixvyFYKaX7?rt(cXGKCzYt)WcuOdHpbPF%nCVpSF!2)49qMV zk<@Quf;mdf+>DJn_jRW>zzfp_c!W7x&=vU*bxsCSX?#kW2_oQ;%^FD5#+;wF!C~Om zn^eAP*FX?pZa0K)DoERVt9w&Rt(MA6O!68#EVPl}C@(t*Zp#{@SsAxr6; zgYOn)==U#;!ouH#9Ylv2oh86kyO`n0WAY&@x(i?Z{|i<%rs>u2C`l#fpyHS`#p4yh zL^v+PypV+%<0}+15q)T7C@H|V=@|^n#Q@S|~njWVXp|r=- zC-S|OXZOta5x-AL7y)E#P7dXb^;x^Ca;~EfK2$s`=#j5a%-RgstDbsYj`91ZF!QUe z6-!m3h_-_+dBR%tkWt>ft05sBpU1>??=6wAZNh!4a%STiC!>-zC84|d#br&>RnYKW zdVnf0-P)`5<;?r&+TWO%==lqh+5UOz`%FwkHl>+dCo=4857zl>rv0WbpYPOvHY$MA zB~ZE-6R;a~Iy5vRso{UjV+(Ed-QXad4so%A#4{r!$UJQak!zOKci6{G26U^9=CIm0C_KJjB#pa^l#xb1(>>{LYo;W|HFv@EBA{P6HFV=VAJZJ@iZtN>5WM$Dlq!o%yEcpIb|I7(R=8) z;D=g3)63%n9-nNz&0N79L;Rr1HM<>6K;Ir9M0@XaQKNsg?JUURo>NTrT!laBqs5J< zwNHVF14|LeCS@6VmnQ1`qzmtzHw*NC$G*R!3(5v)6WIVQGGQ8vIIlk(NbI0mXVZSQ zNgqBT>#d&0+|{Z}ttkSJoreZBH;Zdvl zB9Y5){Ak3UiG&gBLv`=u#f~#yWWGWri?pFWE78gjt($!`r*%G^{U!_%B zuv3YnmJLnGUNO7{=YLqDANYy|V7c%XsOld%9ua9rq+>6I4#g`v0F@OpY*dVfRU zCqM(LdOc7>G$r%S|HIl_heZ{2|DyEiPB3;sgl%PmT!_W>Xtw_kwQVP=D-GdA* ztspss#0({%(hS{0dC#D}-}m?2dwU|t0T!JZ@*qHE6u1#fc@N`RVQsw`^Nem|_V07GLo}6Pv%YTYY3_Gdcz*SZ z5f2FzG@>vchs=sgYtH0c!2ti z-{s@uOPfErSSYZbo>(kDzUVhzE_%uoxj4=Neg4H-{HeBmygtacvZ#Xxy2H)WGD=uk z-@)^7r;JC~jPi#bXv-BHpu08oko+KEi+ZY!l_!C`-N5{o;eJ`Kx_BZxbcyqJM_E}e zV8b0leqy}|Nu+B&W%?~>EVC0B-CHbkc-^r0-pS#FVB2AU&myaBZwSrYJs@VO0Ya?1 z@Z<=`@1Qi;5tokN%ES3m|ByjaLLMMm)Aq7g1Zn)k76Qi zAR_oJ698iOV0psN)VXC>(IxfvR*NuuF>3C&U*m%GcI;X7!)G;@I7~6gl`UrQ68J5R za}{N@K;AHFV*Bu8r!QL8?+%tM#dCNmk)IWotk`n_1AHaxm8@$Q<85o#x+V@*(O(T# zR}(itT&|rY=y|Ch`6hrJ={nKNhFLtoVyx{DKcWRn+9<#YzUZa-IRDF)n#B;B#|Xn% zYxoYiz9hKo%mFwClpxzN=v0c_Nv|O@UsFL{Mc`tKO%eR^5y5@ zZ0{#+`>U__zKy}H`>Nef!*IjVcKYYlW9c%GV#egtr`av$jJ_W6jK%iYV@hWN{^t#` zu(reFId&cd#AnILZ?7)}b~wGkk#Lo}GQHpo&!{gVDXmFIN)!kzJWfvd1JJ}CuDW5&rm!8*=ZD29dT11=!XC@sH8T`?e|A7z2Yk`qo-nn+68r} z00FmdRvM5|Cw7qVOG9AUUBK7A#Q(-^R_y%YV6J6nBK9J!0R@zr)GwtKN9uRpGgTm)o(aQwf7@AvJd!i zm?fBgpY*iu6INM_q4r|8{gtEIk9|@be>`hMHTGDWDz}y$_eT4-=w$hu?YS;QYV^iy zY-#p1J^k2dQ{TXwtdgV-ND;GKU1?Zc$$0)W$!9-( zKEY)uHQ!rv*J~@&vwzlewlMp9_x8Mkebt9bsNza#l&$s3-0Yke#-m_~RP5_GrDKD3 z+FxqjC@?j9dld=?E=L;64`S*5vZ+{lVU#W1t$xyXWx{Hy9xeRl$^6U-j(y;QBSV2gZm$ z7444@qU}6=5_J{n;j>uh0m5?lsLClWp|tPlkA+djOsZa~0pO`>3B1q>70|B2wN`HP z=)3tv&6GIds{drd{5nE*qr@jhza=Q~Y73If_p2KQ>m9?m@883+1WDWr`19Hk1SA9j zuslyac-hXJHR5po8&T05#>M+0g`=&NGME>tyTlI>+0oC>5{O(h2!r9=yDqa@F93+Lof< zgdi?=b8Ov>D|;2KE5o9rRA<;I^{+mdHlvZ)U@E)QwD!&P$LJDjWRl%$t9*)4_XhRE zq_utb<>ZeK&4yYy$dSUkV^GV5YHyI$nO5u|U933ihrV2(tb8HDU>W-E>J?+OUqV2| zeHogd;!*4WnKMUpRj23=gZQKYs7HM%oSYIE+@E zDg4jNsQ9UV=CBP`zz%(UTy1d&g*1z04O(!$wEoYCa2jN`IbTm*ZEx}P^y2E|rws-C_fQI?mZ-nd5>6+JQo8bg zFTX3LAzQXb*BzkJ9QQ|;N2>MkrV3dnxmgL#q3!ytrVHzcmri=EB(0DM)OJq8U+X6d z77o)^=3e=(U%=q|gW^`x#`zPT(_S;igFMni$=721`=O-UE!tJbreo7tnaQx(FRtrS zb+szqZ!#op)ccZd{+dC)XN=IEK=H`Vx19m<&m_Ps+HNZ~hyRtKn!q8oe>e7CO5sQ0 zNEqH*(I+EOtsMW%(O_Ki7h^ zS>8NbVCl6KNH=W@K4iaxD)4PcuFJhr6Yfz-A-HQ1hi@g`J|7+7p;mp}PuTC0hAn1UsqY_f+KJF)V7B%0%ux!+s7Fp?#r(#*isH{6GhXUx&phh|!~}BH zG8t!X{GK??NjRk6V?Y(SI{k4oGUE+&?`yo5|2AVAVU=Q|tfnpD(c}W@vRr{!_il<#|Di%zII}E(NEeejrt*` z8?RSqj_>__l?6iW1n0xD>wEOQ*9yK+sVP0Skf`5yQ=~&e@NJDNL@${p>877L1K$eQ z@SJ}7S0}D-L3S_q*F+jP5DBHlgJQ<0!J5pYy{d!Y&8T6|(HH@#DE2}2!78O`Mg?V* z`U7MLa_R3}W&BunIh?!3MxdDVcDMpE{Z0qkFpQtyw~hafk4<^Z=xyhoqXfK2L(7ZL zkW15ydGhCxVaEdBFsn9R^BwPIAnoMsL=u>?%q9H2sN~KCIfyw}i_x@AMT7j;qy+wZ z2-B^4H%l7kasbHW5ohgpDA#7>?C*u{nP6aY!KC_ok4d2m9XSZoKS+Teb%)NX^J?f}MO zbVCyq@s$JWoMjUPjNCcFptg-_O)wiF1|bKP2(?tiP1PF=HAPDB1jEtTzQuw4*tHZk zoxMekH1ih{xBCtGrP!B(dN5M;6|zG>!kZNm7WR+p>!dTGMS&egbZ^x9Z$vWzkBU=u z!Y@x6;}RmBwzl6AUKyRll`*eQmNd4v!E37^0mn%H zSElg+T7ABhBr&Ee(i$l5Xkh zPimDlHv)2}Wsj=GPnL49**}8Xql{@DA=FeTVhujM#*o{CH zvP$1yYef`DC@#s^hOAR!KI@0^4>0Vp{I#Qcyw=zC1Isi>IjLKFG!**7_p#DNTy0>- zJzJ%94Ku`HpZvO9XBWz!NMsa82eA$n*-mndf4NNc+Px4#4_-bwyK@9v_cu01RE4jM zdF9WI=%+4i5GlP@GXY=sAggyV4|K`)=@Bqys#cIG8nBO!(sMiC$TB+vJvd{0IFz;j z6K;8|?>(GpD{Ui7@*m+6U^XGFEzDcpDN!(w*4nC(I;J%MQ2DX43y_TL4 zy^(jx?w3vNpnv~8I9T-OiC0m4sLxlpD)|rW9>ICYm744QnggR&E_F>}l~?pTaC>|H z2Di_L&$&N@c+E_nC)$ju{!47JT+=TUHz%|{V{L5@-(gE|r}z1&4A^+=j;yUDXec4l zcR(Pn%FW@-w@1)ZI_p9i6fMD?bMuds-+^6P5R-BJE=6y6=EoJoQJfKCh-ryD$B$?iKs%=Oi1rIhgMj-=jZxuf&V*DCR7r;0XS7b>+EHB~2 z*B`r>S#!+=-nORC5E`ZrmQ}KOQE#cO{N@}p+yqcD^8d@W1q2UvO(Kd`M*qDQ8gt0TjsDpz8Lg1gMaIMn-Ch z3i*;4b>tU2Xawr9axbPpZrx0M_SfLB#V`ZF7at_0Ox;%-Xxmv-$K^InoGR-NdGOn@ zv4;wIjSc#=gHfLk+WGH>6lUOA5!qCbKs_vr6wEM4h-y-}Tlp)O2Osss{C&k&xxW&k zmB{sZw6p`X=)_H7!g&`7=3|E18Yy7c zA6k1Gk^wP*G0yLoe*`GK6XFfZ>^)AxIu~)+Uj4LjCr-{NI^1!Ms*gAdjwU%D`}bWF zo`U@S>h4U8-p#gmh;OTUH6?v_RD!o!^*zsGowt<M=GWh58?V+E%a{$V^4pD>B-}l0u?ZrsbMMjpFu^r!J=b=szqw4Yz(Ptb7-C>#(3m? z^J(k2<>UypA_W_DyIADWh8R^%=GCQK%ms9ej0@`u zpBTwGc#Hf#SrCX-O{86Six*Gmh%(f9>t;)rEdu4vC;Jcr$*fExiFq;r)QsbmG^Lv7>X%%NDyVYoI7%StHhvAqi+PFz#iEBH3Fk zGPdq1%4E5wJY)D(azG5jPzWC9iR6JQ9vm2KCXKVbdoJPx;dHu5ywZ%S8gqkqJ3wt~ zT1EMDwvOc7)X7Q(+6_QV4;xC{Q+%%8<4{GNh-bO*I=VG4SsPS`&wgkU>NV(r9(996 z5|wX%!WfU>aqRk5uyOrh64;W_y7yNThb+*4KtFzy(GRw9W$4)`F=@*1^VP; zr=#${uD=LaW>+D9FhYDd%;3PMBYfh?PX~XXeHmUySn~HQc!qoGIr5FxSs*8`i%YTw zdkwm{L@EjfslR1S*-VOgaEuXKZ&bo!k~eBs%-h5deI~lle(Y^zbi?`6m-K%F z>Iha1>v>P@TYnEdw0^lf@Gkb&vv&nB&T&@{iO{yAqi~YDfYMTKbM9L{nGEe=Xc8gPC0XK4AKS=j0GeA?pog)1U)}~t z1@|9D>M=b3i;Ab+^XE3w%eSxzexiJr>9$?t-+QgM`yV;- zH5747&XIZh1I6)VykTBGCm05k9X}`3{X>#8eilWWkr(Y+6_czUg~sfef+1v+*UVkxNA{#zu2E0F7OGoLiYx~{n##A_T19NFnIiSo5TAAn)z28!D^&!4z=WzNXZ-0 zWkq2W3OMX%zJ(?4tlz6CE?%BJnLC?!r&B(inr6of z63oqkL6${{PRba_L?8Xy$)S=t+tUjQ|4zwVWSd2YUmmOXvXcai2V51@VZ?xG@9cyd zf)K7O)$F0Q1hKf%{w`%Q*;^{VPu0!^HDYt!?FxitxoM~LJ|B0{1eN1pdh$kIJ%ja) ziaGpyRnK|@{>h$hT-kR@JiNEQUw5$Z@`wJ{dmDbabwVyle5>SW>_D%XE2Robivn85 zzWQJ9C%jC8{l>G@#jmhrS{=v)k_1yJ;L?7OBqelk$FvBpyGf}(ES0Y2UA~u29Rb7u ztP6t9ya13p62Sby~>0 z3Os6AZ7#z<_T(M0Zwe(krwgT$riucJW~OFFcfcbF2h-#B_9O7&K+Q8G_cMIBHdfHc3+s~u8?$L9<4G1&!587%8k0?d!P#*A!*+#n>onvyE7;gnPoyiBrML-vY-6;LK$fjao&K5ZJK?c0-bKbL-m%BaYcax1a zBZtz9FI3_bGoAO0Cj2aB^l}*N31%3^I@3HJ5>@0E)D!rtHK-*{y~z0X3~0Yf3CLY> zCHF}%6-j=QO8H3r?av^HJY%zzH-i^ka7|LR*U6Q6sINp;OgJ}F)N_bsQXyOZsOn-C3gjfy*o$;|FQ8qi z9syywZI-$W7_r}pCmK`ssW-LzdvXuIfY`iIvT0N^gCgN;r1h~|Xo{2Q*M5X_L(<_2@p8+kcqw?>8 z4^58e&|B_|rZbmfLuS#LMPoX(rbkDUo8=f&FoH)_MH(+aqBTS55WN%IiB0>#9w@01 z9`5FVYFU;n-Tzq$8B=0ktbz-#E_K{icxIWNH!@-UrhbC0^yaY>O5DHxQTJv0{AgT5 zsq_Y)AUt$zYcP+prK7CfgUBUesY#d?z<9@mXx;B1$dNyyN6wuxni(Ie7Z<;12KF^x zzNRKfdf)MTx4w8l(Y1!<>($9KDI80JOV{=hspt>g)Fd9zJKn8c&UYTQz07jX2@0J_ zU|8A}`K3HF?Kx9iw@3n(La9!4Hz=#4ZYu@4Qv(@AcHUQ+J0ui$dyp8w2OmTN#m`+Vo%Ln$_>rTt|}KaE16si7U1 z#G31~eN1P!ZgCjSnR}=G=t#^jD&8!qEeLbzh-4m~m@%o0Llwz>iqHn$R07qEjcRZ{ znjrGcugj8ifi|>hV6ESIr~-E9)%A zy%S79>c-Yf>h|p$4zjkU?CtKGH1^FVsRPT|d3#?c)@Gh1XbniJ*r%U-qY4r%)e`TJ zR3Jc=q{$ZSO?@b-O{JpLrwBN%`4xF>-I1D4e`G@Qdl-sC z$hKc>8h`qhUP);o9-`9qy)h7qQMaG}s9Oa+j8fOSzpe-x*6NVVS!U8k6W^eEsyAIo zi7X4uLj2TuM(|Zb5U_1?K3&?o>DUn6XlbzkS$O}8fE<|qjVoOSywxce8`RhS(mB!P z_><1rN#S#VGJgyh8@Xz<2bN+G zZb+RZrqTEGyQZ5+jiDFuTL7po$yr@!Zndu!8`*l-Q~?v$a6#j*-J_~5d!pHg0<84m zvZ_LtGhqxO+D~Ls@f`kKMCm^&A1EYIB>P6$N0)6E&)T_AUG>!J;%2OP(_=GPPS>5) zPd=C0geWVa05ethsLwypE8hE*c^2Z=&-1A2Nu;5vY8Zp$|KE38PYCXv=!7&;AP2s^ zVJ;7QV)l@^8dBMN+4jn=Ii*8#>c=(cu6Vm4JeTqA&U*Qrk8;9AQ9u^3ABn9F8Meu% z>iIH&*1(GYb5B|DCbeOC@FBwYE{|t)e_NK8#C8NF(nzlT$!Gez0XM2g+b#*Is!Rrc z|Lm+j{(T-f7uD9#rbj*8I*}e71L^VPi{1P6a4R^b?~7+7b>4ahr2F8x(&r+XSohSN zFn2_j;MBxJ_LZuzx}t!Rv>VmmP?CUcp7Tk}scbcEcO^n~ds{|qu3=b%N(-9qU}+r! z9>%5)9D`MBAP+5lFUQklnji3d=*hc&-qIk37%O<)$&jdV+;-mdz4YSiX5IGp52lO5 z3LTOx-;i~d!#I7XKuQYHZc#wsk92;OuI8WrfWOkvuTT&3t5=68_E@9jc08~? zSa!hzaA-UG!#)Cjp>0+l=`H*~kUZze?RDcK@;5Lzzre3a%frf-iAMZaUR%Uyi0G+A zv$~2RLiVJz+3xi?2U}i)Mtl+-ksBGR|Mu@^Lw=kFpazmMwhHjIH>#gkIH96skjH1X z!=!$0%y;;)cHo9@ipyQ-n8;0eZA0mEdZ>5G{V}fUrv!eeir8DmaXTRnN~9e`-pWTS zU9Hv0G!NzxCJi+LMZbeeQ??=3RVk4WY;%Ny_TX>}HZfg5!15VA)4sYHAvZ=uLLkAi zP8oa?aTln9g`SKAkVrogK>ZASCGi^$TzI`T{|ICdFzm5iI%MfbdIY@PeVji`Toy4l zB8P9y^dAf&yJ1CC`sbqvxgAwt9ztq8NTT30{P{5C!&O0sG#P0zlh4;Re(UHHuppNE zII?-^%_V|k)^&gImJ7en~- z7BKAB+;tzc@a+}2c$=WPn2pffFd}ahHE1Q)f9_(!Ok?&Y_xpu~2SX~&HqtJXi2o#X zU_QnFwood~($?L2(RoS2&4$*GeUjo!1wSs?2V8=EJxiNlS>?g*a)YwaJ$EjlaMtig z7_EnqEac^N$~;0xEe2ZJm@i)*sp}9q#Nl(Lw*1(lSwQoDGBz8iVd!#p;6mNkJ^eIJ z|9++PTC@Tp#2whz0B=HL=^_1SC9Ren&@Bx}RO;g6b3%00E6X%=!$L#vhEwS`8&LRI zUUqM|>R0CSS%yaLx8DTVHr=(&P{ZxeLyZTh1_&z=^wy+x`r(>cKhfKZPoHl-F<}1^ z;b~5O*wHj&&lFG8v3al=t={JTHA=jwV$&zr!Pn9BsA_kMBdPstYopBwr6#k?-EMRP zdE9GCvzTG&*{t0iiYCoOR}uEwA3@M^+(dcjsA9${mxpWCl89#J|3(TOi55NWYsoz?E%)^9zrR3zm>`%u@0v){7Y51VIQlF#^ zJ;;*3Y`F`!ylG$)KHBqWtap@KH!s?^_2baTxy2?q0KYK<`&(K z^>-;>%nTBaLz-L8=->_v%_SM~XFqQ~_VkwHS`jr0JCqRg=dA3_ew{Ji#@ZfPxrM;d zqd|(XK~uKzuGR!wU;w?AsQK^P5~6C4L6%>ecX=`T|Cezt4HJ?$S23J-cs}h-6SqI7+Mrwtv-D7 z6&f(PN3HbC#Ig1hU2N4vyhY}tEE9t8WeL}!v5L+2d#OT%j^)&y!BRynoYHm-V8g8# ztkw?_j5en1mA)S+7Vkd=5p6uJbpm_QJ`LYfZ&K%4K|oojZ>UPW-Yb`lstxdl_yqZq z?Jt*lA7Wj710AeugA+ArilA%3Uwm5a8Se@0Gnck`Rax`Wz5cQ%XgDTM=|^%$hS`dU zpkEx-BB!dw%mJCAL9W-NY#n)>| zWcP_*)y(&djt5SSr0n@VXLd|R#Z;JKkSTDU;r9J4dcB5XRm_rPb77o za%N=^f#75wDqW-hDhH(mNXkbIXf>>{*M`HbNr%8OEf_o?`2TZe>i<#t>OX_jJMnog zF*Xr^AP72E-r|{Ks7e2jPs_03>m;Ile{iYb|92U(|2*PlZ;+1uUrLW`(O#FP zodKY&F;+_He+%LL;l%i5_uH=O5tr5iNb=Q}D8L|sD**1NxldN^6DCi}9aUEQA2JE% z$87zM>Eh*WeY7N1b2pXcU1`e&*OA0T8YG4bFgkjd@1~BG{?qRC2J%$3uz|GEyA_*V z0@;1Fs;H}^9qtU}v$H+@wD%iN>Fw>zF_Mm^09d1}ME;e}Fq6}p1YpEZpNJj3cO!`e zOk!mm%%~&5&LuI4;<`Q1=tJR`{wr`{0fy^P(D5cjbVkAOj;)#t#`!bSp74x-Zc=z{ z=JbBaU)XC@<#+_@90owZ%1ft2eKu!4zKYS0%bo*i6i&wph74MCT96c`Jlo{k_|NNC z^oNPykEWvC`6k}dCV-I)yeQ*hvo^g7c*4juqfK1Z>>^*euAwS%cv~O5gg@Qt%`VMuT@RC7qPIYIu2Ds2qD*bIr<9kvMk8j)nmt9o zZVsw(kImxMM7eI1KNFv^;=^P-$gzRR2M}R|0ye;DVk8ZApNhIR_1X#~;|<>J2=}sk zbYY!z31q$PP8ptItk{%1MZr+w(}XWF1=s`@?@e*i-Dak zqhTQ>noUUsFPWU|F!_48)ykthwe*dv&vSV)&5C>@qg+5qz8^6ka`aQdF3`%wIZar7y0-AH*!w*#J}BSV za&PzUD?`s2UAt5nb6dZ)riG;e?_bi;SlBv1FCud&#WWU-UAKT2xm>}UN?bsKYL^lD z$CtI2CnEseSD5pJJ4n`OfW*1LzBnCC8dhlj{ci{Z3m!pD5DEaKFp7cu3vMtX93VAe zT8_ZB-u0H>0G23$xr6(w-EDB;A0Sr*@Kk|h#^VKoO+o1O;KPAoZZLyZ$Fx9oE(b03 z&ib`joToj76~RoTe^|-EmKrU0)r7^29(s5(EZb_|KU9uiDDoT3|-Hj z56IR34;ksdf8d1P0~``y4EG)H<8WTXIP2M_m%v3zgoHfrAAvDP;ShAI3cMf4ML%b^N%t%pz4o!IfFY7;W*7!TS>}CNHlm_lXw(OBm&RVVfjBN58|A0n z?OAF?rbeCUkiDeaKyVHm^hO>tKJ0I{=;X2wFZtQJO;Rw)|MxN{=7+I@eL(Q zz_-XB$en&M8&6m&@|J)(2VjQwj%m>RcK=jzHhddQpy zpwY?72O08a@C(t)dZ)X`^8&7;%DabJW_0S*l={&yd197eXN}^UhTe3>#6fEtG1z=5 zF`9f;Q*JsRlSb~(zANLOH*%43*@C>S-aPolhG1uhdVPJluu)nzNX$0n*1B#zUEpLN zBjbK#k;c0<^Sh_d-VW8uJ4)L5crvl|=kq%L0R; zoz&5!96iwEn?85?=nXw@}>GYH1648sMSLmA&w(xbY%7H1afVqdIBr&(fce~|9PU8{xt@T`f6ic+>{GEo*(*)W za?u|55>W+(MgqXxG4CKGAQ~ePWzz;EUxCv-*QJ?%uKISt@EVS(ETS&DADSat-+n1s zdI14vs+q)AT;E_sP6p|PZ%nM(ybF-e6jz)1m1=N@Q!?n zly?kN%>dxN|0gU3mYtyMbq{QkM-l*zm*5pP3-0udAsi(HTjB=3s#x`{i@teZ;l|03 zK{rMNeJv@$=rYARoYo?8y|atb6Sgu%+H9k~&oC@vvX^0`&+qVts_*3TDJBB!d@0ZDHH4B13{#_S=*w}nm5YWG7fTL>d(U9WFAwzb&=~yr!8Uj=@<7D`ttYf%!rZS z=j>A_RT?`cG1b5JsjuLNG%IqA>M#qDy~|@b02d~1F+6PXQg&bSI@F^Bpp=Impo@oZ zF43c{;2?2XmRo%QaeO4Pl|O2?#G9-J)HVI9`l`g5m` z^RJ>6qaR#;zVH8n`1{KsaRHXXD`J4Qj+`H}^q-VtscG#eGgswrGi9Hd7-?mGz*Ut1 zqYF4ZoT%fx$cbF8#^|N^6Ld%<27d5utE6Id2t=!k=W(bwLydJk4XdhiP zzDeG~oli9$5Y^Fe&ps5!KRchs+|LYHFHXUB87`l8yE9O=-+|M4b~+(IGW0}Aeuq@ScG_NY<6s1DiHU0(Z{azfP!1u&;h+-U}z#rL?m6PJUXv!c*Mm=bwP@ZZv2U7$x%s9 z=adwFl|~y*=;5v9^Cppy|6(M@3RhYpDeY2)R3*o|7KZ+tk=SV8Nd$Nik(^7*4mw<5 zgp)p;5}+{F8a{fMc44ACaQ2W3>VAh@D@NdGiwb?d5_F?F{GIm4REtW17v{<`nX1PxP~LqNKWYCA+&X__33S>zx-lhbfl2CeS}(OX7ghAlujX=c`9J@b?*$nEB(dA z?wiou;u<#1u6{i)!J&x0!=Cfd&wS!|NhnmJoqv!On$?Z0&~0i!n4A~IBE5_d=Bi3A zi9Jc?Onf>I+S3_%i*a*E1X&%VKZn?GOgY~ zqCR%1o{ISR@cP@eAGbe>Y|ei>SUWY6IsFlI`nvJmv~;hTaz~lPtMsR8II&K~cl-`Q znxDByJbBy*=kYArFD{k)G@;grl7VecZP`lCmaR7$N9&zlB{9>^+WRZLjdkW`9Jbn| zl!4`^3UsUcM&bynlJhP{yqiuOv6pghx~K!CxP-8MY(xhEf!K|ShK#9D*Q1@H!ZI2> zv%AtRX3Wuw_Xf{S!mqG`L$ zuBp3dBOZPNThQCt_;Gbi2m0$Z+Yvd42xxex3Y$JYGgxCH4KP`^EWmY9;7ngmK|?ea z0?(hh6!An?%?*o^^L9(k98+CZUH-g!bF2D%_Vzo@-~N} z40onU_wN^X#y4R@&4=?k!((x+0yM@Pw|NH8?snYZNIhN$$+SwI+|qlEB(D=V^zEe4 z6|O9OF%~u7!+VBE_HB0~D=I{$i1G)nNjz~WvcFSHTz0{O|9FgAIc(OLuC`NL z=~57Bo@4*plsq5dZ?Yt-Q(Z!Uca{+7tI$a6-Ss?y#YcSJ;$;}FiPutM**cyRQPHLs z8$r1}eA->Wp(RYT>Y`@msjZ~bSr`+srm*$S`Tpx=_281(8f!A?c&&+53p?SrsT>Cr zzx6%We~B4$Ybxr$$Zz@hJXAW*2$X-WuThb?^(=kKXNhf7BXBRzwg09aV^f;kJyYSO zva`=0+qYIGYgfn`35XmB+^b_dGR%{UDD2UV6jrVcsbh9$p`Wn)3>h|mKqfzn9`iss^{ZDO*(GQ0nw(I733@3^3 zx#Y?jQ>4i{zJD2fR~c*b@Wput{+GeEM~7-R^3pZ4lxvQQ<-8zGCSbobDksb9cjrZQ zqMFDyPEmeQ>IU+l_#tq7Ft9rTD0CkPWlGVO+~&lI9@bRBq9vNNmQ=bhP6m>flQDRa zubgo*Ol9VFmKO~YdADP*;wREv>hp~r(XjK4$jVnmCOai+@JAxVcu0lj;;K zw?K5W_4noTd02Fek@vhWbF>5_h}t?~C(cpP@@ZQ-(5R^cvh(B7)r~8kVOd4kZ*H{FFzPT4WzIX6Qq^Qi02ck3)ya-g)d2d83D(Nc3f$R)?^MzaNx&qx z`@W0g<+$Qe<+I&UbBZYHyRD}r9V5x*f0T>ka(#lNMcBMjc1GCP&Xxaz&$W?`6e06U z*3tWwhDlus4}P64-l+8!J|b|SxOG$i zLLzRkW7GPVTmO*@7MWR@)EmnH<#bN1W?N;W%gW>ZV167+`Od6C&R+`H7UmacUo}?m75$ka9abxFxN%vZc9mu}PMq%Z>tRBE!>(}Kd@f=t~juj^#{cG#aY1Em-) z;)gYhl2gnW{euWO6jlL+jh~w(4&&J+>pcP~%Zbw`(8_F+^PN z?Y*_C{v^n$dqmzQe$E4Hx93&JN#4`s5s{zGXn9T9%iU-cN5-aI?|PW*IXKg1PhSPZ z!Qehm>pjtYa2OZ{Yw-%dH?#GKJ5e(@50B;D*L!s>A!OYrdkWaMFY*A(pG(0+P^Lz!?N|0jz^Z~3OBL{jK39dt2Z zrEKYQV7sGB#KBI>_g5wg*E>$_{${Kzb*daptX5K#jwe5vxUm7b^OF7DbHw_mQliPT zuTqe+Zznsb_4VtQv~rboUWW$S!(!cd!t~rKjp%8SYS>$VXQpH%D3#;gL+a8dQb3KZ zRA6L2-bwY-@4`Iv1unRY>BsuX3vLnO&j8cN^64Nxio>>6`FQn{BLn5scY*3s4b#g1 zNpL6T9jDq_$tjnhBe!Tz(&+aH!M_w9)!m|{#|m`+U2>nSA(tk|+KKK zW3A{8LP)m1S-1c8vD*cc_t}iQ_cGi7pYYLjY^NA>5f?@g01RN z#L*7Qrt^H&^{R_?L3eLNN5NMBB61SWc?KBpG}k?8)8-fJA9c3xU;Gv)XY?C1X9`Tm z4z)h%rc!tz;g;jv`PYZ5GjT4fic%SA1uJZjIiFwKf+v#!5AJ9Yy#8CC3viD9_-#N# zE(8}rY-QNt!Emjz%?qg*MCV-x(s$7B!t7^|?!}e}E@+np5Mk)iK^X78uL{VC%6R$K zZ=G723KT`7$Z!MlCEkoLbk6m_RnrW`uD0N_5Gmfj*)Y$anVC5{Gh&;^A+?yief}#UTrp@2~ ze1t19+O$&JD`;9mUa))8$MD*Eb1gd|OZGg!Bn!(&QF8e#i8VfAo1QJ?(J=Sr1Mvmp zYoU+W>cZMAHNq_~$(WK_f3LV4R54x-&L`M9UlfU(7yehQplc4Q5QNfF1pLGja6u){ zrm_I+Yjs?6?^HZG^C0ktG65zQ;26lCHqLX_bO@$HpdZ<`aa0Thx3!%1)M{PAEJ!p~ zoG`{@CoBNHfb~0##U@xchydT=GZKUOJP8+W~^>2deBiA{`mLC6oA$G)bz;WDb)eoeDT3ln~VBQ zb}gB*kUHz>J5vv2_)*U3+-R(<;@UoMphFBwJup&&P|1AfJjvG7;isl=1gfI0E%ViQ*&(-#j~w(f9T{4(Fr7?=a?8 zkJOS0Hr4wqY&qH2@V$+92eG?&7$CF(k~T*A5@v~NLRS#(|M1c2!P49Sd<(EXnn7fD z7?Q;Ta4}msrjlaTqTDIde@HuZ; z&p62m=gml;Tilsr2#36*nUlS6d&5p!rFp2x#CqOj7I{6SPU0^D{Y>vtqpnVQ7$~u& zy*VYrTkWJ|h05VJQQo*NoNfTx)q~EK8?D{I<%E79xQwvpWL!W?+Gio9 z&Pq2yx0Lj461@|)EPH5v()(%YbMCQJTN@N-0W`dQTz5avGVttX$(L+^Q6|RmA1oW7 zPcbGA7a0_q`slqTbTIe!{`R7*`WZp(mM-D|yq#6T!$CbF`WUR z-x%J12|5fQ_a|f9ncHiFMFpDq4{F{n1$Xq9KqgzoFa)Uk;^sc?+h)afDW+eU8Vf(> zYwgr~mqaY1TmrI1oR?)w2AC2bkmBHgEu5}CUlZ(^L5F0)@^OhzD~m4xs?Qa4gx`LU z)d5|OAEVS)M06@WiaeTD(+4O}Pv<?^vDK4_5Y8`yQC`wO>TrOC@ zV#&QrlP%c`%q0h+7iX}l$3BI2;v*`LU+`ZaC{iR@(Q0%86Y%NDGXGq)9;I7>2u-zqjiDt?T z3Hpn21Vx@n2jpZ2+_;?Pu()1c85Jlpppd1F44l)$=a^PBkjg*O?sF_>D{4E)$t00! z2;Q_TY8CChQTA;v=^oVMNBQgQ7WtF$D#Sj*W85*vlXk}5#gidw3@FIr05FXgw4Hc@ zwq~4|ViBhI<+J$H@FL{~I6w9I`RwG({Kwn3&NB)HG$fQ*p@FbR5N1dec`2tU2uEw& zu+yt%=7U-xxjwXq^>u_gUDn~+PEoqAZmh8R;Oo8g&F;1y4^g|!>v^kt83(Q|8eIV6 z)qFJT))IyOea|fuud(#G0#bKo_Y}pnRPzlkr5r#8mB@uzWFcOr;fcN2 zsbIljALM4`^36MFIkmr6p)gkLy|0##0!#D7`nVXpZz)6>Y5@8_I=k|CD8GLn+1C(4 zjf5zKkg}FN$(Cj8CR2hB0IBZBi z(~<=ZktJhOx79hJ_mVG>=VD<$AXRpiR$ba{bC2ifHi)IhY$dpKBQ9ExZ&u$494G7Bt8&{H*1f zQd96r9TRBSIpLV)x@$9C=^tb;%~i**P5xBWBiiNiucHLyF?Naxl+o$K$v|04w7XtL zs3jM_0fTy!(uwO^J0r@z$o!;NB3>q1MX^&3^Yz8up3iUQ+A!ib4&sJv^oF0H^`UEV zUXr6@@vNmHD2veDC!)O<{R+n$=IC4WA>z0rf(Z)@#cpY*kH6|j%C@4+JgvNyKlBfD z4EgfU`kLI5>PKa^pQj~|S>VGDm?CzW3GqzBx1gU7xYgy~TMN$p`k1b8vc;^Hwwh`T ziZN3xmgzFO`mAsXmpiP9-L2J-q-QSB4TQ#7K~{&GVKzbi>=d9AchB!_A>W@+jdW?KykHaLF%wQTvCS;#K3?XzLkvBHNhPRH=K2 zg9>beaf)w4^lf25PZZi};&!C}gKZ`VTa>b@>;B^aT|K^T9?57w!%HgvP_;Jb(opzH zAENvu`7rcxxx6OS?B_qFp-01hv=q~wo{_0wV=wLRXSMK0%o_9A@Pp#72FvxuM-hGu z^vBXGE`9}F!o4muY2msr5be$`jMs)X;TUrV{`~w8JHu4AO--+4pXlHdb?p-?=Y^6b zFhZrf*diyM4UmU>N2?q%iV*Qkz@UxB_pVy_-l%C>FK8eLrxmQ7Ix6(Ik2p*=Ex}H+ zbDVn6bsb8Fu=_j~4`+JA9aNVAvEQ+X%N}6b>U<06>|j{DfT&qfr_+iQqdzh+PrN3p z2($JWdr>QGyLjl3RReRc493*X9;LBbpwIK|dr#|3su_;ie*we(iWt{R>~zBV)yHZ)JWTFriAG?Tiyufr-j-P8)k4NFl3sxFp5tL7X31O=O57_ zGs;*$YLFYaVk$l?Lt@XJR*}IZ=0<`88({Pd8lll5d&3Q6YqZPz>#g0zJ{f{o)lcW^ z{XrL$7Uuv=Xn!o%vG_u|Xcf(y6k&0o0A-EFKRI$?k|C`B!&|;ELwL99mu3h+!pK9J zaR$S&{tV%0e(vzErB@A1C0OD1(iq?ga1PLupYyT7HD5i+qYByXw$e9ioPvSd8NW2N zzRWw1fe5_oc=U*EAw}{^2HZ>R&%JtP$yhOj;lgh&b^b$6)x7HuMVa5}if^u9 z^8(Yj9fMoHgvvK8R{cc}@El`J?I16`3lveh2((-R`7`LRS`oZzP@_lp6FTJP76i`;>*eEnp`h_0_s_g$gV$;fr&-R_%?AS@q zR5=9$et9ERd6^IJ`#)CKOgMiPA~>VN)|!BmbAY^bbG^LO-_Q^wiHd(GI%7Yb=Z)WG zwRQY~G)WaKe`Cxda^g8`VpR^WebVe`ao`!5Smai?o3)4eoA{E7=GDJ$(t~5 zEEA1a{?zXi!_1N6--(=nTr?6kUojy6+5^s+0W0tMHnx0RoB=b(J=Yv6@?c*L_j6)f zQ;sX>_`+-x1^wNr4Eg3wZajrPuV^AY9Z=9t2|hiIsj0SvN->4g!2$Fno_qiWZN%Y$ z;H`;xC`G`?+r(;6)Bs}(m<=Uu`Rt{fpgkgZ?Jj9%52o3Mo*C+`PnkZj!N|S-Y^d16 z3cyY#0*6UV%$janqofXl6{X&wHJ)6Hq0`8L<*S1MhJ#}9fXj^f2xfz$_@5+~_Oq+| zgAB&^`4FSA&F&`Evh zhxT@55Sm5CR(6Rn(#SNMqQ)iDT}t}dK_|N27vCGURQh+& zZkhEvXkWUdWa;}*wz|0}hgzUf`NNy~Gg99f6#qksynQ!KO0f0cjA3OOK^uo4@8hSY znpO&4C|{GfJbzj0(U%BqmrZR}SpIa(=^Zv}6_N#UAO)*cH!D@OP8BR@C^9rKG;DH( ztRAnZ;Lyo@beYFSyto`pbm@mR+tPoS>{JMmE>e+L1!1WgUv|W2`R4O`4SP(+K39>+ znU)bV5szr%@6(s_1_G4X@Di9LZ9Ei#KzO*j>(OYm#(!TIcw9Vki(exKfOZb_@fv=?@6t%0ZizB$E-@sU&`4vKZ z#m?u1c|L2AsY}i-LP%x4rzbE5=DsjSFugpirH|5`+1k%!PDH6j9;Az85mKyb@#|1J z38@K+9P{ITa^d32EVFh7Xr_hUzpp7j<0N|Z?B-*pH!8eKnU`tNBab3IAP3Wi| zGN8uiN_?9wml*zCK5Hpx_ps5yW5b7%S|>?v^c66=Nj!GHgcNg;7SthitXi@DG@+mA zNL9V-iPgdcu8?oL9oYcd!uijM1fTTpXV0IP*45ReIX~__Y-33rKw?j57Xw=dHP4TS z1ETys!s5H;JA%@^@9{&6L&w;)>uvASSYv_=CmeiFYuQ9_=K;W&rSEB9n^Fn`}qd-Y-!+oY- znfEm1`%e)CnTTFz7d*VrPsqB>l%2$%#vB@4C~r8^j!(jn);h(&1Kj98>TFkOznoQT zRi3etag$6sWtaph0P@trlgL3MxC#QQ?s+x&6i%&iE%T8PRJ8~F+BoxOa*kSv8{mM{ z6u&;=a$=)-d;87RO$_xbNj*O*~U7>`E3VImne*_*nie zIUDO3a$fJ$5jy6>W(J+b*03eVW^;jZtrNOoc5{nCdyFG0ee#;d=Qnovx6{lyjVQ_C zyYhXN7#`A0Z34&g!~FXlba=;F^q6%YKYFqp*9X=(4N~tP0+phDN|VD7ZOa}*D`}h; zz6{EFg-$wOn8c`06&m z+PM+t`T8xR2c3cZqqQqPlkL@-?4;pVsGJ& z1sQ!5Fk3%2#*67ujZ#bo>P86gRWGlb7Otbsm%4#AV5p*ufLXG+$BVp!nh349yXZYZl$a-#MGJff7;9T>p(zF=&Dy>r*X$Dm% zHHwV|E+4iSg8Ol)@siX-WS_l3=$UvPU=3qD^ws3gQDbTm**2|*}UtU1* zr_Vf!5xEsd%%{`kNW4uShm{vat9k%(xZ-7tGcd-xGd*dl02%xo@W?y=8C9RPG^Imw zEjxWFs>xn2{pM_Xi(GFf!P@EUun5a^VGGaP#If~Eh*qPqK##)-5t^Y@)J~>sw%|IJ z3uuEr!~Gf5$D%dZJ+2PD}Oh?yz_F zz9NHd?rEa41j$}^xX*3$e@TeiDU2$%hB$;bZ3t0E^PKG`RP)KE5+Uk*GczuR-~4;D z#+o|h5O34Hv}HoaOya#Pk%MS!2YV@fD4+X4c1?PM^;fm>L`4{$@*xfY?;`7=;+d$P z*SX_oPu8Oo+xwyvu8RcJw4bnZ7fSSu^JkNJ1B^rS7KHjY8?O&lhJVzt3!8dyPnJXP zaBjW(q|cmA#eB+DdxenJ3Tj}voiuy;O8RGWwIOYFvv53-gOw$QPEVI!@6j!asa^A- z@64Jt%^T^@?fFQ?Zpe*jTeYb)YlkVrq_?uM4fRuAz2#{U7iLVK-JwQ-o-BCy1V{(- zxN;V26E9QxzU;t?P^P_F*RDtOJgcbz?S%^YKIT_^T79md-K(}LZ|j;f$!c(WVR3B8 zzHly@Kcmy57bla`^umc};aLWDdOfB@fgrqX?=t7{Tr%6<^YJ20?;NDkBLGU@<*MwR z>HuxIF!LhsPJe<&Dl}5{I#$pv0QpNc}F=b!Xn(W$U=LG^VtE{Sduu zLTq*Rc;<0T2FXJ%)!Iq??5As4&x3Jn3#29WsoV<9k`OD~rsiu}s&}(r46E5@J6G9E z6sh`+*wl|YDJkJPOA85g!u;gMd|>1w3|<%Vb! z{~n3^`bczwyTu2H5SwVp=xd4lxCWG>6)E@a%bI%*@Jg9j-ZgP(1o% zg+Q;y+EY@pPaQJs$#>2+JVf&qDZ>h;Vp4<6yw~8*lqRp<87-KM#$9rOepzKd0n=|r>Hf%zl&C242_U% zkT?XaLQtP(UzG;4TW8vH>C!7CUQA04n>}p{-EMfk@~TuykdfOdfU^Ex&F>}{1Zv3E zKr9j4ytR7v!tL3(FaASHs}*1?ND7;7IQy#zo*Rf=9>Gc3LCY$Ze~vWU7ADuen9CQV zLoa@JB6kXYzdG+|2|%mu;AyEc@j-vq?L`{H`!6%c^3VI|Kp$7z=t9GW)6N*EM`>LJ8#xLm$7aSEo5iB!toCWWV^q(@zB^PKL~O zg3g?RT_8d)L(92{iKyO6@l~e~%K~>zroU{n&&@5R>(-kdOWED#o((`%~&a&0g#!+`r?k zXa$1LyQG6JZTY$FVWZj1DabUG{Y!w{0JjsK06O5G5+i0*YTV$Tf`C5f`7MYA`Kk9S zY+(_oy+A|1AF^ZzCD(n|ly?1+>9OO!CjlS%kJ|M=GO2D!3{sgFp!L1du(phXR$bk` zg4GAD9i@Fh{b$4Z`??^UtsGM0mpq1Oz^PF zc=}%uOz5>Fj4^G`+eSzD5kP(S@lMYhRwN3?M-jsqci$mYYHipwa1XCZvf}Xqa^Tu6zU(#hu^kxUJ*vya&r+on{=zLQ&5Ww$C7)U zjQ^VO+%Xog$x1l{U}&>nCeM#Tjto}S`>bGPSB|37Yq>j@#asVsEdILocsqmignNUT zQ19Q1ZLGR$6ppVmQ)^)QjuY$#N{oO17pNS2y^Q78rRQ=xfAKh`*Ka=ADVBK(C-^TZ z&5L>VQlVBvkde)@P)d3rN9SFU20YfZ=nq%^P%JCU!gcQiNa4RsPJP+3&go9~=0JM1 z9hUDP`TdyR9kf02mbMrpUiFk$awEDK_W!V41_u^QdsWEMKU-`+@a2GGx~^@v|6@H|q|Yq%LI@bwuhurffx z{(YrywvQJl&}QtT7q6i!YI~MnwW@X9Q?k55$ea#!gRClV2a7WR1nvm0YdFX8b20b_ z*lg;EIaEn^b-u+FdLTc*uQ#sxXY9ceKr98z$T0zRWxa&@UQ!g?mwjfT3>Pws<-(CY z^U+9^C8|NTr?wyRK}xiBk%V4zEd#JfZHO`Oa0=YQVPa$4Hy(v zOLa*8rrXVAwT9Ry1p6_g;^0w zX^j&1Zvo-~JWxYeilknFRyO)I%V~6<(E@{?PoHOngXWwyyd+2f-7Qh!_|KYWPYAkL z+rhdqE~ob!K)&zW5b|r*aaT(x5~7J7Lp@(7dQ7~(o1EOAyC{2po7$!qs(!CzSGx3; zT=1h!CZ0{Qa{V-r7KxP%IR!c;f;}PY?jDP`Cs@nC4S0Ki@r~i-5?Dnp@NG>8R&Vvm zAm1TTxaN2Kr&R1T{3mrWs&r< zDe<}$EzoQ1txt8xrI0Z(=1y$0J+IA#uI(*u;N5US0?<_UCAD;e4~a#bvPziEnU8AQ$f~ARA%AFr1ks+wkTlE z(#{9Xy*AeflV|L7Ebr8*C|_0tW;{ZGLi?Jt^AsjYi&mV@%DQ0gqA|V~6}Fp#+_b>Q zvPW&+o?P9i(#Tv+?A$yvQ=RwB#H)I-QNJ{Q?MFQ;J`3dRYl6%b`1vKyz2XDn@G+0& zzOc_;`z?Pq(k>Y(S^O5)1{gWTX&PHz^6NnHlAiHHc(HpU*vaR$5~Qz;^mXRwm1SF6 zNhiX$vMU5ux*p>~U0D{jc-=4+9W38b-r{TsZH<`Glp14ZPUCW*n$(4SDot1qUfn_S z4DRXLZ|f}uNc0W@+bbhqb0Wbf-?H}k> z&oL_7AqArS2`*1tw{55FmZ>l9SHp`s-_ELBi0sNc*f(yC7_+-VV4IewJzCam3;y{q zxZ@uOG|DsY&tU}{l%~jBR^gETG58^kU%=**D)P%i4dFYS!e6;A92c*z<)PRR~WG8Zzl72OzC?6Ubxa@~o=RS6T87%QQ)2XyB{ikI7a*V*=h0Q18!i zveSQ-;kBBvAwW=02Ew+Yo3 zI9FX-k7-wv4czSu<_&E%00#jBh=3m^Tbr0cp?on67d7sFcoUyE3mL#_R*%{^++#nJ zUUUp!TL1-$#sPT{ge8Z@aApgMY%HRAgytrWUs<<>UWzJSyMA+?CJAd*lW58yX=3zQ z;1pW%m*q1Y-1~Z_Zy+@FJq_B1Q>NuohPYg}u6@d$SENnu0C5`5@hOW;cyt$K!JVlK z7x6j~Eb9{wflL%qe?Ozkxq>fu@_jgYK4;-XU3hB)B*I;A&wl~BG;h=(0; zTFBufI-a;f5TlD~3Z0EV#EX)^+!$lK`n=aOSbbc92d3g%(85m?U%~9?>Ya-N96wE|H^0cpr-6oHT5RCwx5%a zhh&h4Mh3;ti9b>TBSP26}3WmDnv{(a9yc;zRv z05n_YlvyYVjiuj@p5~q@!`ebG!m^HjLh*vL?th-^UVYJnM&O747B_GGmCK>_t4;jB z^#O-;;*v6XZ1Vs5^~C`{wEve5I`t&RaOxNHup9H-kfFHc0q}QO-&C($$2Ic501u_V A`v3p{ literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c9e7b44 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,9 @@ +# Powertrain Build Documentation + +- [Powertrain Build](./powertrain_build.md) +- [Powertrain Build Introduction](./powertrain_build_introduction.md) +- [Powertrain Build Architecture](./powertrain_build_architecture.md) +- [Powertrain Build Deployment](./powertrain_build_deployment.md) +- [Signal Interface Tool](./signal_interface_tool.md) +- [Signaling In Powertrain Build](./signaling_in_powertrain_build.md) +- [Signal Inconsistency In Check](./signal_consistency_in_check.md) diff --git a/docs/intro.md b/docs/intro.md new file mode 100644 index 0000000..85fbf1c --- /dev/null +++ b/docs/intro.md @@ -0,0 +1,92 @@ +# Introduction to PCC Build System's documentation + +## Target + +- Improved build speed +- Easier integration of code from other sources than TargetLink +- Improved quality + - Design documentation + - Unit tests + - Better code structure + - Better target code (no postprocessing, all code explicitly assigned to memory areas) + +## Overview + +The big conceptual change is to move the variability from the code generation stage to the compilation stage. + +![Old build system](./images/old_build_system.PNG) + +Build a superset c-code, which can be configured via preprocessor directives. + +![New build system](./images/new_build_system.PNG) + +As the code generation step takes a significant part of the build time, distributing this step to the time of commit, instead of when building the SW, will reduce build time. Only generating one set of c-code, instead of one per variant, will further reduce build time. + +The unit c-code also has a unit metadata file (in json-format) which the build system will use. This metadata file acts as a unit code generator abstraction. I.e. the metadata file contains all information needed by the build system and it is independent from how the unit code was created. This will make integration of hand written c-code much easier. + +## Summary of changes + +This section describes the changes made to the build system (Data dictionary, scripts, configuration files, etc.), but not the changes needed to be done in the model files. These changes are described in [model_changes](model_changes.md) + +1. No TargetLink classes uses pragma-directives. These are replaced with header files. The header files are different per supplier and includes the supplier specific header files. When the project is set up in the version control system, the correct header for the supplier are included with externals. I.e. the configuration is done in the version control system. This means that no post processing of c-files are necessary, which reduces build time. + +2. Data dictionary changes + - Pragma directives replaced by includes (see above) + - Removal of all datatype sizes in the classes (i.e. CVC_DISP replaces CVC_DISP8, CVC_DISP16 and CVC_DISP32). TargetLink 3.3 groups variable declarations by size without different classes. + - New NVM-ram types are added + - Removed old legacy classes which should no longer be used + - Dependability classes are added, and postprocessing of dependability code is removed. + + Scripts are provided to update the models with new the classes. The Dependability classes are located in variable class groups, to make creating models easier (less clutter in the target link class dialog). + + ![Variable Classes](./images/DD_class_example.PNG) + +3. Data dictionary additions for code switch replacement + - Create a file to be included with the preprocessor defines for the configuration, by creating a new module in DD0/Pool/Modules. The name of the module will be the name of the header-file included in the c-files. I.e. MT_CompilerSwitches in the example below. + - Create a new file specification in the module (by right clicking "file specifications" and selecting "Create FileSpecification". Fill in the values below. + + ![Header File Specification](./images/TL-DD-preprocessor1.jpg) + + - Create another a new file specification in the module (by right clicking "file specifications" and selecting "Create FileSpecification". Fill in the values below. + + ![Source File Specification](./images/TL-DD-preprocessor2.jpg) + + - Create a new variable class (by right clicking "Variable Class" and selecting "Create Variable Class". Fill in the values below, but add MERGEABLE in the "Optimization" Option. + + ![Mergeable Variable Class](./images/TL-DD-MACRO.jpg) + +4. No models are needed for VcExt*, VcDebug*. C-code and A2L-files are generated directly, which saves build time. + +5. Variables are declared in the units which writes to them, with the exception of variables in the supplier interface. I.e. + - VcIntVar is removed. + - Classes of unit outputs in the models are changed from CVC_EXT to CVC_DISP. Scripts are provided to modify the models. + +6. All units are checked-in together with it's c-code, and a json unit-definition file. See [unit_config](unit_config.md) for structure of that file. This leads to code generator independence and vastly improved build time, as the most time consuming step is distributed. + +7. New project configuration file, see [project_config](project_config.md) + - Config separated in a global config file, and one project specific file. + - More flexibility for different file structures (config, rather than code change) + +8. Interface checks are introduced to guarantee that interfaces are consistent before build. Increases quality and reduces build time. + +9. Improved maintainability by + - A more modular design. + - Documentation of the build system. + - Unit tests for the build system. + +10. A new temp-model is generated to move the TL-outport to the subsystem where the signal is created. This is needed to be able to remove the unused outports from the generated c-code, and at the same time have the possibility to create a test harness. Is there a way to avoid this without using the TL-DD or making temp models? + +## Limitations in TL3.3 + +When using TargetLink 3.3 and preprocessor directives, there are some limitations of what can be used in subsystems under these directives. + +1. Enabled subsystems cannot use the reset states option. +2. The outports of enabled subsystems cannot use the reset when disabled option. + +![Enable and Port reset options examples](./images/reset_port_SL_example.PNG) + +After discussion with dSpace, they are considering removing the above mentioned limitations, in TL 4.4 or later. This needs to be confirmed with dSpace. + +Another issue is that the TargetLink code generation optimizer considers preprocessor ifs as any other control flow (e.g. an ordinary if statement). Enabling the control flow code generation optimization (the MOVEABLE optimization in the class), can lead to the removal of code, calibration data or measurement variables when using preprocessor ifs. + +See [model_changes](model_changes.md) for workarounds for these limitations. diff --git a/docs/model_changes.md b/docs/model_changes.md new file mode 100644 index 0000000..531e8a4 --- /dev/null +++ b/docs/model_changes.md @@ -0,0 +1,71 @@ +# Necessary Model Changes + +This section describes the necessary model changes that has to be done for the new build environment to work. Most of these changes will be automated by model conversion scripts. + +## Replacement of the VCC Codeswitch blocks + +1. Add a constant of the type you defined above (`IFDEF_MACRO_EXT_DEFINE`) and a TargetLink pre-processor IF block + + ![Pre-processor IF example](./images/add-preproc-block.jpg) + +2. The pre-processor IF block is found here: + + ![Vcc_Lib](./images/TL-preproc-lib.jpg) + +3. Add a Simulink action port to the subsystem + + ![Action port](./images/change_to_actionport.jpg) + +4. Connect the TargetLink pre-processor IF block to the action port of the subsystem + + ![Action port connection](./images/connect_to_subsystem.jpg) + +## Use of the VCC Codeswitch blocks as constants + +TargetLink does not accept using the same pre-processor define for both pre-processor ifs and as constants. The workaround is to create a new define, which is set to the original define in the `LocalDefs.h` file created by the code-generation scripts. + +![Pre-processor constant example](./images/DuplicatedDefines.PNG) + +`VcAesAir_OPortMvd_LocalDefs.h`: + +```c +#include "VcCodeSwDefines.h" + +#define Vc_Aes_B_CodeGenDsl_CN (Vc_Aes_B_CodeGenDsl) +``` + +## Modification of ts datastore blocks + +The datastore block for sampling time, *ts*, must be modified so that different time constants can be used when building the superset c-code for different projects. + +Change the class of the datastore block to *"EXTERN_GLOBAL_ALIAS"* and fill in the name of the constant defining the sampling time in the *Name* field. + +The build scripts generates a header file which defines the correct time constant value. + +![ts datastore block](./images/ts_change.PNG) + +## Declaration of output variables in unit + +The `VcIntVar.c` file is removed, the unit producing a signal should declare it. This avoids interface integration issues and saves build time. **NB: Model change required** + +- TL-Class for outports need to be changed to `CVC_DISP` in all models. +- A script is written which modifies all outports to `CVC_DISP`. + +## Addition of new dependability TL-classes + +Dependability classes are added, and postprocessing of dependability code is removed. Scripts are provided which automatically changes the classes of a model. + +## Enabled subsystem outports + +Subsystems with any subsystem parent, which have a TL-preprocessor switch, cannot have a "reset-port" state. See below for workarounds. + +- The scripts converting the models will detect if the reset states option is used, and will not use a preprocessor-if for that subsystem. This will lead to increased RAM/ROM usage. It is recommended to refactor the model (split into several models), if this is a possibility. +- All outports with the reset when inactive option enabled, will have that option disabled by the conversion script. This will be shown in the logfile. The designer needs to consider if this change is acceptable and if not, the following design workaround is recommended. + + ![Reset port workaround](./images/reset_port_workaround.PNG) + +## Other workarounds + +The workaround for the optimization problem is to remove the MOVEABLE optimization when the new build system is introduced. This will bring us back to the same behavior as we had when running TL 2.1.5. + +This will make it easier to understand how the target code works, as it will behave as in simulink. Furthermore, it will be easier to predict maximum CPU-load. The downside is that it will cost 0.1% extra CPU load, when measured last time. diff --git a/docs/powertrain_build.md b/docs/powertrain_build.md new file mode 100644 index 0000000..0cc5e1a --- /dev/null +++ b/docs/powertrain_build.md @@ -0,0 +1,203 @@ +# powertrain_build + +--------------------- + +[TOC] + +## Requirements + +powertrain_build is supported on Python versions 3.6 through 3.10. + +## Basic Usage + +Code generation is done from git bash and the generated code is committed. +The TargetLink GUI is currently lean and all projects are initialized in Matlab +through running: + +```bash +Projects/Init_PyBuild.m +``` + +This works the same way for Embedded coder projects, for example: + +```bash +actuation-arbitration-manager-simulink-logic/Projects/Init_PyBuild.m +``` + +**NOTE:** Examples in upcoming chapters use Python version 3.6. + +### Code generate a model + +In git bash: + +```bash +py -3.6 -m pytools.pybuild_wrapper --codegen --models Models/ICEAES/VcAesTx/VcAesTx.mdl +``` + +#### Set Matlab 2017 as Environmental Variable + +Add New User Variables +click 'New...' and add if you want to run python from command line + +```bash +MatInstl2017 "C:\Program Files\MATLAB\R2017b\bin\matlab.exe" +``` + +or + +```bash +MatInstl2017 "/c/Program\ Files/MATLAB/R2017b/bin/matlab.exe" +``` + +if you want to generate code from bash. + +When a new environment variable has been added you need to restart git +bash/command window. + +See picture below for details. + +![MatlabEnvVar](MatlabEnvVar.JPG) + +#### Code generate with Embedded Coder with Matlab2019b + +```python +py -3.6 -m pytools.pybuild_wrapper --codegen --matlab-bin "C:\MATLAB_2019_b\bin\matlab.exe" --models Models/STEER/VcSteer/VcSteer.mdl +``` + +### Update a TargeLink model to pybuild + +In git bash: + +```python +py -3.6 -m pytools.pybuild_wrapper --update --models Models/ICEAES/VcAesTx/VcAesTx.mdl +``` + +### Update and Code generate a model + +In git bash: + +```bash +py -3.6 -m pytools.pybuild_wrapper --update --codegen --models Models/ICEAES/VcAesTx/VcAesTx.mdl +``` + +### Code generation and build + +To code generate and build a complete project *ABC_123*: + +```bash +py -3.6 -m pytools.pybuild_wrapper --codegen --build ABC_123 +``` + +### Build a project + +You can either use the wrapper: + +```bash +py -3.6 -m pytools.pybuild_wrapper --build ABC_123 +``` + +### Detailed build options + +```bash +py -3.6 -m pytools.pybuild_wrapper --help +``` + +The powertrain_build wrapper has many options, we'll explain them in detail here: + +`--update` This option uses Matlab scripts to migrate models from the old build +system to powertrain_build. Once powertrain_build is officially in use, all source code should +already have been converted. + +`--codegen` Runs TargetLink to generate C source code from the Matlab models. +This should be done before changes are submitted for review. If the generated +code is missing, the build system will reject your changes. + +`--build` Reads configuration files and sets up preprocessor flags. + +`--models=Models/SSP/MODEL/MODEL.mdl` Allows selective building and code +generation, useful for testing individual changes. Multiple model paths can +be entered, separated by comma signs. + +`--dry-run` Dry run mode. No actual changes are done, can be used to test +configuration. + +`--matlab-bin MATLAB_BIN` matlab arguments currently path to the matlab +binary to use. Defaults to C:\MATLABR2017b_x64\bin\matlab.exe. If you have +Matlab installed in the wrong place you can use: + +```bash +py -3.6 -m pytools.pybuild_wrapper --codegen --models Models/ICEAES/VcAesTx/VcAesTx.mdl --matlab-bin="C:\Program Files\MATLAB\R2017b\bin\matlab.exe" +``` + +NOTE: Building a project (--build) does not work if a model requires a +preprocessor directive that does not exist in any configuration file. + +### What to commit + +Using powertrain_build we need to commit: + +- Model file and if needed m-file +- All updated files in `Models/SSPXXX/VcXxxYyy/pybuild_cfg` +- Files like `config_VcXxxYyy.json` +- All updated files in `Models/SSPXXX/VcXxxYyy/pybuild_src` +- Files like `tl_defines_XxxYyy.h`, `VcXxxYyy.h`, `VcXxxYyy.c`, `VcXxxYyy.a2l`, + `VcXxxYyy_OPortMvd_LocalDefs.h` +- Files in `tests` if needed +- Configuration files, e.g. `ConfigDocuments/SPM_Codeswitch_Setup.csv`, + see [pre processor directives](./PreProcessorDirectives.md). + +```txt +gitrepo/ +├── ConfigDocuments/ +│ ├── . +│ ├── . +│ ├── . +│ ├── SPM_Codeswitch_Setup.csv +│ ├── SPM_Codeswitch_Setup_ICE.csv +│ ├── SPM_Codeswitch_Setup_PVC.csv +│ ├── . +│ ├── . +│ ├── . +├── Models/ +│ └── PVCTM/ +│ └── VcPvcDemo/ +│ ├── pybuild_cfg/ +│ │ ├── config_VcPvcDemo.json +│ │ └── VcPvcDemo.yaml +│ ├── pybuild_src/ +│ │ ├── tl_defines_PvcDemo.h +│ │ ├── VcPvcDemo.a2l +│ │ ├── VcPvcDemo.c +│ │ ├── VcPvcDemo.h +│ │ └── VcPvcDemo_OPortMvd_LocalDefs.h +│ ├── tests/ +│ │ ├── _cumulated_code_coverage_ +│ │ │ ├── ctcpost_merge_options.txt +│ │ │ └── experiment.spec +│ │ ├── VcPvcDemo_UnitTests +│ │ │ ├── 00_test_setup +│ │ │ │ ├── dataset.DCM +│ │ │ │ ├── sut_config.txt +│ │ │ │ ├── sut_interface.py +│ │ │ │ └── twTest.sil +│ │ │ ├── 01_stimulus +│ │ │ │ └── U_VcPvcDemo_ExplorativeStimulus.py +│ │ │ └── 02_watchers +│ │ │ └── U_VcPvcDemo_watcher.py +│ │ ├── ctc_env.bat +│ │ └── project.testweaver +│ ├── VcPvcDemo.mdl +│ ├── VcPvcDemo_par +``` + +### Summary of signals in powertrain_build + +[Signal Summary](./signaling_in_powertrain_build.md) + +### Signal Interface Tool + +[Signal Interface Tool](./signal_interface_tool.md) + +### Signal Interface Inconsistency + +[Signal inconsistency in check](./signal_inconsistency_check.md) diff --git a/docs/powertrain_build_architecture.md b/docs/powertrain_build_architecture.md new file mode 100644 index 0000000..100525e --- /dev/null +++ b/docs/powertrain_build_architecture.md @@ -0,0 +1,162 @@ +# powertrain_build General Code Introduction + +[TOC] + + + +## Why is powertrain_build used? + +The software is built using TargetLink, which generates c-code from Simulink +models. Some models are used in multiple projects while others only serve for one project. + +To make things easier to understand, let's say we want to produce a software +for ABC_123 (fake car model) which handles the diesel. + +## Software generation before powertrain_build + +1) Gather all models used in ABC_123. +2) Some models are used in several projects, therefore, we need to process those +models and remove all non-ABC_123 parts. To save memory and avoid using the +wrong software, matlab scripts is responsible for cutting out useless parts of +the model. +3) Generate c-code using TargetLink. +4) Compile. + +![powertrain_buildLegacy](./images/powertrain_build_legacy.png) + +Such process had to be done every time we wanted software and we have up to 11 +projects to maintain, which could take a while. + +## Software generation after powertrain_build + +powertrain_build uses preprocessor blocks in the models, which means that the generated +code has "#ifdef SOME_VAR" inside. It enables to switch between projects using +variales, which means we can generate code for each model and store them in ./Models/. + +1) Gather all c-/h-files used in ABC_123. +2) Set variales according to codeswitch documents. +3) Compile. +![powertrain_build](./images/powertrain_build.png) + +## Summary + +Before powertrain_build, we had to generated code for each model (after modifying them +through matlab scripts) for each projects and then compile. Now the latest +version of the code is already in the repo, we just need to gather files, set +variables and compile. + +## How to start with powertrain_build + +To get familiar with powertrain_build, build.py is a good start since it contains all +modules. Four important modules could also help you understand powertrain_build better: +build_proj_cfg, unit_cfg, feature_cfg, signal_interface. + +## build_proj_cfg + +This module is used to read ./Projects//Config/ProjectCfg.json +and ./ConfigDocuments/BaseConfig.json, which provides configuration +files location. The location of Base_Config is also stored in ProjectCfg. +build_proj_cfg also provides methods of gathering information for other modules. + +## feature_cfg + +feature_cfg module is also called the codeswitch module. It reads from +./ConfigDocuments/SPM_Codeswitch_Setup*.csv and provides methods for +retrieving the currently used configurations of a unit. The first +row of SPM_Codeswitch_Setup*.csv lists all projects and the first column +lists codeswitch names. The values under each project states whether the +corresponding codeswich is active in this project. + +## unit_cfg + +The model list of a project is in ./Projects//local_cof/raster.json. +Then unit_cfg reads unit definitions from models from the model list +(/Models//pybuild_cfg/.json). This module also +provides methods to retrieve any unit definition, such as inports and outports, +of a unit and all existing units. + +## signal_interface + +This module gets supplier interface of the project from +./Projects//Config/ActiveInterfaces/. It provides methods +of checking signal interfaces consistency between Supplier and VCC SW. It +also reads inport/outport information from all units in raster and checks +internally inports/outports consistency between VCC SW-units + +## Why powertrain_build, whats the advantages? + +A Continuous Integration (CI) Build System needs to test all configurations +where a TargetLink model is used. + +- It's faster + - There is more parallelization of jobs in the CI system, so its faster. + - Code generation is moved to the developers PC + - Code generation is done once for all projects using pre-processor directives. + - C code review is now possible in gerrit! + - The total build time on a software is 15 minutes for all 9 projects +- powertrain_build adds signal consistency checks. +- Unit tests of the Build system is introduced + - So its quality assured + - Its easy to learn for new employees. +- powertrain_build creates new variable classes with unique code decorations + - This means that post processing C code is not necessary. + - This means that ASIL classed variables get declared at the source. + - This means that we can optimize memory at compilation, and save memory in GEP3 through short addressing different variable classes. + - This means we have control of all build steps + - This enables us to use the same models in more than 2 different suppliers, for instance SPA2's Core System Platform. + - powertrain_build thus fixes incorrect handling of NVM variables. + +### Legacy, how it used to be + +The old system was scripted in Matlab. +The code was not re factored, but build +upon for many years. Hence the complexity of the code was high. +As seen in the figure below, the models used code switches to generate different code for different projects. +The Legacy Build process can be followed in this sharepoint +site: + +![powertrain_buildLEgacy](./images/powertrain_build_legacy.png) + +### What is it + +- Made in Python. +- Instead of Code Switches in the TargetLink models, there are C Pre Processor + directives. In this way, we will have super set C code representing the super + set Simulink models. +- Unit tests of build scripts as well as html documentation. +- Signal consistency checks through creating JSON files of the code + +![powertrain_build](./images/powertrain_build.png) + +### How powertrain_build is used in different targets + +#### vcu/hp + +![powertrain_build-hp](./images/powertrain_build-hp-white.jpg) + +#### vcu/hi + +![powertrain_build-hi](./images/powertrain_build-hi-white.jpg) + +#### ECM + +![powertrain_build-ECM](./images/powertrain_build-ECM-white.jpg) + +### TargetLink Limitations + +- dSPACE delivers removal of limitation in TargetLink release 2019B, first said + to be delivered 2018B. These options gives code generation errors: + - Enabled subsystems, which reset the states when enabling them. + - Out ports which are reset when disabling a subsystem, which are used in subsystems under a pre-processor block +- Solution of TargetLink limitation is refactoring of models + +### powertrain_build dependencies + +Python module dependency visualization from pydeps, +[https://github.com/thebjorn/pydeps](https://github.com/thebjorn/pydeps) looks like this: + +![powertrain_buildDependencies](./images/powertrain_buildDependencies.svg) + +#### How powertrain_build generates a SPA2 service + +![generate service](./images/powertrain_build_gen_service_black.jpg) diff --git a/docs/powertrain_build_deployment.md b/docs/powertrain_build_deployment.md new file mode 100644 index 0000000..8aa24f3 --- /dev/null +++ b/docs/powertrain_build_deployment.md @@ -0,0 +1,76 @@ +# powertrain_build Deployment + +[TOC] + + + +## Repositories + +### powertrain_build Repository + +The powertrain_build git repository can be found +[here](https://opendev.org/volvocars/powertrain-build). +The powertrain_build LTS artifactory repository can be found +[here (PLACEHOLDER)](https://artifactory-link). + +## Deployment + +After changes (important commits, JIRA stories etc.) has been made to powertrain_build, +a new version must be deployed. + +## Versioning + +powertrain_build use semantic versioning, _MAJOR.MINOR.PATCH_. The version +is changed by setting an annotated tag with the version (only) at the commit +that should be the released commit. + +### Development versioning + +If distribution of a development version is needed, set a tag +"dev/\". Scripts will update the patch part and add .devN, +where N is the number of commits since last proper sematic versioning tag. + +## Instructions + +1. Upload the change to Gerrit, have it reviewed, verified and merged. +1. Retrieve the merged commit from Gerrit and ensure it is checked out. +1. Create an annotated tag on the commit.\ +`git tag -a -m'' ` + 1. For a development version:\ + `git tag -a -m'' dev/` +1. Push the tag to Gerrit:\ +`git push origin ` +1. Steps after merge can also be done by setting a tag in Gerrit GUI +1. Zuul will now: + 1. Run verification steps. + 1. Check that the version complies with PEP440 and semantic version + 1. Check that there is no package with this version on artifactory already. + 1. Upload the package to artifactory. +1. Modify the _requirements.txt_ file in any repo that requires these +updates. + +## Additional notes + +If powertrain_build become dependent on a new package, add the dependency to +_\/requirements.txt_, or _\/test-requirements.txt_ if the +dependency is needed only for testing the package, not for using it. + +powertrain_build use [pbr](https://docs.openstack.org/pbr/latest/) to create +package meta data. Please read and use the features of pbr if updating resource +files or non-python scripts. + +## Manual deployment + +1. The python package _setuptools_ is required to deploy powertrain_build. +1. Follow the guidelines on the +[LTS artifactory (PLACEHOLDER)](https://artifactory-link) +page about deploying python packages. + 1. [LTS artifactory (PLACEHOLDER)](https://artifactory-link) -> Set Me Up +1. `py -3.6 setup.py sdist`, to build the package. +1. `py -3.6 setup.py sdist upload -r local`, to deploy. + 1. Deployment in this way may overwrite the package on artifactory + if the user has enough privilege. Be careful not to upload the + same version twice without intending to, as artifactory has no + package upload history and an overwritten package is lost. +1. The bullet about _requirements.txt_ in [Instructions](#instructions) is valid here too. +1. The same [additional notes](#additional-notes) apply to manual deployment. diff --git a/docs/powertrain_build_introduction.md b/docs/powertrain_build_introduction.md new file mode 100644 index 0000000..e31ccda --- /dev/null +++ b/docs/powertrain_build_introduction.md @@ -0,0 +1,32 @@ +# Introduction of powertrain_build for new employee + +[TOC] + + + +## General powertrain_build Information + +[powertrain_build introduction](./powertrain_build.md) introduces installation and basic usage of powertrain_build. + +## powertrain_build Code Base + +The basic code introduction is placed in [powertrain_build General Code Introduction](./powertrain_build_architecture.md). + +## powertrain_build Deployment + +Information on how to deploy powertrain_build can be found [here](./powertrain_build_deployment.md). + +## powertrain_build Development + +If you want to develop powertrain_build, you can run it directly from the Git repositories. You probably need a separate virtual environment, as any installed release versions of powertrain_build would interfere: + +```shell +python3 -m venv powertrain_build_venv +source ./powertrain_build_venv/bin/activate +``` + +Once activated, you can execute it: + +```shell +PYTHONPATH=/pt/pytools://pt/pybuild python -m pytools.pybuild_wrapper build-specific --project-config Projects/CSP/PvcDepDemo/ProjectCfg.json --core-dummy +``` diff --git a/docs/project_config.md b/docs/project_config.md new file mode 100644 index 0000000..c54ea4c --- /dev/null +++ b/docs/project_config.md @@ -0,0 +1,207 @@ +# Project configuration files + +Configuration files needed by the build system. The "entry point" is the project configuration file given as a command line argument to build.py. This file can contain references to other configuration files and to the software [unit definition files](unit_config.md). + +## Project config + +The project config file contains project specific configuration settings and references to other configuration files. It is a json file that should be located in the project root. The project configuration file can override keys/values in the base configuration file. + +Example ProjectCfg.json: + +```json +{ + "ConfigFileVersion": "0.2.1", + "BaseConfig" : "../../ConfigDocuments/BaseConfig.json", + "UnitCfgs": "conf.local/rasters.json", + "ProjectInfo" : { + "projConfig" : "VED4_GENIII", + "a2LFileName": "VEA_VED4_SPA.a2l", + "ecuSupplier" : "Denso", + "ecuType" : "G2", + "unitCfgDeliveryDir": "./output/UnitCfgs" + } +} +``` + +## Base config + +The base config file shares the same structure as the project config file and can be used for non project-specific configuration settings and default values. + +Example BaseConfig.json: + +```json +{ + "BaseConfigFileVersion": "0.2.1", + "ProjectInfo" : { + "didDefFile": "DIDIds_FullRange", + "srcCodeDstDir": "./output/SourceCode", + "reportDstDir": "./output/Reports", + "logDstDir": "./output/logs", + "configDir": "../../ConfigDocuments", + "interfaceCfgDir": "./Config/ActiveInterfaces", + "prjUnitSrcDir": "../../Models/*/Vc*/pybuild_src", + "prjUnitCfgDir": "../../Models/*/Vc*/pybuild_cfg", + "prjUnitMdlDir": "../../Models/*/Vc*", + "prjLocalDefs": "*_LocalDefs.h", + "prjCodeswitches": "SPM_Codeswitch_Setup*.csv", + "coreDummyFileName" : "VcCoreDummy", + "featureHeaderName": "VcCodeSwDefines.h", + "tsHeaderName": "VcUnitTsDefines.h", + "useGlobalConst" : "VcConst" + }, + "NvmConfig": { + "fileName" : "vcc_nvm_struct", + "baseNvmStructs" : "conf.local/nvm_structs.json" + } +} +``` + +## Units config + +The units config file contains information about included software units and scheduling rasters. The software units are executed in the order they are defined within each time raster definition. + +```json +{ + "UnitsConfigFileVersion": "0.2.1", + "Projects": { + "GEP3_HEP7": { + "Rasters": { + "2ms": [], + "10ms": [ + "VcScBCoord", + "VcScCVehMtn", + "VcScAAccPed" + ], + "100ms": [ + "VcTmEdMon", + "VcAcCtrl" + ] + }, + "SampleTimes": { + "2ms": "0.002", + "10ms": "0.010", + "100ms": "0.100" + } + } + } +} +``` + +## Configuration settings + +### File versioning + +The build system compares the version information in the configuration files with the application version to make sure a consistent configuration is used. + +- "ConfigFileVersion": "0.2.1" + - Project configuration file version. +- "BaseConfigFileVersion": "0.2.1" + - Base configuration file version. +- "UnitsConfigFileVersion": "0.2.1" + - Units configuration file version. + +## ProjectInfo + +### projConfig + +The name of the project. This name is used in all the configuration files to identify the project. + +### ecuSupplier + +Ecu supplier name. This is used to choose supplier dependent code generation (possibly in combination with ECU Type), e.g. the core dummy file generation. + +### ecuType + +Ecu type name. This is used to choose supplier dependent code generation (possibly in combination with ECU Supplier), e.g. the core dummy file generation. + +### unitCfgDeliveryDir + +If this key is defined, the build system will deliver all the unit configuration files into the directory specified. + +### didDefFile + +The name of the file defining all DIDs of the project. + +### srcCodeDstDir + +The source code destination directory. + +### logDstDir + +The log files destination directory. + +### configDir + +The path to a folder containing all the configuration files of the project. Used to find codeswitches, core-id and DID definition files. + +### interfaceCfgDir + +The path to a folder with csv-files defining the supplier interface configuration. The files shall be comma separated files, with the delimiter ';' + +The following files shall exists in the folder: CAN-Input.csv, CAN-Output.csv, EMS-Input.csv, EMS-Output.csv, LIN-Input.csv, LIN-Output.csv, Private CAN-Input.csv and Private CAN-Output.csv. + +### prjUnitSrcDir + +A file path where the superset of the source code files are found. This path can/shall use wildcards. E.g. "./Models/SSP*/Beta/Vc*/src", will match all folders under the Models folder which start with SSP, and then all folders in Beta starting with Vc, which have a src folder. The build system only includes files from software units referenced by the units config file. + +### prjUnitCfgDir + +A file path to the unit definition files. This file is a json file containing all the relevant meta data for the function. E.g. input parameters, output parameters, calibration labels, local measurement variables, etc... The unit definition file must match the filename pattern "config_*.json" + +### coreDummyFileName + +Defines the file names of the dummy Core Identifier c code, which is generated by the build environment. + +### useGlobalConst + +If declared, this module is included in the build. If the string is empty no module is included + +### NvmConfig + +This key configures the NVM area sizes, and the filename of the c-files generated to defined the NVM. The NVM is defined by six structs. The reason for using c-structs is to guarantee the order the variables are declared in memory. The c-standard does not specify in which order global variables are allocated in memory. However, the standard says that struct members should be placed in memory in the order they are declared. + +```json +{ + "NvmConfig": { + "fileName" : "vcc_nvm_struct", + "baseNvmStructs" : "conf.local/nvm_structs.json" + } +} +``` + +### baseNvmStructs + +This json file holds the order for NVM signals in the structs, it also holds area size and allowed signals. We want to preserve the order for signals. So signals should never be removed from this list. If a signal is not used anymore it should not be removed, it should instead be marked with 'Position_*' eg. Position_16Bit_195 the signal position will then be filled in by buildscript with signal found in model that's not found in the json. + +```json +{ + "signals": [ + { + "x_size": 1, + "type": "Float32", + "name": "sVcDtcIsc_Tq_NvmAdpnNC", + "y_size": 1 + } + ], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": ["Float32", "UInt32", "Int32"] +} +``` + +### fileName + +This key defines the name of the c-files generated, which defines the NVM areas. + +### SampleTimes + +The key "SampleTimes" defines the names of the available time rasters, and the value defines the scheduling time in seconds. + +### Rasters + +The key "Rasters", defines which units that are scheduled in that raster, and the order of the list defines the order the units are executed within the raster. diff --git a/docs/signal_consistency_in_check.md b/docs/signal_consistency_in_check.md new file mode 100644 index 0000000..2572b09 --- /dev/null +++ b/docs/signal_consistency_in_check.md @@ -0,0 +1,83 @@ +# Signal inconsistency in check (none gating) + +--------------------------------------------- + +[TOC] + +## Introduction + +Signal inconsistency check will be performed on all changes containing .mdl +files. Reports are created and uploaded to artifactory. One report for each +project, showcasing information about signals relevant for specific project. + +>![project_index](./images/signal_inconsistency_project_index.png) + +Inconsistencies that will be gating upon (listed below) will also be displayed +in Jenkins log. + +- Unproduced inports +- Produced but not used outports +- Signals added to \\_Unconsumed_Sig.csv + +>![jenkins_log_example](./images/signal_inconsistency_log_example.png) + +## Checks + +Following checks will be performed on models in gerrit change + +1. Unproduced inports + - Signals that are configured to be consumed by model but are not produced + internally (models) and/or externally (interface list). +1. Produced but not used outports + - Signals that are configured to be produced by model but does not have + consumer internally (models) and/or externally (interface list). +1. Signals added to \\_Unconsumed_Sig.csv + - Signals that are defined to **not have consumer** but **is consumed** + internally (models) and/or externally (interface list) + +## \\_Unconsumed_Sig.csv + +For "Produced but not used inports" that are intended for consumption after +point of merging to master there exist possibility to disable check. + +1. Create pybuild_cfg/\\_Unconsumed_Sig.csv. +1. Add Header "Unconsumed_Signals" and populate with produced signals +(outports only) you like to omit. + +>![unconsumed_csv_example](./images/signal_inconsistency_unconsumed_csv_example.png) + +## Running checks and creating reports before pushing to gerrit (optional) + +Please install pytools before running signal inconsistency locally. See +[powertrain_build and PyTools instruction](./powertrain_build.md) + +```bash +py -3.6 -m pytools.signal_inconsistency_check -m VcModel1 -r +``` + +Multiple model + +```bash +py -3.6 -m pytools.signal_inconsistency_check -m VcModel1 VcModel2 VcModel3 -r +``` + +Running without report creation + +```bash +py -3.6 -m pytools.signal_inconsistency_check -m VcModel1 VcModel2 VcModel3 +``` + +## Limitations + +- Project specific report E.g SigCheckAll_\.html will only show +information about signals configured to be used in project "PROJECT". +- Reports does not display information about check 3. This will only be +displayed in build logs. +- Jenkins/script log does not display information about none gating +inconsistencies E.g + - "Outports that are generated more than once in the listed + configuration(s)" + - "Inports that have different variable definitions than the producing + outport" + - "In-/Out-ports that have different variable definitions than in the + interface definition file." diff --git a/docs/signal_interface_tool.md b/docs/signal_interface_tool.md new file mode 100644 index 0000000..7a2bdbc --- /dev/null +++ b/docs/signal_interface_tool.md @@ -0,0 +1,37 @@ +# Signal Interface Tool + +[TOC] + +## Introduction + +Please install PyTools to enable the commands below, see [powertrain_build and PyTools instruction](./powertrain_build.md) +Powertrain Build contains scripts for both signal consistency checks and signal interface information. + +If you type the following in git bash: + +```bash +py -3.6 -m pytools.pybuild_wrapper --help +``` + +## Signal Interface report + +The signal Interface tool generates html reports. The following example shows how to generate the report: + +```bash +py -3.6 -m pytools.pybuild_wrapper --build ABC_123 --interface +``` + +A project specific report will be available here: `Projects\ABC_123\output\Reports\SigIf.html`. +This report only displays what signals that exist in that project. + +## Signal consistency report + +Signal in-consistency displays per model: + +* **Missing signals**, Inports whose signals are not generated in the listed configuration(s) +* **Unused signals**, Outports that are generated, but not used in the listed configuration(s). +* **Multiple defined signals**, Outports that are generated more than once in the listed configuration(s). +* **Internal signal inconsistencies**, Inports that have different variable definitions than the producing outport. +* **External signal inconsistencies**, In-/Out-ports that have different variable definitions than in the interface definition file. + +After running the generation command above(e.g. for ABC_123) the Signal consistency reports are available in `Projects\ABC_123\output\Reports\`. diff --git a/docs/signaling_in_powertrain_build.md b/docs/signaling_in_powertrain_build.md new file mode 100644 index 0000000..5496636 --- /dev/null +++ b/docs/signaling_in_powertrain_build.md @@ -0,0 +1,102 @@ +# Summary of signals in powertrain_build + +----------------------------------- +[TOC] + +## Where are the variables defined in the code? + +### Outsignals from models + +``` +* .c +* VcExtVar*.c - if it is listed in the interface +``` + +### Insignals to models + +``` +* .c - if another model is producing it +* VcExtVar*.c - if it is in the interface +* VcDummy_spm.c - if neither in interface nor models +``` + +### Outsignals in the interface list + +``` +* .c - if a model is producing it +* VcDummy.c - if no model is producing it +* VcExtVar*.c - outsignals in the interface list are all defined in this file +``` + +### Insignals in the interface list + +``` +* VcExtVar*.c - this goes for both used and unused signals for ecm projects +``` + +### Signal flow within a project + +Signals within a project can be divided into 4 types: + +``` +* external_outsignals - outsignals in the supplier interface list +* external_insignals - insignals in the supplier interface list +* internal_outsignals - outsignals from models but not in the supplier interface list +* internal_insignals - insignals to the models but not in the supplier interface list +``` + +As shown in the picture below, if a model takes internal\_outsignals from +another model, the model is regarded as consumer and another model +is supplier. + +![powertrain_buildConsummer&Supplier](supplier-consumer_Model.PNG) + +If the consumer model expects more insignals than supplier model or +supplier interface could provide, then these insignals are marked as +missing signals. + +![powertrain_buildMissingSignals](MissingSignals.PNG) + +If supplier model or interface provides more signals than expecting +insignals, then these signals are marked as unused signals. + +![powertrain_buildUnusedSignals](UnusedSignals.PNG) + +The picture below indicates signal flow within a project. +External interface list defines external in-ports and +external out-ports. + +The first flow indicates the normal +signal flow within a project: external\_insignals defined in +VcExtVar.c enters model1 and the internal\_outsignals match +internal\_insignals of the next model; then the external\_outsignals +come from model3 which are defined in model3.c. + +The second signal flow indicates the missing signal situation. +When internal\_insignals are missing, VcDummy\_spm.c file is generated +to define missing outport variables in the out-port interface of +the previous model. + +The last signal flow explains two special cases: (1) unused signals; +(2) external\_outsignals not produced by models. Unsued signals will be +ignored by models and external\_outsignals that are defined in signal +interface but not produced by models are defined in VcDummy.c instead +of model7.c. + +![powertrain_buildSignalFlow](SignalFlow.PNG) + +## Compilation Process + +``` +Compile -> Link -> fail -> Update VcDummy and VcDummy_spm (remove multiple defs, add missing defs) +Compile -> Link -> fail -> Update VcDummy and VcDummy_spm +Compile -> Link -> fail -> Update VcDummy and VcDummy_spm +Compile -> succeed +``` + +Compiling and linking SPM only works first try in gcc. +Multiple definitions or missing definitions are not allowed. + +The iterations are to fix the inconsistencies between SPM and EMS. +If we knew what was defined in the EMS, we could generate +VcDummy and VcDummy\_spm on the first try every time. diff --git a/docs/todo_list.md b/docs/todo_list.md new file mode 100644 index 0000000..ee23b61 --- /dev/null +++ b/docs/todo_list.md @@ -0,0 +1,246 @@ +# ToDo items + +This is a temporary list of todo items for the PCC build system pilot. +These should be moved to JIRA at some point in time. + +## Target Link + +* How to handle State Flow function classes, to avoid static data to not + be allocated to a defined memory area? Right now they are set to STATIC_FNC, + but probably they shoud be set to default, and the Templates should be + updated in the TL-data dictionary + + * Reset of subsystems and ports + + * State flow objects. + +## Matlab + +* Change the parsing for configurations, so that the workaround for + enabled subsystems with reset (no TL-preprocessor only macro), is + detected as a configuration + +* Create a separate class for the ts datastore block. Now it uses + EXTERN_GLOBAL_ALIAS, which is used for all Core-blocks (low prio, as + all models uses the ts-block, which means that the header file + VcUnitTsDefines is included in all models anyway) + +* Remove the class EXTERN_CAL_ALIAS? Is this class used for anything? + +* Check that the new configuration with TL pre-processor block, works in MIL. + Probably the header file MT_Compileswitches is needed for the simulation + for it to work. + + * Add the matlab ts variable to the constant to the macro definition + block. + +* Change the format of the configs key to python format (which saves time + in the total build) + +* NVM-ram definition script - parse stateflow for NVM classes! + + * Make a separate Matlab function for parsing stateflow variables + +* generateTLUnit + + * Remove workaround for a TL-problem in replaceCodeSwitch.m, + where a macro cannot be used as a constant and a TL preprocessor block + remove if that is solved in TL. + +## Python + +* How will the interface check work with models with different names, but + the same signal names? Test! + +* Where to remove VcDebug*? + consider removing them from the Unitdefinition, and adding them + in the buildsystem if debug is enabled + +* Document the format for the LocalDefines.h files + +* Consider refactoring Local defines. Make that file a json definition, + and include the result in the global config header file. + +* Consider using either format or % for string formatting. This is now + mixed in the code + +* The names for the debug switches are not according to the naming convention. + Shall we correct his? + +* Consider if we shall separate Bool and the other one byte data types, + as some CPUs have HW bit addressing (think infineon has that)? + +* Check the matlab scripts *parseModelInfo.m* and *parseCodeSwitches.m* and + find the bug, which generates empty configs. Should be ['all']. + + * In VcPpmPsm: yVcEc_B_AutoStartRcfSet, yVcEc_B_CEMNodeAlive, + sVcScIn_v_VehSpdLgtMax, and sVcEc_Te_EngClnt have empty configs. + * **PROBABLE ERROR** Input signals which are unused due to using + goto-blocks without corresponding from-blocks. When opening a model, + this is checked for, but only on the top level subsystem. + Fix this check, so that it runs on all levels of subsystems. + +* Add a method for retreiving the core ids from the unit definitions file + (see :doc:`unit_config`) + +## Done items + +* The UnitConfigs._parse_all_unit_configs method doesn’t seem to parse all json-configs. + If there is several versions of one unit. E.g. VcAesSupM and VcAesSupM__gen3, + both of these unit-config files seems not to be parsed. + + * Only parses units in the units.json config list. This list was not updated. + * Dependability functions (and even Vcc_Lib blocks) uses a class CVC_VAR_STAT. + This class is currently not included in the powertrain_build TL-DD. Add this class. + Furthermore, how to handle the ASIL classes for lib-block which set classes in the init-scripts. + +* Variables are both in "outputs" and "locals" (example VcAesSupM__gen3, yVcAesSupM_B_SupChrgrErr) + +* The parsing of variables for the json file does not remove the "__gen3" suffix for variable names. + +* Write email to dSpace regarding: + + * Optimization of pre-processor directives. Why are they considered as control flow? + Give example of calibration constant cVcAesVnt_B_UseOldBrkSig, + which is removed even though it is not "MOVEABLE". + +* A2L-file is currently generated by TL => All parameters are included in the A2L + in the final version the unit definition file (.json). mergeA2l checks the configuration for all labels, + variables, and function definition, and removes them if they are not included. + +* Remove the local defs from the FeatureCOnfigs.gen_unit_cfg_header_file() (VcCodeSwDefines.h). + +* Generation of the Ts macro for all the units. + This is needed to reflect the schedulilng frequency of the function in the current project. + + * The models need to be updated with another name than the 'ts'. + E.g. ts_[unit_name], and the class should be changed to an external macro. + Add this change to the model conversion script. + * **DONE** - A header file which defines the scheduling defines for all units. + * The above file needs to be included in all files. + * **DONE** - a matlab function updateTsDatastore.m is created. + +* OPortMvd.mdl does not seem to have the outports moved. + + * LookUnderMasks has to be 'on', as the top. + +* Handling of NVM. I.E. + + * NVM-Ram blocks includes references to CVC_EXT8/16/32 in the mask init code + -> they need to be replaced by the new blocks. + * Parse the simulink models, and generate the unit definition information for NVM (Matlab-script). + * Generation of structs and defines? Check the Matlab implementation for a specification. + There is no matlab-implementation! + +* generateTLUnit + + * When generating units in isolation, it is possible to get the same file name + for definitions and tables. E.g. tl_defines_AF.h. + * par.m files are not loaded properly in the init-script. + Update to latest gen3 env will probably solve this problem. + * Add the newScripts folder and subfolders to the matlab path (init script?). + * Run the postprocess_source_files after code generation on all c&h-files. + +* Other Matlab issues: + + * The new NVM block gives algebraic loopbacks in some implementations, + the block needs to be redesigned to be able to be a drop in replacement for the old block. + +* Add VcConst source code to output/SourceCode. + +* Generate did defines does not work, no Floats are defines! Fix this! + +* Add change models to generate the init function, and not the Restart function. + + * No, the code gets messier as the INIT function is reserved for the init of the DISP* classes. + Keep the old way of generating the code. + +* Check the debug switches for input and output parametes. + Are both allowed, if so check that the debug functions are called both at the beginning and + the end of the time raster, in the matlab implementation. + + * Matlab has debug_in and debug_out, uppdate the gen debug script and the sched script. + +* Missing #include "CVC_DISP_END.h". + + * VcVmcEm.h is missing a #include “CVC_DISP_END.h†at line 4423ish. + Is this a TL code generation bug? rerun codegen for VcVmcEm. + * VcTrsmShfShkMon.h at line 1451. + * VcSpMon.h at line 911. + * VcSpEc.c line ? (after defines section). + * VcDeTfr.c line 605 (after defines section). + +* Is The LocalConfig file is overwritten after a model update? No not any more. + +* StateFlow objects are not possible to remove with TL-preprocessor blocks. + + * Identify State flow models which are under TL preprocessor blocks, and refactor those models, + by moving the stateflow model to a separate simulink model. + +* Model or DD-fault : The init function is not in the CVC_CODE section! + (The same behaviour exists in the current build as well). + Updated DD, set property Restart function name to "default". + +* replaceNVMBlocks + +* split unit json-config file into two files. One for the interface, and one for the rest of the info. + The interface config needs to be loaded for all units to perform the interface check. + The other file only needs to be loaded for the units within the project being built. + +## Moved to JIRA + +* Add a prefix to subsystem names which will avoid compilation errors when, + subsystem names does start with numbers after the structure number. + E.g. 1210_12VStartEnable should not be allowed. + +* Search for all constant blocks, and idetify which includes a codeswitch. + Replace the identified blocks with macros (use the VccLib block). + +* Handling of NVM. I.E. + + * Vectors are not supported. Add vector support! + * Memory from earlier codegenerations not implemented. Implement! + * A2L file generation for NVM-ram needs to be **IMPLEMENTED**! + +* Local defines: + + * Add the model name as a prefix to all local defines, to ensure a separate namespace. + This is needed in the scripts, as all names of the defines all units are aggregated to one dict. + +* Dependability models have the wrong classes, so they will use the normal memory areas. + The models need to be updated with the new TL dependabililty variable classe, + which are defined in the updated DD. + +* Update powertrain_build to handle classes with the format "ASIL/CVC_**ASIL*[ABC]". + +* Build shall fail at the end, and all errors shall presented + (avoids running the script many times, and gradually finding the latent errors) + (This could be a requirement). + + * Refactor code so that each function stores errors, and returns them at the end. + +* Consider moving the reading of config files to the classes that abracts the configs. + +* VcCoreDummy.c does not include the supplier header file. + This must be fixed, preferably via a supplier independent file. + + * Have included VcSupplierCoreAbstraction.h, it contains some defines, which might make it not compile. + Needs to be tested. + +* All functions should return an error log, and continue the build. + Stop the build at the end, and present all errors. + +* The debug functions are not scheduled. Add this! + + * Make it an option to generate debug functionality (this could be removed for production SW). + * Currently all variables regardless of the time rasters they are used in, + is set in the beginning of each time raser. This costs some extra cpu performance. + Consider changing this. + +* If the legacy excel configuration files are going to be used for more than a few more months, + write a project consistency check that checks that all config files have the same projects in them. + In the test project, projects were missing in the SPM_Codeswitch_Setup.xls, + that is defined in the SPMEMSInterfaceRequirements.xls. + +* Move the tmp source code generation folder to a separate location outside the models directory + (as it is not possible to delete them until matlab is closed). diff --git a/docs/unit_config.md b/docs/unit_config.md new file mode 100644 index 0000000..7257287 --- /dev/null +++ b/docs/unit_config.md @@ -0,0 +1,255 @@ +# Unit definition file + +This unit definition file contains all the meta data needed for the build system to include the software unit in the build and to create the necessary files (e.g. A2L-files, NVM allocation). It is also used to perform consistency checks in the system. + +For TargetLink models, this unit definition file is created by the source generation scripts. + +The unit definition file contains nine major keys - version, outports, inports, nvm, core, dids, pre_procs, local_vars and calib_consts. These are described below. + +TODO: Consider changing name from unit configuration to unit definition. + +Example config_*.json: + +```json +{ + "version": "0.2.1", + "outports": { + "sVcPemAlc_D_EngLoadReqEl": { + "handle": "VcPemAlc/VcPemAlc/Subsystem/VcPemAlc/tlop_VcAc_Tq_AcLoad5", + "name": "sVcPemAlc_D_EngLoadReqEl", + "configs": ["all"], + "description": "Request change in electrical loads controlled by CEM", + "type": "Int16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": -32768, + "max": 32767, + "class": "CVC_EXT"}}, + "inports": { + "sVcEc_n_Eng": { + "handle": "VcPemAlc/VcPemAlc/Subsystem/VcPemAlc/tlip_VcEc_n_Eng", + "name": "sVcEc_n_Eng", + "configs": [ + ["all"], + ["Vc_Pem_Alc_B_CodegenFastCat == 1"], + ["Vc_Pem_Alc_B_CodegenDpfRegen == 1"]], + "description": "Engine speed", + "type": "Float32", + "unit": "rpm", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10000, + "class": "CVC_EXT"}}, + "calib_consts": { + "cVcAesAir_B_ThrCtrlStrtWght": { + "type": "Bool", + "unit": "g/s", + "description": "Switch to weight target cylinder flow during hand-over from start throttle", + "max": "-", + "min": "-", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesAir/VcAesAir/Subsystem/VcAesAir/VcAesAir/1_AirTarDyn/11_CylTarStrt/B_ThrCtrlStrtWght", + "configs": ["all"], + "width": [1]}}, + "local_vars": { + "rVcAesAir_m_CylTarAct": { + "type": "Float32", + "unit": "mg/stk", + "description": "Target cylinder charge flow for aircharge control", + "max": "5000", + "min": "0", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesAir/VcAesAir/Subsystem/VcAesAir/VcAesAir/1_AirTarDyn/11_CylTarStrt/Switch1", + "configs": ["all"], + "width": 1}}, + "core": { + "Events": { + "VcEvImmoBCM": { + "API_blk": [ + { + "path": "VcPpmImob/VcPpmImob/Subsystem/VcPpmImob/VcPpmImob/1000_ImobConnectionLayer/1600_Diag/1620_CoreIfNew/Dem_SetEventStatusPF1", + "config": [ + "Vc_NewDiagnosticCoreIF == 1"]}, + { + "path": "VcPpmImob/VcPpmImob/Subsystem/VcPpmImob/VcPpmImob/1000_ImobConnectionLayer/1600_Diag/1620_CoreIfNew/Dem_SetEventStatusPP1", + "config": [ + "Vc_NewDiagnosticCoreIF == 1"]}], + "blk_name": "NamedConstant1", + "subsystem": "VcPpmImob/VcPpmImob/Subsystem/VcPpmImob/VcPpmImob/1000_ImobConnectionLayer/1600_Diag/1620_CoreIfNew", + "API_blk_type": "Dem_SetEventStatus Pre-Passed", + "description": "", + "type": "", + "unit": "", + "offset": "", + "lsb": "", + "min": "", + "max": "", + "class": ""} + }, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {}}, + "dids": { + "yVcPpmPsm_B_DriveCycleActive": { + "name": "yVcPpmPsm_B_DriveCycleActive", + "description": "Driver has entered the driving cycle 1= Active 0 = Not Active", + "handle": "VcPpmPsm/VcPpmPsm/Subsystem/VcPpmPsm/yVcPsm_B_DriveCycleActive", + "configs": ["Vc_D_CodegenHev > 0"], + "type": "Bool", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "NaN", + "max": "NaN", + "class": "CVC_DISP"}}, + "nvm": { }, + "pre_procs" : [ + "Vc_Aes_TrboM_B_CodeGen2Trbo", + "Vc_Aes_TrboM_B_CodeGenBstPeak", + "Vc_Aes_TrboM_B_CodeGenTrbo", + "Vc_Aes_TrboM_B_CodeGenTrboMode06", + "Vc_Aes_TrboM_B_CodeGenTrboOverSpd"] +} +``` + +## Unit definition data + +### outports, inports, calib_consts, local_vars and nvm + +Outports contains all the signals (variables) which the unit produces. +Inports contains all signals used from other units, to perform the unit's task. +calib_consts holds the definition of all the calibration constants in the unit. +local_vars holds the definition of unit internal variables possible to measure. +nvm blocks defines the units use of non-volatile memory. + +The keys outports, inports and nvm have the following keys, which defines them: + +### handle + +This is a handle to where the variable/parameter is created (outports) or used (inports & nvm) +For TargetLink this is a string identifying the block in the model +e.g. "VcPemAlc/VcPemAlc/Subsystem/VcPemAlc/yVcVmcPmm_B_SsActive9". + +### name + +The name of the variable or parameter. + +### configs + +Which codeswitches this variable depends on. +For TargetLink this information is parsed from the model structure, +and depends on the use of pre-processor directives. + +Can have the following formats; + +* a list of lists of config strings + * [[cs1 and cs2] or [cs3 and cs4]]. +* list of config strings, + * [cs1 and cs2]. +* or a string + * (cs): + +E.g. [["Vc_Pem_Alc_B_CodegenFastCat == 1"],["Vc_Pem_Alc_B_CodegenDpfRegen == 1"]] +means that the signal is active in the configuration if the following +configuration expression evaluates to TRUE +(Vc_Pem_Alc_B_CodegenFastCat == 1) OR (Vc_Pem_Alc_B_CodegenDpfRegen == 1) + +### description + +A string describing the variable/parameter. + +### type + +The data type of the signal. Valid types are UInt8, UInt16, UInt32, Int8, Int16, Int32, Bool and Float32. + +### unit + +The name if the unit of the variable/parameter. + +### offset + +The offset used to convert the variable value from HEX to Physical. + +### lsb + +The value of a bit (lsb - least significant bit) +The factor used to convert the variable value from HEX to Physical. + +### min + +The minimum value of the variable. + +### max + +The maximum value of the variable. + +### class + +The storage class of the variable. I.e. which type of memory the variable/parameter is assigned to. + +### core + +The units core ids have the following different types - Events, IUMPR, FIDs, TestID and Ranking (which is not a part of the core, but is included here for simplicity) + +TODO: Remove some of the keys for the Core Identifiers. subsystem, type, unit, offset, lsb, min, max, class is not needed for these blocks. + +```json +{ + "Events": { + "NameOfId": { + "API_blk": [ + { + "path": "VcPpmImob/VcPpmImob/Subsystem/VcPpmImob/VcPpmImob/1000_ImobConnectionLayer/1600_Diag/1620_CoreIfNew/Dem_SetEventStatusPF1", + "config": ["Vc_NewDiagnosticCoreIF == 1"]}, + { + "path": "VcPpmImob/VcPpmImob/Subsystem/VcPpmImob/VcPpmImob/1000_ImobConnectionLayer/1600_Diag/1620_CoreIfNew/Dem_SetEventStatusPP1", + "config": ["Vc_NewDiagnosticCoreIF == 1"]}], + "blk_name": "NamedConstant1", + "subsystem": "VcPpmImob/VcPpmImob/Subsystem/VcPpmImob/VcPpmImob/1000_ImobConnectionLayer/1600_Diag/1620_CoreIfNew", + "API_blk_type": "Dem_SetEventStatus Pre-Passed", + "description": "", + "type": "", + "unit": "", + "offset": "", + "lsb": "", + "min": "", + "max": "", + "class": "" + } + } +} +``` + +The first key under the ID-type key, is the name of the ID. The value of that +key is a dict with the following keys: + +### API_blk + +The value of this key is a list of dicts, these dicts defines the path to all +the instances where this ID is used in the model, and in which configurations +the ID is active + +### API_blk_type + +The value of this key is a string, which defines the type of API block that is +used for this Id + +### blk_name + +The value of this key is a string, which defines the name of the block in simulink + +### dids + +The dids defined in the unit + +### pre_procs + +Contains a list of strings, which defines the preprocessor names used in the +unit for configuration diff --git a/pybuild/__init__.py b/pybuild/__init__.py new file mode 100644 index 0000000..4b13e0c --- /dev/null +++ b/pybuild/__init__.py @@ -0,0 +1,37 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Main package of the pybuild application.""" +from pbr.version import VersionInfo +from pathlib import Path +from pybuild.lib import logger, helper_functions +from pybuild.environmentcheck import check_python_string + +LOGGER = logger.create_logger(__file__) +__version__ = VersionInfo('pt-pybuild').release_string() +LOGGER.info('Current pybuild version is %s', __version__) +__config_version__ = '0.2.1' +__required_python_lower__ = '3.6' +__required_python_upper__ = '3.10' + + +workspace = helper_functions.get_repo_root() +requirement_path = Path( + workspace, 'Script', 'PyTools', 'requirements.txt' + ) +if requirement_path.exists(): + with requirement_path.open("r") as requirement_file: + expected_package = "pt-pybuild==" + __version__ + for line in requirement_file: + if expected_package in line: + LOGGER.info('PyBuild version matched requirements!') + break + elif "pt-pybuild==" in line and expected_package not in line: + LOGGER.warning('PyBuild version does not match requirements!') + break + +else: + LOGGER.warning('Current repository does not have a requirement file' + + ' in expected location: %s', str(requirement_path)) + +check_python_string(__required_python_lower__, __required_python_upper__) diff --git a/pybuild/a2l.py b/pybuild/a2l.py new file mode 100644 index 0000000..efac8fc --- /dev/null +++ b/pybuild/a2l.py @@ -0,0 +1,582 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module for a2l-file generation.""" + +import sys +import re +import logging +from string import Template +from pprint import pformat +from pybuild.problem_logger import ProblemLogger +from pybuild.types import a2l_type, a2l_range + +LOG = logging.getLogger() + + +class A2l(ProblemLogger): + """Class for a2l-file generation.""" + + def __init__(self, var_data_dict, prj_cfg): + """Generate a2l-file from provided data dictionary. + + Args: + var_data_dict (dict): dict defining all variables and parameters in a2l + + Sample indata structure: + :: + + { + "function": "rVcAesSupM", + "vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "var": { + "type": "Float32", + "cvc_type": "CVC_DISP" + }, + "a2l_data": { + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "bitmask": None, + "x_axis": None, + "y_axis": None, + }, + "array": None + } + } + } + """ + super().__init__() + self._var_dd = var_data_dict + self._prj_cf = prj_cfg + self._axis_ref = None + self._axis_data = None + self._compu_meths = None + self._rec_layouts = None + self._fnc_outputs = None + self._fnc_inputs = None + self._fnc_locals = None + self._fnc_char = None + # generate the a2l string + self._gen_a2l() + + def gen_a2l(self, filename): + """Write a2l-data to file. + + Args: + filename (str): Name of the generated a2l-file. + """ + with open(filename, 'w', encoding="utf-8") as a2l: + a2l.write(self._a2lstr) + self.debug('Generated %s', filename) + + def _gen_a2l(self): + """Generate an a2l-file based on the supplied data dictionary.""" + self._gen_compu_methods() + # self.debug('_compu_meths') + # self.debug(pp.pformat(self._compu_meths)) + self._find_axis_ref() + # self.debug("_axis_ref") + # self.debug(pp.pformat(self._axis_ref)) + self._find_axis_data() + self._gen_record_layouts_data() + # self.debug("_axis_data") + # self.debug(pp.pformat(self._axis_data)) + # self.debug("_rec_layouts") + # self.debug(pp.pformat(self._rec_layouts)) + self._check_axis_ref() + + output_meas = '' + output_char = '' + output_axis = '' + + self._fnc_outputs = [] + self._fnc_inputs = [] + self._fnc_locals = [] + self._fnc_char = [] + + for var, data in self._var_dd['vars'].items(): + try: + cvc_type = data['var']['cvc_type'] + if 'CVC_DISP' in cvc_type: + output_meas += self._gen_a2l_measurement_blk(var, data) + self._fnc_locals.append(var) + elif 'CVC_CAL' in cvc_type: + self._fnc_char.append(var) + srch = re.search('_[rcxyXY]$', var) + if srch is None: + output_char += self._gen_a2l_characteristic_blk(var, data) + else: + output_axis += self._gen_a2l_axis_pts_blk(var, data) + elif cvc_type == 'CVC_NVM': + output_meas += self._gen_a2l_measurement_blk(var, data) + self._fnc_locals.append(var) + elif cvc_type == 'CVC_IN': + self._outputs = None + self._inputs = None + self._fnc_inputs.append(var) + elif cvc_type == 'CVC_OUT': + self._fnc_outputs.append(var) + except TypeError: + self.warning("Warning: %s has no A2l-data", var) + except Exception as e: + self.critical("Unexpected error: %s", sys.exc_info()[0]) + raise e + # generate COMPU_METHS + output_compu_m = '' + for k in self._compu_meths: + output_compu_m += self._gen_a2l_compu_metod_blk(k) + + # generate FUNCTIONS + output_funcs = self._gen_a2l_function_blk() + + # generate RECORD_LAYOUTS + output_recl = '' + for k in self._rec_layouts: + output_recl += self._gen_a2l_rec_layout_blk(k) + + output = output_char + output_axis + output_meas + \ + output_compu_m + output_funcs + output_recl + # self.debug(pp.pformat(self._var_dd)) + # self.debug('Output:') + # self.debug(output) + self._a2lstr = output + + def _find_axis_data(self): + """Parse all variables and identify axis points. + + TODO: Change this function to check for names with _r | _c + suffixes + """ + self._axis_data = {} + variable_names = self._var_dd['vars'].keys() + for name in variable_names: + x_nm = y_nm = None + if name + '_x' in variable_names: + x_nm = name + '_x' + if name + '_y' in variable_names: + y_nm = name + '_x' + if x_nm is not None or y_nm is not None: + self._axis_data[name] = (x_nm, y_nm) + + def _find_axis_ref(self): + """Parse all variables and identify which are defined as axis points.""" + self._axis_ref = {} + + for var, data in self._var_dd['vars'].items(): + if data.get('a2l_data') is not None: + x_axis = data['a2l_data'].get('x_axis') + y_axis = data['a2l_data'].get('y_axis') + if x_axis is not None: + if x_axis in self._axis_ref: + self._axis_ref[x_axis]['used_in'].append((var, 'x')) + else: + self._axis_ref[x_axis] = {'used_in': [(var, 'x')]} + if y_axis is not None: + if y_axis in self._axis_ref: + self._axis_ref[y_axis]['used_in'].append((var, 'y')) + else: + self._axis_ref[y_axis] = {'used_in': [(var, 'y')]} + + @classmethod + def _get_a2d_minmax(cls, a2d, ctype=None): + """Get min max limits from a2l data. + + Gives max limits if min/max limits are undefined. + """ + typelim = a2l_range(ctype) + minlim = a2d.get('min') + if minlim is None or minlim == '-': + minlim = typelim[0] + maxlim = a2d.get('max') + if maxlim is None or maxlim == '-': + maxlim = typelim[1] + return minlim, maxlim + + def _check_axis_ref(self): + """Check that the axis definitions are defined in the code.""" + undef_axis = [ax for ax in self._axis_ref + if ax not in self._var_dd['vars']] + if undef_axis: + self.warning(f'Undefined axis {pformat(undef_axis)}') + + def _gen_compu_methods(self): + """Generate COMPU_METHOD data, and add it into the var_data_dict.""" + self._compu_meths = {} + for var, data in self._var_dd['vars'].items(): + a2d = data.get('a2l_data') + if a2d is not None: + + lsb = self._calc_lsb(a2d['lsb']) + offset_str = str(a2d['offset']) + is_offset_num = bool(re.match('[0-9]', offset_str)) + if is_offset_num: + offset = float(offset_str) + else: + offset = 0 + key = (lsb, offset, a2d['unit']) + self._var_dd['vars'][var]['compu_meth'] = key + name = self._compu_key_2_name(key) + if key in self._compu_meths: + self._compu_meths[key]['vars'].append(var) + else: + self._compu_meths[key] = {'name': name, + 'vars': [var], + 'coeffs': self._get_coefs_str(lsb, + offset)} + + def _compu_key_2_name(self, key): + """Generate a COMPU_METHOD name from the keys in the name. + + Args: + key (tuple): a list with compumethod keys (lsb, offset, unit) + """ + conversion_list = [(r'[\./]', '_'), ('%', 'percent'), + ('-', 'None'), (r'\W', '_')] + name = f"{self._var_dd['function']}_{key[0]}_{key[1]}_{key[2]}" + for frm, to_ in conversion_list: + name = re.sub(frm, to_, name) + return name + + @staticmethod + def _array_to_a2l_string(array): + """Convert c-style array definitions to A2L MATRIX_DIM style.""" + if not isinstance(array, list): + array = [array] + dims = [1, 1, 1] + for i, res in enumerate(array): + dims[i] = res + return f"MATRIX_DIM {dims[0]} {dims[1]} {dims[2]}" + + @staticmethod + def _get_coefs_str(lsb, offset): + """Calculate the a2l-coeffs from the lsb and offs fields. + + The fields are defined in the a2l_data dictionary. + """ + return f"COEFFS 0 1 {offset} 0 0 {lsb}" + + @staticmethod + def _calc_lsb(lsb): + """Convert 2^-2, style lsbs to numericals.""" + if isinstance(lsb, str): + if lsb == '-': + return 1 + shift = re.match(r'(\d+)\^([\-+0-9]+)', lsb) + if shift is not None: + lsb_num = pow(int(shift.group(1)), int(shift.group(2))) + else: + lsb_num = float(lsb) + return lsb_num + return lsb + + def _gen_record_layouts_data(self): + """Generate record layouts.""" + self._rec_layouts = {} + for var, data in self._var_dd['vars'].items(): + if data.get('a2l_data') is not None: + a2l_unit = a2l_type(data['var']['type']) + # if calibration data has a suffix of _x of _y it is a axis_pts + srch = re.search('_[xyXY]$', var) + if srch is not None: + name = a2l_unit + "_X_INCR_DIRECT" + self._rec_layouts[name] = f"AXIS_PTS_X 1 {a2l_unit} INDEX_INCR DIRECT" + data['rec_layout'] = name + else: + name = a2l_type(data['var']['type']) + "_COL_DIRECT" + self._rec_layouts[name] = f"FNC_VALUES 1 {a2l_unit} COLUMN_DIR DIRECT" + data['rec_layout'] = name + + def _get_inpq_data(self, inp_quant): + """Get the necessary InputQuantity parameters.""" + if inp_quant is not None: + if inp_quant in self._var_dd['vars']: + return inp_quant + return 'NO_INPUT_QUANTITY' + + # Bosh template + _meas_tmplt = Template(""" + /begin MEASUREMENT + $Name /* Name */ + "$LongIdent" /* LongIdentifier */ + $Datatype /* Datatype */ + $Conversion /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + $LowerLimit /* LowerLimit */ + $UpperLimit /* UpperLimit */ + $OptionalData + ECU_ADDRESS 0x00000000 + /end MEASUREMENT +""") + + # Denso template + _meas_tmplt_nvm = Template(""" + /begin MEASUREMENT + $Name /* Name */ + "$LongIdent" /* LongIdentifier */ + $Datatype /* Datatype */ + $Conversion /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + $LowerLimit /* LowerLimit */ + $UpperLimit /* UpperLimit */ + $OptionalData + /end MEASUREMENT +""") + + def _gen_a2l_measurement_blk(self, var_name, data): + """Generate an a2l MEASUREMENT block.""" + opt_data = 'READ_WRITE' + a2d = data.get('a2l_data') + if a2d is not None: + c_type = data['var']['type'] + # if c_type == 'Bool': + # opt_data += '\n' + ' ' * 8 + "BIT_MASK 0x1" + if a2d.get('bitmask') is not None: + opt_data += '\n' + ' ' * 8 + "BIT_MASK %s" % a2d['bitmask'] + if data.get('array'): + opt_data += '\n' + ' ' * 8 + \ + self._array_to_a2l_string(data['array']) + + ecu_supplier, _ = self._prj_cf.get_ecu_info() + if a2d.get('symbol'): + if ecu_supplier == 'Denso': + opt_data += '\n' + ' ' * 8 + 'SYMBOL_LINK "%s" %s' % (a2d['symbol'], a2d.get('symbol_offset')) + LOG.debug('This a2l is for Denso %s', opt_data) + elif ecu_supplier in ['RB', 'CSP', 'HI', 'ZC']: + var_name = a2d['symbol'] + '._' + var_name + LOG.debug('This a2l is for %s %s', ecu_supplier, var_name) + + dtype = a2l_type(c_type) + minlim, maxlim = self._get_a2d_minmax(a2d, c_type) + conv = self._compu_meths[data['compu_meth']]['name'] + + if a2d.get('symbol') and ecu_supplier == 'Denso': + res = self._meas_tmplt_nvm.substitute(Name=var_name, + LongIdent=a2d['description'].replace('"', '\\"'), + Datatype=dtype, + Conversion=conv, + LowerLimit=minlim, + UpperLimit=maxlim, + OptionalData=opt_data) + else: + res = self._meas_tmplt.substitute(Name=var_name, + LongIdent=a2d['description'].replace('"', '\\"'), + Datatype=dtype, + Conversion=conv, + LowerLimit=minlim, + UpperLimit=maxlim, + OptionalData=opt_data) + return res + return None + + _char_tmplt = Template(""" + /begin CHARACTERISTIC + $Name /* Name */ + "$LongIdent" /* LongIdentifier */ + $Type /* Datatype */ + 0x00000000 /* address: $Name */ + $Deposit /* Deposit */ + 0 /* MaxDiff */ + $Conversion /* Conversion */ + $LowerLimit /* LowerLimit */ + $UpperLimit /* UpperLimit */$OptionalData + /end CHARACTERISTIC +""") + + def _gen_a2l_characteristic_blk(self, var, data): + """Generate an a2l CHARACTERISTIC block.""" + opt_data = '' + a2d = data.get('a2l_data') + type_ = 'WRONG_TYPE' + if a2d is not None: + arr = data.get('array') + if arr is not None: + arr_dim = len(arr) + else: + arr_dim = 0 + # Check is axis_pts are defined for the axis, if not make the + # type a VAL_BLK with matrix dimension, otherwise set + # a CURVE or MAP type + + # If arr_dim is 0 the CHARACTERISTIC is a value + if arr_dim == 0: + type_ = 'VALUE' + elif arr_dim == 1: + x_axis_name = var + '_x' + # Check if axis variable is defined + if x_axis_name in self._var_dd['vars'].keys(): + type_ = 'CURVE' + opt_data += self._gen_a2l_axis_desc_blk(self._get_inpq_data(a2d.get('x_axis')), + x_axis_name) + else: + type_ = 'VAL_BLK' + opt_data += self._array_to_a2l_string(data['array']) + elif arr_dim == 2: + x_axis_name = var + '_x' + y_axis_name = var + '_y' + # Check if axis variable is defined + nbr_def_axis = 0 + if x_axis_name in self._var_dd['vars'].keys(): + nbr_def_axis += 1 + if y_axis_name in self._var_dd['vars'].keys(): + nbr_def_axis += 1 + if nbr_def_axis == 2: + type_ = 'MAP' + inpq_x = self._get_inpq_data(a2d['x_axis']) + opt_data += self._gen_a2l_axis_desc_blk(inpq_x, x_axis_name) + inpq_y = self._get_inpq_data(a2d['y_axis']) + opt_data += self._gen_a2l_axis_desc_blk(inpq_y, y_axis_name) + elif nbr_def_axis == 0: + type_ = 'VAL_BLK' + opt_data += self._array_to_a2l_string(data['array']) + else: + self.warning( + 'MAP %s has only one AXIS_PTS defined, shall be none or two', var) + + minlim, maxlim = self._get_a2d_minmax(a2d) + + res = self._char_tmplt.substitute(Name=var, + LongIdent=a2d['description'].replace('"', '\\"'), + Type=type_, + Deposit=data['rec_layout'], + Conversion=self._compu_meths[data['compu_meth']]['name'], + LowerLimit=minlim, + UpperLimit=maxlim, + OptionalData=opt_data) + return res + self.warning("%s has no A2L-data", var) + return None + # Types ASCII CURVE MAP VAL_BLK VALUE + + _axis_desc_tmplt = Template(""" + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + $inp_quant /* InputQuantity */ + $conv /* Conversion */ + $maxaxispts /* MaxAxisPoints */ + $minlim /* LowerLimit */ + $maxlim /* UpperLimit */ + AXIS_PTS_REF $axis_pts_ref + DEPOSIT ABSOLUTE + /end AXIS_DESCR""") + + def _gen_a2l_axis_desc_blk(self, inp_quant, axis_pts_ref): + """Generate an a2l AXIS_DESCR block. + + TODO: Check that the AXIS_PTS_REF blocks are defined + """ + out = '' + inp_quant_txt = self._get_inpq_data(inp_quant) + axis_pts = self._var_dd['vars'][axis_pts_ref] + conv = self._compu_meths[axis_pts['compu_meth']]['name'] + max_axis_pts = axis_pts['array'][0] + min_lim, max_lim = self._get_a2d_minmax(axis_pts['a2l_data']) + out += self._axis_desc_tmplt.substitute(inp_quant=inp_quant_txt, + conv=conv, + maxaxispts=max_axis_pts, + minlim=min_lim, + maxlim=max_lim, + axis_pts_ref=axis_pts_ref) + return out + + _compu_meth_tmplt = Template(""" + /begin COMPU_METHOD + $name /* Name */ + "$longident" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "$format" /* Format */ + "$unit" /* Unit */ + $coeffs + /end COMPU_METHOD +""") + + def _gen_a2l_compu_metod_blk(self, key): + """Generate an a2l COMPU_METHOD block.""" + cmeth = self._compu_meths[key] + name = self._compu_key_2_name(key) + out = self._compu_meth_tmplt.substitute(name=name, + longident='', + format='%11.3', + unit=key[2], + coeffs=cmeth['coeffs']) + return out + + _axis_tmplt = Template(""" + /begin AXIS_PTS + $name /* Name */ + "$longident" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + $deposit /* Deposit */ + 0 /* MaxDiff */ + $convert /* Conversion */ + $max_ax_pts /* MaxAxisPoints */ + $minlim /* LowerLimit */ + $maxlim /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS +""") + + def _gen_a2l_axis_pts_blk(self, var, data): + """Generate an a2l AXIS_PTS block.""" + deposit = data['rec_layout'] + conv = self._compu_meths[data['compu_meth']]['name'] + max_axis_pts = data['array'][0] + min_lim, max_lim = self._get_a2d_minmax(data['a2l_data']) + out = self._axis_tmplt.substitute(name=var, + longident=data['a2l_data']['description'], + deposit=deposit, + convert=conv, + max_ax_pts=max_axis_pts, + minlim=min_lim, + maxlim=max_lim) + return out + + _rec_layout_tmplt = Template(""" + /begin RECORD_LAYOUT + $name /* Name */ + $string + /end RECORD_LAYOUT +""") + + def _gen_a2l_rec_layout_blk(self, key): + """Generate an a2l AXIS_PTS block.""" + string = self._rec_layouts[key] + out = self._rec_layout_tmplt.substitute(name=key, + string=string) + return out + + def _gen_a2l_function_blk(self): + """Generate an a2l FUNCTION block.""" + out = '\n /begin FUNCTION\n' + out += f' {self._var_dd["function"]} /* Name */\n' + out += ' "" /* LongIdentifier */\n' + if self._fnc_char: + out += ' /begin DEF_CHARACTERISTIC\n' + for idf in self._fnc_char: + out += f' {idf} /* Identifier */\n' + out += ' /end DEF_CHARACTERISTIC\n' + if self._fnc_inputs: + out += ' /begin IN_MEASUREMENT\n' + for idf in self._fnc_inputs: + out += f' {idf} /* Identifier */\n' + out += ' /end IN_MEASUREMENT\n' + if self._fnc_locals: + out += ' /begin LOC_MEASUREMENT\n' + for idf in self._fnc_locals: + out += f' {idf} /* Identifier */\n' + out += ' /end LOC_MEASUREMENT\n' + if self._fnc_outputs: + out += ' /begin OUT_MEASUREMENT\n' + for idf in self._fnc_outputs: + out += f' {idf} /* Identifier */\n' + out += ' /end OUT_MEASUREMENT\n' + out += ' /end FUNCTION\n' + return out diff --git a/pybuild/a2l_merge.py b/pybuild/a2l_merge.py new file mode 100644 index 0000000..c7ff65b --- /dev/null +++ b/pybuild/a2l_merge.py @@ -0,0 +1,650 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module for merging of a2l-files.""" + +import json +import os +import re +from string import Template + +from pybuild.lib.helper_functions import deep_dict_update +from pybuild.problem_logger import ProblemLogger +from pybuild.a2l_templates import A2lProjectTemplate, A2lSilverTemplate + + +class A2lMerge(ProblemLogger): + """Class for merging of a2l-files.""" + + def __init__(self, prj_cfg, ucfg, a2l_files_unit, a2l_files_gen): + """Merge a2l-files based on provided project configuration. + + Removes symbols not included in the projects unit-config files. + + Args: + prj_cfg (obj): Project config. + ucfg (obj): Unit config. + a2l_files_unit (list of str): Files to merge. + a2l_files_gen (list of str): Files to merge. + """ + super().__init__() + self._prj_cfg = prj_cfg + self._unit_cfg = ucfg + self._per_unit_cfg = ucfg.get_per_unit_cfg() + # generate the a2l string + self._blks = {} + self._removed_symbols = [] + self.a2l = "" + + # ----- Example blocks in a2l (TargetLink) ----- + # + # /begin CHARACTERISTIC + # cVc_B_SeriesHev /* Name */ + # "Series hybrid" /* LongIdentifier */ + # VALUE /* Type */ + # 0x00000000 /* address: cVc_B_SeriesHev */ + # UBYTE_COL_DIRECT /* Deposit */ + # 0 /* MaxDiff */ + # Scaling_3 /* Conversion */ + # 0 /* LowerLimit */ + # 1 /* UpperLimit */ + # /end CHARACTERISTIC + # + # Example of Bosch-nvm signal in nvm: + # + # /begin MEASUREMENT + # nvm_list_32._sVcDclVu_D_Markow /* Name */ + # "No description given" /* LongIdentifier */ + # ULONG /* Datatype */ + # VcNvm_1_0_None /* Conversion */ + # 1 /* Resolution */ + # 0 /* Accuracy */ + # 0 /* LowerLimit */ + # 4294967295 /* UpperLimit */ + # READ_WRITE + # MATRIX_DIM 152 1 1 + # ECU_ADDRESS 0x00000000 + # /end MEASUREMENT + # + # ----- Example blocks in a2l (Embedded Coder) ----- + # + # /begin MEASUREMENT + # /* Name */ sVcAesVe_md_VolmcOffs + # /* Long identifier */ "Volumetric cylinder mass flow offset" + # /* Data type */ FLOAT32_IEEE + # /* Conversion method */ VcAesVe_CM_Float32_g_s + # /* Resolution (Not used) */ 0 + # /* Accuracy (Not used) */ 0 + # /* Lower limit */ -100.0 + # /* Upper limit */ 100.0 + # ECU_ADDRESS 0x0000 /* @ECU_Address@sVcAesVe_md_VolmcOffs@ */ + # /end MEASUREMENT + # + # /begin CHARACTERISTIC + # /* Name */ cVcAesVe_D_VolmcCmpSel + # /* Long Identifier */ "Select compensation factor characterizing deviation from nominal voleff" + # /* Type */ VALUE + # /* ECU Address */ 0x0000 /* @ECU_Address@cVcAesVe_D_VolmcCmpSel@ */ + # /* Record Layout */ Scalar_UBYTE + # /* Maximum Difference */ 0 + # /* Conversion Method */ VcAesVe_CM_uint8 + # /* Lower Limit */ 1.0 + # /* Upper Limit */ 3.0 + # /end CHARACTERISTIC + + self._block_finder = re.compile(r'(?:\s*\n)*' # Optional blank lines + r'(\s*/begin (\w+)\s*' # begin block + r'\n\s*([\w.]+).*?\n' # label. (Bosch-nvm contains the .) + r'.*?' # block definition + r'/end\s+\2)', # end block. Same something as before + flags=re.M | re.DOTALL) + + self._tl_compu_method_parser = re.compile( + r'(?:\s*\n)*(?P' + r'\s*/begin COMPU_METHOD\s*\n' + r'\s*(?P\w*)\s*(/\* Name \*/)?\s*\n' # Name + r'\s*"(?P.*?)"\s*(/\* LongIdentifier \*/.*?)\s*\n' # Long Identifier + r'\s*(?P[A-Z_]*).*\s*\n' # ConversionType + r'\s*"(?P.*)"\s*(/\* Format \*/)?\s*\n' # Format + r'\s*"(?P.*?)"\s*(/\* Unit \*/)?\s*\n' # Unit + r'\s*(?P.*)\s*\n' # COEFFS + r'(?P\s*)/end COMPU_METHOD)', flags=re.M) # No DOTALL, so .* is [^\n]* + + # COMPU_METHOD parser that works with files generated by Embedded Coder + self._ec_compu_method_parser = re.compile( + r'(?:\s*\n)*(?P' + r'\s*/begin COMPU_METHOD\s*\n' + r'\s*(/\* Name of CompuMethod\s*\*/)?\s*(?P\w*)\s*\n' # Name + r'\s*(/\* Long identifier\s*\*/)?\s*"(?P.*?)"\s*\n' # Long Identifier + r'\s*/\* Conversion Type\s*\*/\s*(?P[A-Z_]*)\s*\n' # ConversionType + r'\s*(/\* Format\s*\*/)?\s*"(?P.*?)"\s*\n' # Format + r'\s*(/\* Units\s*\*/)?\s*"(?P.*?)"\s*\n' # Unit + r'\s*/\* Coefficients\s*\*/\s*(?P.*?)\s*\n' # COEFFS + r'(?P\s*)/end COMPU_METHOD)', flags=re.M) # No DOTALL, so .* is [^\n]* + + self._expr_block_meas_kp_blob_parser = re.compile( + r'\/begin\s+(?P\w+)\s+(?P\w+)\s*\n' + r'\s*KP_BLOB\s+(?P

    0x[0-9a-fA-F]+)\s*\n' + r'\s*\/end\s+\1' + ) + + self._compu_methods = {} + self._included_compu_methods = [] + + self._tl_compu_method_template = Template( + '$indentation/begin COMPU_METHOD\n' + '$indentation $name /* Name */\n' + '$indentation "$ID" /* LongIdentifier */\n' + '$indentation $conv_type /* ConversionType */\n' + '$indentation "$disp_format" /* Format */\n' + '$indentation "$unit" /* Unit */\n' + '$indentation $conversion\n' + '$indentation/end COMPU_METHOD' + ) + + # COMPU_METHOD template that looks similar to COMPU_METHOD generated by Embedded Coder + self._ec_compu_method_template = Template( + '$indentation/begin COMPU_METHOD\n' + '$indentation /* Name of CompuMethod */ $name\n' + '$indentation /* Long identifier */ "$ID"\n' + '$indentation /* Conversion Type */ $conv_type\n' + '$indentation /* Format */ "$disp_format"\n' + '$indentation /* Units */ "$unit"\n' + '$indentation /* Coefficients */ $conversion\n' + '$indentation/end COMPU_METHOD' + ) + + for filename in a2l_files_unit: + removed_symbols = self._parse_unit(filename) + self._removed_symbols.extend(removed_symbols) + self.debug('Loaded %s', filename) + for filename in a2l_files_gen: + self._parse_gen(filename) + self.debug('Loaded %s', filename) + + def _parse_unit(self, filename): + """Parse the unit a2l-files and apply a filter to only active parameters.""" + self.debug('Processing %s', filename) + with open(filename, 'r', encoding="ISO-8859-1") as a2lfp: + a2ld = a2lfp.read() + file_path_parts = os.path.split(filename) + unit = file_path_parts[1].split('.')[0] + base_path = file_path_parts[0] + dcl_match = re.search(r'VcDcl[\w]+Mdl(__[\w]+)', base_path) + if dcl_match is not None and 'Mdl' not in unit: + # Hand coded model names including "__" will lead to this, due to name mismatch of .a2l and .json files. + # E.g. VcDclPtrlMdl__denso: + # 1. config_VcDclPtrlMdl__denso.json vs VcDclPtrlMdl__denso.a2l. + # 1.1. Match: unit in self._per_unit_cfg. + # 2. config_VcDclPtrl__denso.json vs VcDclPtrl.a2l. + # 2.1. No match: unit not in self._per_unit_cfg. + old_unit = unit + unit = unit + dcl_match.group(1) + self.info( + 'Found unit %s with .a2l and .json file name mismatch. Using new unit name: %s', + old_unit, + unit + ) + + if unit in self._per_unit_cfg: + u_conf = self._per_unit_cfg[unit] + code_generator = u_conf['code_generator'] if 'code_generator' in u_conf else 'target_link' + else: + u_conf = {} + code_generator = 'target_link' + + if code_generator == 'embedded_coder': + blks = re.findall(r'(?:\s*\n)*(\s*/begin ' + r'(?!PROJECT|HEADER|MODULE|MOD_PAR|MOD_COMMON)(\w+)\s*(?:\n\s*)?' + r'(?:/\*\s*[\w ]+\s*\*/\s*)?(\w+)([\[\d+\]]*).*?\n.*?/end\s+\2)', + a2ld, flags=re.M | re.DOTALL) + else: + blks = re.findall(r'(?:\s*\n)*(\s*/begin (?!PROJECT|MODULE)(\w+)[\n\s]*' + r'(\w+(?:\.\w+)?)([\[\d+\]]*).*?\n.*?/end\s+\2)', a2ld, + flags=re.M | re.DOTALL) + + compu_method_translators = self._parse_compu_methods(a2ld, unit) + unit_blks = {} + removed_symbols = [] + if unit not in self._per_unit_cfg: + # Handcoded a2l without json-files will lead to this. + # Add json files for the handcoded a2l! + # NOTE: Assuming TargetLink + self.debug('%s is not in the units list. Looking for json.', unit) + config_filename = os.path.join( + self._prj_cfg.get_unit_cfg_deliv_dir(), + f'config_{unit}.json') + self.debug('Looking for %s', config_filename) + if os.path.isfile(config_filename): + with open(config_filename, 'r', encoding="utf-8") as config_file: + u_conf = json.load(config_file) + self._handle_config( + code_generator, unit, u_conf, blks, unit_blks, removed_symbols, compu_method_translators + ) + else: + self.warning('%s does not have a unit_cfg json, ' + 'including all a2l-parameters', unit) + for blk_def, type_, label, size in blks: + if type_ == 'COMPU_METHOD': + blk_def, label = self._replace_compu_method(blk_def, label, compu_method_translators) + self.add_block_definition(unit_blks, type_, label, size, blk_def, compu_method_translators) + else: + self._handle_config( + code_generator, unit, u_conf, blks, unit_blks, removed_symbols, compu_method_translators + ) + deep_dict_update(self._blks, unit_blks) + return removed_symbols + + def _handle_config(self, code_generator, unit, u_conf, blks, unit_blks, removed_symbols, compu_method_translators): + """Merge all types of ram for the unit.""" + ram = u_conf['inports'] + ram.update(u_conf['outports']) + ram.update(u_conf['local_vars']) + # TODO: Function the variables and labels needs to be removed from + # the FUNCTION block too + for blk_def, type_, label, size in blks: + remove_excluded_symbol = True + inc = False + if type_ == 'AXIS_PTS': + if label in u_conf['calib_consts']: + inc = True + elif type_ == 'CHARACTERISTIC': + if label in u_conf['calib_consts']: + if label in [axis_label for _, axis_type, axis_label, _ in blks if axis_type == 'AXIS_PTS']: + # AXIS_PTS can be used as CHARACTERISTC but not the other way around. + # If there are duplicates, use the AXIS_PTS. + self.debug('Will not add the block for CHARACTERISTC %s, but will keep it as a symbol,' + ' since it exists as AXIS_PTS', label) + remove_excluded_symbol = False + inc = False + else: + inc = self._handle_axis_ptr_ref_config(u_conf, blk_def, unit) + elif type_ == 'MEASUREMENT': + if label in ram: + key = label if size is None else label + size + if label in u_conf['outports']: + # This unit is producing the measurement. + inc = True + elif key in unit_blks.get(type_, {}): + # This unit is not producing it, and it has already been added + inc = False + else: + # This unit is not producing it, but it has not been added + # Could be external signal, etc. + inc = True + elif type_ == 'COMPU_METHOD': + inc = True + blk_def, label = self._replace_compu_method(blk_def, label, compu_method_translators) + else: + inc = True + if inc: + self.add_block_definition(unit_blks, type_, label, size, blk_def, compu_method_translators) + else: + if remove_excluded_symbol: + removed_symbols.append(label + size) + self.debug('Did not include A2L-blk %s%s', label, size) + if not self._unit_cfg.check_if_in_unit_cfg(unit, label): + if type_ != 'COMPU_METHOD': + self.warning('A2l block %s not in config json file for %s', label, unit) + + if 'FUNCTION' in unit_blks: + unit_blks['FUNCTION'] = self._remove_symbols_from_func_blks( + code_generator, unit_blks['FUNCTION'], removed_symbols + ) + + if 'GROUP' in unit_blks: + unit_blks['GROUP'] = self._remove_symbols_from_grp_blks(unit_blks['GROUP'], removed_symbols) + + def _handle_axis_ptr_ref_config(self, u_conf, blk, unit): + """Remove blocks referencing undefined blocks.""" + ref_re = re.compile(r'\s*AXIS_PTS_REF\s*([\w]*)') + for axis_ptr_ref in ref_re.findall(blk): + if axis_ptr_ref not in u_conf['calib_consts']: + self.debug('Excluding due to %s missing in config', axis_ptr_ref) + return False + if not self._unit_cfg.check_if_in_unit_cfg(unit, axis_ptr_ref): + self.debug('Excluding due to %s not active in config', axis_ptr_ref) + return False + return True + + def add_block_definition(self, unit_blks, type_, label, size, blk_def, compu_method_translators): + """Add block definition to A2L-file.""" + size = '' if size is None else size + blk_def = self._replace_conversions(blk_def, compu_method_translators) + if type_ not in unit_blks: + unit_blks[type_] = {} + unit_blks[type_][label + size] = blk_def + + @staticmethod + def _parse_func_blk(code_generator, fnc_blk): + """Remove the unused symbols from the FUNCTION blocks in the A2L-file. + Parse the FUNCTION block, TL or EC style based on code_generator. + """ + + if code_generator == 'target_link': + pattern = r'\s*/begin\s+FUNCTION\s*?\n\s*(\w+).*?\n\s*"(.*?)".*?\n(.*)' + else: + pattern = r'\s*/begin\s+FUNCTION\s*?\n\s*.*\*/\s*(\w+).*?\n\s*.*\*/\s*"(.*?)".*?\n(.*)' + res = re.match(pattern, fnc_blk, flags=re.M | re.DOTALL) + fnc_name = res.group(1) + long_id = res.group(2) + fnc_dict = { + 'fnc_name': fnc_name, + 'long_id': long_id, + 'body': {} + } + fnc_body = res.group(3) + sb_res = re.findall(r'\s*/begin\s+(\w+[\[\d\]]*)\s*\n\s*' + r'(.*?\n)\s*/end \1', fnc_body, flags=re.M | re.DOTALL) + for sb_name, sub_blk in sb_res: + symbols = set(re.findall(r'\s*(\w+(?:\.\w+)?[\[\d\]]*).*?\n', sub_blk, flags=re.M)) + fnc_dict['body'][sb_name] = symbols + return fnc_dict + + @staticmethod + def _parse_grp_blk(grp_blk): + """Remove the unused symbols from the GROUP blocks in the A2L-file.""" + # parse the GROUP block + res = re.match(r'\s*/begin\s+GROUP\s*?\n\s*.*\*/\s*(\w+).*?\n\s*.*\*/\s*"(.*?)".*?\n(.*)', + grp_blk, flags=re.M | re.DOTALL) + fnc_name = res.group(1) + long_id = res.group(2) + fnc_dict = { + 'fnc_name': fnc_name, + 'long_id': long_id, + 'body': {} + } + fnc_body = res.group(3) + sb_res = re.findall(r'\s*/begin\s+(\w+[\[\d\]]*)\s*\n\s*' + r'(.*?\n)\s*/end \1', fnc_body, flags=re.M | re.DOTALL) + for sb_name, sub_blk in sb_res: + symbols = set(re.findall(r'\s*(\w+(?:\.\w+)?[\[\d\]]*).*?\n', sub_blk, flags=re.M)) + fnc_dict['body'][sb_name] = symbols + return fnc_dict + + def _recursive_remove(self, a2l_dict, name): + """Remove symbols from A2L dict (e.g. group or function).""" + if name in a2l_dict: + blk = a2l_dict[name] + if 'SUB_FUNCTION' in blk: + for sub_fnc in blk['SUB_FUNCTION']: + if self._recursive_remove(a2l_dict, sub_fnc): + blk['SUB_FUNCTION'] = blk['SUB_FUNCTION'] - set([sub_fnc]) + elif 'SUB_GROUP' in blk: + for sub_grp in blk['SUB_GROUP']: + if self._recursive_remove(a2l_dict, sub_grp): + blk['SUB_GROUP'] = blk['SUB_GROUP'] - set([sub_grp]) + empty = True + for key in blk: + if blk[key]: + empty = False + break + if empty: + a2l_dict.pop(name) + return True + return False + + def _remove_symbols_from_func_blks(self, code_generator, fnc_blks, removed_symbols): + """Remove the unused symbols from function blocks. + + If the function block is empty, it too will be removed. + first iteration - remove all symbols that have been removed + second iteration - recusively remover all functions without symbols + """ + fnc_dict = {} + for fnc_name, fnc_blk in fnc_blks.items(): + fnc_dict[fnc_name] = {} + u_fnc_bdy = self._parse_func_blk(code_generator, fnc_blk)['body'] + sub_blk_types = set(u_fnc_bdy.keys()) - set(['SUB_FUNCTION']) + for type_ in list(sub_blk_types): + fnc_dict[fnc_name][type_] = u_fnc_bdy[type_] - set(removed_symbols) + if 'SUB_FUNCTION' in u_fnc_bdy: + fnc_dict[fnc_name]['SUB_FUNCTION'] = u_fnc_bdy['SUB_FUNCTION'] + # second iteration - remove empty FUNCTION blocks + # TODO: Add functionality which parses the the function tree structures + # And the run recursive remove on all tree roots. + for fnc_name in fnc_blks.keys(): + self._recursive_remove(fnc_dict, fnc_name) + # generate new function blocks + new_fnc_blks = {} + for fnc_name, fnc_data in fnc_dict.items(): + fnc_blk = f' /begin FUNCTION\n {fnc_name}\t/* Name */\n' + fnc_blk += " \"\"\t/* LongIdentifier */\n" + for sub_sec in sorted(fnc_data.keys()): + sub_sec_data = fnc_data[sub_sec] + if sub_sec_data: + fnc_blk += f" /begin {sub_sec}\n" + for param in sorted(sub_sec_data): + fnc_blk += f" {param}\t/* Identifier */\n" + fnc_blk += f" /end {sub_sec}\n" + fnc_blk += " /end FUNCTION" + new_fnc_blks[fnc_name] = fnc_blk + return new_fnc_blks + + def _remove_symbols_from_grp_blks(self, grp_blks, removed_symbols): + """Remove the unused symbols from group blocks. + + If the group block is empty, it too will be removed. + first iteration - remove all symbols that have been removed + second iteration - recusively remover all groups without symbols + """ + grp_dict = {} + for grp_name, grp_blk in grp_blks.items(): + grp_dict[grp_name] = {} + u_grp_bdy = self._parse_grp_blk(grp_blk)['body'] + sub_blk_types = set(u_grp_bdy.keys()) - set(['SUB_GROUP']) + for type_ in list(sub_blk_types): + grp_dict[grp_name][type_] = u_grp_bdy[type_] - set(removed_symbols) + if 'SUB_GROUP' in u_grp_bdy: + grp_dict[grp_name]['SUB_GROUP'] = u_grp_bdy['SUB_GROUP'] + # second iteration - remove empty GROUP blocks + # TODO: Add functionality which parses the the group tree structures + # And the run recursive remove on all tree roots. + for grp_name in grp_blks.keys(): + self._recursive_remove(grp_dict, grp_name) + # generate new group blocks + new_grp_blks = {} + for grp_name, grp_data in grp_dict.items(): + grp_blk = f" /begin GROUP \n /* Name */ {grp_name}\n" + grp_blk += " /* Long identifier */ \"\"\n" + for sub_sec in sorted(grp_data.keys()): + sub_sec_data = grp_data[sub_sec] + if sub_sec_data: + grp_blk += f" /begin {sub_sec}\n" + for param in sorted(sub_sec_data): + grp_blk += f" {param}\n" + grp_blk += f" /end {sub_sec}\n" + grp_blk += " /end GROUP" + new_grp_blks[grp_name] = grp_blk + + return new_grp_blks + + def _parse_gen(self, filename): + """Parse the generated a2l-files, without filter.""" + self.debug('parsing gen a2l: %s', filename) + with open(filename, 'r', encoding="utf-8") as a2lfp: + a2ld = a2lfp.read() + for blk_def, type_, label in self._block_finder.findall(a2ld): + self._blks.setdefault(type_, {}).setdefault(label, blk_def) + + @staticmethod + def _replace_compu_method(blk_def, label, compu_method_translators): + """Replace the compu method block and label.""" + for translator in compu_method_translators: + if translator['old_compu_method'] == blk_def: + return translator['new_compu_method'], translator['new_name'] + return blk_def, label + + def _store_compu_method(self, ID, conv_type, disp_format, unit, conversion, indentation, u_conf): + """Stash compu methods that exists in the resulting a2l.""" + key = (ID, conv_type, disp_format, unit, conversion) + if key in self._compu_methods: + new_name = self._compu_methods[key]['name'] + new_compu_method = self._compu_methods[key]['method'] + else: + new_name = 'Scaling_' + str(len(self._compu_methods)) + if 'code_generator' in u_conf and u_conf['code_generator'] == 'embedded_coder': + new_compu_method = self._ec_compu_method_template.substitute( + name=new_name, + ID=ID, + conv_type=conv_type, + disp_format=disp_format, + unit=unit, + conversion=conversion, + indentation=indentation + ) + else: + new_compu_method = self._tl_compu_method_template.substitute( + name=new_name, + ID=ID, + conv_type=conv_type, + disp_format=disp_format, + unit=unit, + conversion=conversion, + indentation=indentation + ) + self._compu_methods.update({key: {'name': new_name, + 'method': new_compu_method}}) + return new_name, new_compu_method + + @staticmethod + def _replace_conversions(blk_def, compu_method_translators): + """Replace conversion identifiers in a2l block.""" + for translator in compu_method_translators: + # The following check is faster than running the regex on the block. + # It DOES give false positives, which is why the regex is used for substitution + # and we do not immidiately return after one positive + if translator['old_name'] in blk_def: + blk_def = translator['regex'].sub(translator['replacement'], blk_def) + return blk_def + + def _parse_compu_methods(self, blk_def, unit): + """Replace compu methods to not overwrite any of them.""" + compu_method_translators = [] # Translators for one processed a2l file. Needs to be reset between files + u_conf = self._per_unit_cfg[unit] if unit in self._per_unit_cfg else {} + if 'code_generator' in u_conf and u_conf['code_generator'] == 'embedded_coder': + for match in self._ec_compu_method_parser.finditer(blk_def): + new_name, new_compu_method = self._store_compu_method( + match['ID'], + match['conv_type'], + match['disp_format'], + match['unit'], + match['conversion'], + match['indentation'], + u_conf + ) + compu_method_translators.append( + { + 'new_name': new_name, + 'old_name': match['name'], + 'regex': re.compile( + r'(\s*)' # beginning + r'\s*(/\* Conversion [Mm]ethod\s*\*/\s*)' # optional comment + r'\b{name}\b' # word + r'(' + r'\s*\n' # newline + r')'.format(name=match['name']) # end of end-match + ), + 'replacement': r'\1\2{name}\3'.format(name=new_name), + 'old_compu_method': match['compu_method'], + 'new_compu_method': new_compu_method + } + ) + else: + for match in self._tl_compu_method_parser.finditer(blk_def): + new_name, new_compu_method = self._store_compu_method( + match['ID'], + match['conv_type'], + match['disp_format'], + match['unit'], + match['conversion'], + match['indentation'], + u_conf + ) + compu_method_translators.append( + { + 'new_name': new_name, + 'old_name': match['name'], + 'regex': re.compile( + r'(\s*)' # beginning + r'\b{name}\b' # word + r'(' # start of end-match + r'\s*(/\* Conversion \*/)?' # optional comment + r'\s*\n' # newline + r')'.format(name=match['name']) # end of end-match + ), + 'replacement': r'\1{name}\2'.format(name=new_name), + 'old_compu_method': match['compu_method'], + 'new_compu_method': new_compu_method + } + ) + return compu_method_translators + + def _patch_kp_blob(self, block): + """Return updated measurement block text. + Args: + block (str): A2L text block + Returns: + a2l_text (str): A2L text without KP_BLOB. + """ + ecu_address = '0x00000000' + for match in self._expr_block_meas_kp_blob_parser.finditer(block): + start, end = match.span() + block = f'{block[:start]}ECU_ADDRESS {ecu_address}{block[end:]}' + return block + + def merge(self, f_name, complete_a2l=False, silver_a2l=False): + """Write merged a2l-file. + + Args: + f_name (str): Output filename. + """ + a2l = '' + a2l_config = self._prj_cfg.get_a2l_cfg() + for _, data in self._blks.items(): + for _, blk in data.items(): + if not a2l_config['allow_kp_blob']: + blk = self._patch_kp_blob(blk) + a2l += blk + '\n\n' + + if complete_a2l: + events = [] + time_unit_10ms = '0x07' + rasters = self._prj_cfg.get_units_raster_cfg() + for xcp_id, evt_data in enumerate(rasters['SampleTimes'].items(), 1): + events.append({ + 'time_cycle': '0x%02X' % int(evt_data[1] * 100), + 'time_unit': time_unit_10ms, + 'name': evt_data[0], + 'channel_id': '0x%04X' % xcp_id + }) + a2l_template = A2lProjectTemplate( + a2l, + a2l_config['asap2_version'], + a2l_config['name'], + events, + a2l_config['ip_address'], + a2l_config['ip_port'] + ) + a2l = a2l_template.render() + elif silver_a2l: + a2l_template = A2lSilverTemplate(a2l) + a2l = a2l_template.render() + + self.a2l = a2l + + with open(f_name, 'w', encoding="ISO-8859-1") as ma2l: + ma2l.write(a2l) + self.info('Written the merged A2L-file %s', f_name) + + def get_characteristic_axis_data(self): + """Get characteristic map axis data from merged a2l-file.""" + axis_data = {} + for blk_def, type_, label in self._block_finder.findall(self.a2l): + if type_ == "CHARACTERISTIC": + axes = re.findall('AXIS_PTS_REF (.*)', blk_def) + if label in axis_data: + self.critical("Multiple CHARACTERISTIC for %s in merged a2l.", label) + axis_data[label] = {'axes': axes} + return axis_data diff --git a/pybuild/a2l_templates.py b/pybuild/a2l_templates.py new file mode 100644 index 0000000..ce0890a --- /dev/null +++ b/pybuild/a2l_templates.py @@ -0,0 +1,717 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module for creating a project a2l-file from a template.""" + +from string import Template + + +class A2lProjectTemplate: + """Class for A2l Project Template.""" + def __init__(self, spm_a2l, asap2_version, project_name, events, ip_address, ip_port): + self.spm_a2l = spm_a2l + self.asap2_version = asap2_version + self.project_name = project_name + self.events = events + self.ip_address = ip_address + self.ip_port = ip_port + self.event_template = Template( + ' /begin EVENT\n' + ' "$name" /* EVENT CHANNEL NAME */\n' + ' "$short_name" /* EVENT CHANNEL SHORT NAME */\n' + ' $channel_id /* EVENT CHANNEL NUMBER */\n' + ' DAQ_STIM\n' + ' 0xFF\n' + ' $time_cycle /* EVENT TIME CYCLE */\n' + ' $time_unit /* EVENT TIME UNIT */\n' + ' 0x00\n' + ' /end EVENT\n' + ) + self.template = Template( + 'ASAP2_VERSION $asap2_version\n' + '/begin PROJECT $project_name ""\n' + ' /begin MODULE XCP ""\n' + ' /begin A2ML\n' + ' struct Protocol_Layer {\n' + ' uint; /* XCP protocol layer version, current 0x100 */\n' + ' uint; /* T1 [ms] */\n' + ' uint; /* T2 [ms] */\n' + ' uint; /* T3 [ms] */\n' + ' uint; /* T4 [ms] */\n' + ' uint; /* T5 [ms] */\n' + ' uint; /* T6 [ms] */\n' + ' uint; /* T7 [ms] */\n' + ' uchar; /* MAX_CTO */\n' + ' uint; /* MAX_DTO */\n' + ' enum {\n' + ' "BYTE_ORDER_MSB_LAST" = 0,\n' + ' "BYTE_ORDER_MSB_FIRST" = 1\n' + ' };\n' + ' enum {\n' + ' "ADDRESS_GRANULARITY_BYTE" = 1,\n' + ' "ADDRESS_GRANULARITY_WORD" = 2,\n' + ' "ADDRESS_GRANULARITY_DWORD" = 4\n' + ' };\n' + ' taggedstruct {\n' + ' ("OPTIONAL_CMD" enum {\n' + ' "GET_COMM_MODE_INFO" = 251,\n' + ' "GET_ID" = 250,\n' + ' "SET_REQUEST" = 249,\n' + ' "GET_SEED" = 248,\n' + ' "UNLOCK" = 247,\n' + ' "SET_MTA" = 246,\n' + ' "UPLOAD" = 245,\n' + ' "SHORT_UPLOAD" = 244,\n' + ' "BUILD_CHECKSUM" = 243,\n' + ' "TRANSPORT_LAYER_CMD" = 242,\n' + ' "USER_CMD" = 241,\n' + ' "DOWNLOAD" = 240,\n' + ' "DOWNLOAD_NEXT" = 239,\n' + ' "DOWNLOAD_MAX" = 238,\n' + ' "SHORT_DOWNLOAD" = 237,\n' + ' "MODIFY_BITS" = 236,\n' + ' "SET_CAL_PAGE" = 235,\n' + ' "GET_CAL_PAGE" = 234,\n' + ' "GET_PAG_PROCESSOR_INFO" = 233,\n' + ' "GET_SEGMENT_INFO" = 232,\n' + ' "GET_PAGE_INFO" = 231,\n' + ' "SET_SEGMENT_MODE" = 230,\n' + ' "GET_SEGMENT_MODE" = 229,\n' + ' "COPY_CAL_PAGE" = 228,\n' + ' "CLEAR_DAQ_LIST" = 227,\n' + ' "SET_DAQ_PTR" = 226,\n' + ' "WRITE_DAQ" = 225,\n' + ' "SET_DAQ_LIST_MODE" = 224,\n' + ' "GET_DAQ_LIST_MODE" = 223,\n' + ' "START_STOP_DAQ_LIST" = 222,\n' + ' "START_STOP_SYNCH" = 221,\n' + ' "GET_DAQ_CLOCK" = 220,\n' + ' "READ_DAQ" = 219,\n' + ' "GET_DAQ_PROCESSOR_INFO" = 218,\n' + ' "GET_DAQ_RESOLUTION_INFO" = 217,\n' + ' "GET_DAQ_LIST_INFO" = 216,\n' + ' "GET_DAQ_EVENT_INFO" = 215,\n' + ' "FREE_DAQ" = 214,\n' + ' "ALLOC_DAQ" = 213,\n' + ' "ALLOC_ODT" = 212,\n' + ' "ALLOC_ODT_ENTRY" = 211,\n' + ' "PROGRAM_START" = 210,\n' + ' "PROGRAM_CLEAR" = 209,\n' + ' "PROGRAM" = 208,\n' + ' "PROGRAM_RESET" = 207,\n' + ' "GET_PGM_PROCESSOR_INFO" = 206,\n' + ' "GET_SECTOR_INFO" = 205,\n' + ' "PROGRAM_PREPARE" = 204,\n' + ' "PROGRAM_FORMAT" = 203,\n' + ' "PROGRAM_NEXT" = 202,\n' + ' "PROGRAM_MAX" = 201,\n' + ' "PROGRAM_VERIFY" = 200\n' + ' })*;\n' + ' "COMMUNICATION_MODE_SUPPORTED" taggedunion {\n' + ' "BLOCK" taggedstruct {\n' + ' "SLAVE" ;\n' + ' "MASTER" struct {\n' + ' uchar; /* MAX_BS */\n' + ' uchar; /* MIN_ST */\n' + ' };\n' + ' };\n' + ' "INTERLEAVED" uchar; /* QUEUE_SIZE */\n' + ' };\n' + ' "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256];/* Name of the Seed&Key function */\n' + ' };\n' + ' };\n' + '\n' + ' struct Daq {\n' + ' enum {\n' + ' "STATIC" = 0,\n' + ' "DYNAMIC" = 1\n' + ' };\n' + ' uint; /* MAX_DAQ */\n' + ' uint; /* MAX_EVENT_CHANNEL */\n' + ' uchar; /* MIN_DAQ */\n' + ' enum {\n' + ' "OPTIMISATION_TYPE_DEFAULT" = 0,\n' + ' "OPTIMISATION_TYPE_ODT_TYPE_16" = 1,\n' + ' "OPTIMISATION_TYPE_ODT_TYPE_32" = 2,\n' + ' "OPTIMISATION_TYPE_ODT_TYPE_64" = 3,\n' + ' "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4,\n' + ' "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5\n' + ' };\n' + ' enum {\n' + ' "ADDRESS_EXTENSION_FREE" = 0,\n' + ' "ADDRESS_EXTENSION_ODT" = 1,\n' + ' "ADDRESS_EXTENSION_DAQ" = 3\n' + ' };\n' + ' enum {\n' + ' "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0,\n' + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1,\n' + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2,\n' + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3\n' + ' };\n' + ' enum {\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1,\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2,\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4,\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8\n' + ' };\n' + ' uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */\n' + ' enum {\n' + ' "NO_OVERLOAD_INDICATION" = 0,\n' + ' "OVERLOAD_INDICATION_PID" = 1,\n' + ' "OVERLOAD_INDICATION_EVENT" = 2\n' + ' };\n' + ' taggedstruct {\n' + ' "PRESCALER_SUPPORTED" ;\n' + ' "RESUME_SUPPORTED" ;\n' + ' block "STIM" struct {\n' + ' enum {\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1,\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2,\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4,\n' + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8\n' + ' };\n' + ' uchar; /* MAX_ODT_ENTRY_SIZE_STIM */\n' + ' taggedstruct {\n' + ' "BIT_STIM_SUPPORTED" ;\n' + ' };\n' + ' };\n' + ' block "TIMESTAMP_SUPPORTED" struct {\n' + ' uint; /* TIMESTAMP_TICKS */\n' + ' enum {\n' + ' "NO_TIME_STAMP" = 0,\n' + ' "SIZE_BYTE" = 1,\n' + ' "SIZE_WORD" = 2,\n' + ' "SIZE_DWORD" = 4\n' + ' };\n' + ' enum {\n' + ' "UNIT_1NS" = 0,\n' + ' "UNIT_10NS" = 1,\n' + ' "UNIT_100NS" = 2,\n' + ' "UNIT_1US" = 3,\n' + ' "UNIT_10US" = 4,\n' + ' "UNIT_100US" = 5,\n' + ' "UNIT_1MS" = 6,\n' + ' "UNIT_10MS" = 7,\n' + ' "UNIT_100MS" = 8,\n' + ' "UNIT_1S" = 9\n' + ' };\n' + ' taggedstruct {\n' + ' "TIMESTAMP_FIXED" ;\n' + ' };\n' + ' };\n' + ' "PID_OFF_SUPPORTED" ;\n' + ' (block "DAQ_LIST" struct {\n' + ' uint; /* DAQ_LIST_NUMBER */\n' + ' taggedstruct {\n' + ' "DAQ_LIST_TYPE" enum {\n' + ' "DAQ" = 1,\n' + ' "STIM" = 2,\n' + ' "DAQ_STIM" = 3\n' + ' };\n' + ' "MAX_ODT" uchar;\n' + ' "MAX_ODT_ENTRIES" uchar;\n' + ' "FIRST_PID" uchar;\n' + ' "EVENT_FIXED" uint;\n' + ' block "PREDEFINED" taggedstruct {\n' + ' (block "ODT" struct {\n' + ' uchar; /* ODT number */\n' + ' taggedstruct {\n' + ' ("ODT_ENTRY" struct {\n' + ' uchar; /* ODT_ENTRY number */\n' + ' ulong; /* address of element */\n' + ' uchar; /* address extension of element */\n' + ' uchar; /* size of element [AG] */\n' + ' uchar; /* BIT_OFFSET */\n' + ' })*;\n' + ' };\n' + ' })*;\n' + ' };\n' + ' };\n' + ' })*;\n' + ' (block "EVENT" struct {\n' + ' char[101]; /* EVENT_CHANNEL_NAME */\n' + ' char[9]; /* EVENT_CHANNEL_SHORT_NAME */\n' + ' uint; /* EVENT_CHANNEL_NUMBER */\n' + ' enum {\n' + ' "DAQ" = 1,\n' + ' "STIM" = 2,\n' + ' "DAQ_STIM" = 3\n' + ' };\n' + ' uchar; /* MAX_DAQ_LIST */\n' + ' uchar; /* TIME_CYCLE */\n' + ' uchar; /* TIME_UNIT */\n' + ' uchar; /* PRIORITY */\n' + ' })*;\n' + ' };\n' + ' };\n' + '\n' + ' taggedunion Daq_Event {\n' + ' "FIXED_EVENT_LIST" taggedstruct {\n' + ' ("EVENT" uint)*;\n' + ' };\n' + ' "VARIABLE" taggedstruct {\n' + ' block "AVAILABLE_EVENT_LIST" taggedstruct {\n' + ' ("EVENT" uint)*;\n' + ' };\n' + ' block "DEFAULT_EVENT_LIST" taggedstruct {\n' + ' ("EVENT" uint)*;\n' + ' };\n' + ' };\n' + ' };\n' + '\n' + ' struct Pag {\n' + ' uchar; /* MAX_SEGMENTS */\n' + ' taggedstruct {\n' + ' "FREEZE_SUPPORTED" ;\n' + ' };\n' + ' };\n' + '\n' + ' struct Pgm {\n' + ' enum {\n' + ' "PGM_MODE_ABSOLUTE" = 1,\n' + ' "PGM_MODE_FUNCTIONAL" = 2,\n' + ' "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3\n' + ' };\n' + ' uchar; /* MAX_SECTORS */\n' + ' uchar; /* MAX_CTO_PGM */\n' + ' taggedstruct {\n' + ' (block "SECTOR" struct {\n' + ' char[101]; /* SECTOR_NAME */\n' + ' uchar; /* SECTOR_NUMBER */\n' + ' ulong; /* Address */\n' + ' ulong; /* Length */\n' + ' uchar; /* CLEAR_SEQUENCE_NUMBER */\n' + ' uchar; /* PROGRAM_SEQUENCE_NUMBER */\n' + ' uchar; /* PROGRAM_METHOD */\n' + ' })*;\n' + ' "COMMUNICATION_MODE_SUPPORTED" taggedunion {\n' + ' "BLOCK" taggedstruct {\n' + ' "SLAVE" ;\n' + ' "MASTER" struct {\n' + ' uchar; /* MAX_BS_PGM */\n' + ' uchar; /* MIN_ST_PGM */\n' + ' };\n' + ' };\n' + ' "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */\n' + ' };\n' + ' };\n' + ' };\n' + '\n' + ' struct Segment {\n' + ' uchar; /* SEGMENT_NUMBER */\n' + ' uchar; /* number of pages */\n' + ' uchar; /* ADDRESS_EXTENSION */\n' + ' uchar; /* COMPRESSION_METHOD */\n' + ' uchar; /* ENCRYPTION_METHOD */\n' + ' taggedstruct {\n' + ' block "CHECKSUM" struct {\n' + ' enum {\n' + ' "XCP_ADD_11" = 1,\n' + ' "XCP_ADD_12" = 2,\n' + ' "XCP_ADD_14" = 3,\n' + ' "XCP_ADD_22" = 4,\n' + ' "XCP_ADD_24" = 5,\n' + ' "XCP_ADD_44" = 6,\n' + ' "XCP_CRC_16" = 7,\n' + ' "XCP_CRC_16_CITT" = 8,\n' + ' "XCP_CRC_32" = 9,\n' + ' "XCP_USER_DEFINED" = 255\n' + ' };\n' + ' taggedstruct {\n' + ' "MAX_BLOCK_SIZE" ulong;\n' + ' "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum.DLL */\n' + ' };\n' + ' };\n' + ' (block "PAGE" struct {\n' + ' uchar; /* PAGE_NUMBER */\n' + ' enum {\n' + ' "ECU_ACCESS_NOT_ALLOWED" = 0,\n' + ' "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1,\n' + ' "ECU_ACCESS_WITH_XCP_ONLY" = 2,\n' + ' "ECU_ACCESS_DONT_CARE" = 3\n' + ' };\n' + ' enum {\n' + ' "XCP_READ_ACCESS_NOT_ALLOWED" = 0,\n' + ' "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1,\n' + ' "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2,\n' + ' "XCP_READ_ACCESS_DONT_CARE" = 3\n' + ' };\n' + ' enum {\n' + ' "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0,\n' + ' "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1,\n' + ' "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2,\n' + ' "XCP_WRITE_ACCESS_DONT_CARE" = 3\n' + ' };\n' + ' taggedstruct {\n' + ' "INIT_SEGMENT" uchar; /* references segment that initialises this page */\n' + ' };\n' + ' })*;\n' + ' (block "ADDRESS_MAPPING" struct {\n' + ' ulong; /* source address */\n' + ' ulong; /* destination address */\n' + ' ulong; /* length */\n' + ' })*;\n' + ' "PGM_VERIFY" ulong; /* verification value for PGM */\n' + ' };\n' + ' };\n' + '\n' + ' taggedstruct Common_Parameters {\n' + ' block "PROTOCOL_LAYER" struct Protocol_Layer;\n' + ' block "SEGMENT" struct Segment;\n' + ' block "DAQ" struct Daq;\n' + ' block "PAG" struct Pag;\n' + ' block "PGM" struct Pgm;\n' + ' block "DAQ_EVENT" taggedunion Daq_Event;\n' + ' };\n' + '\n' + ' struct UDP_IP_Parameters {\n' + ' uint; /* XCP on UDP_IP version, currently 0x0100 */\n' + ' uint; /* PORT */\n' + ' taggedunion {\n' + ' "HOST_NAME" char[256];\n' + ' "ADDRESS" char[15];\n' + ' };\n' + ' };\n' + '\n' + ' block "IF_DATA" taggedunion if_data {\n' + ' "XCP" struct {\n' + ' taggedstruct Common_Parameters; /* default parameters */\n' + ' taggedstruct {\n' + ' block "XCP_ON_UDP_IP" struct {\n' + ' struct UDP_IP_Parameters; /* specific for UDP_IP */\n' + ' taggedstruct Common_Parameters; /* overruling of default */\n' + ' };\n' + ' };\n' + ' };\n' + ' };\n' + ' /end A2ML\n' + '\n' + ' /begin MOD_COMMON ""\n' + ' BYTE_ORDER MSB_LAST\n' + ' ALIGNMENT_BYTE 1\n' + ' ALIGNMENT_WORD 1\n' + ' ALIGNMENT_LONG 1\n' + ' ALIGNMENT_FLOAT32_IEEE 1\n' + ' ALIGNMENT_FLOAT64_IEEE 1\n' + ' /end MOD_COMMON\n' + '\n' + ' /begin IF_DATA XCP\n' + ' /begin PROTOCOL_LAYER\n' + ' 0x0100\n' + ' 0x03E8\n' + ' 0xC8\n' + ' 0x00\n' + ' 0x00\n' + ' 0x00\n' + ' 0x00\n' + ' 0x00\n' + ' 0x60\n' + ' 0x12C\n' + ' BYTE_ORDER_MSB_LAST\n' + ' ADDRESS_GRANULARITY_BYTE\n' + ' OPTIONAL_CMD ALLOC_ODT_ENTRY\n' + ' OPTIONAL_CMD ALLOC_ODT\n' + ' OPTIONAL_CMD ALLOC_DAQ\n' + ' OPTIONAL_CMD FREE_DAQ\n' + ' OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO\n' + ' OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO\n' + ' OPTIONAL_CMD START_STOP_SYNCH\n' + ' OPTIONAL_CMD GET_DAQ_CLOCK\n' + ' OPTIONAL_CMD START_STOP_DAQ_LIST\n' + ' OPTIONAL_CMD GET_DAQ_LIST_MODE\n' + ' OPTIONAL_CMD SET_DAQ_LIST_MODE\n' + ' OPTIONAL_CMD WRITE_DAQ\n' + ' OPTIONAL_CMD SET_DAQ_PTR\n' + ' OPTIONAL_CMD CLEAR_DAQ_LIST\n' + ' OPTIONAL_CMD SHORT_UPLOAD\n' + ' OPTIONAL_CMD UPLOAD\n' + ' OPTIONAL_CMD SET_MTA\n' + ' OPTIONAL_CMD GET_ID\n' + ' OPTIONAL_CMD GET_COMM_MODE_INFO\n' + ' OPTIONAL_CMD BUILD_CHECKSUM\n' + ' OPTIONAL_CMD SET_SEGMENT_MODE\n' + ' OPTIONAL_CMD GET_SEGMENT_MODE\n' + ' OPTIONAL_CMD SET_REQUEST\n' + ' OPTIONAL_CMD GET_SEED\n' + ' OPTIONAL_CMD UNLOCK\n' + ' OPTIONAL_CMD COPY_CAL_PAGE\n' + ' SEED_AND_KEY_EXTERNAL_FUNCTION Seed_Key.dll' + '/* Add name of seed & key dll file here.*/\n' + ' /end PROTOCOL_LAYER\n' + '\n' + ' /begin DAQ\n' + ' DYNAMIC\n' + ' 0x00\n' + ' 0x06\n' + ' 0x00\n' + ' OPTIMISATION_TYPE_DEFAULT\n' + ' ADDRESS_EXTENSION_FREE\n' + ' IDENTIFICATION_FIELD_TYPE_ABSOLUTE\n' + ' GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE\n' + ' 0x60\n' + ' NO_OVERLOAD_INDICATION\n' + ' /begin TIMESTAMP_SUPPORTED\n' + ' 0x01\n' + ' SIZE_DWORD\n' + ' UNIT_100US\n' + ' TIMESTAMP_FIXED\n' + ' /end TIMESTAMP_SUPPORTED\n' + '\n' + '$events\n' + ' /end DAQ\n' + '\n' + ' /begin PAG\n' + ' 0x01\n' + ' FREEZE_SUPPORTED\n' + ' /end PAG\n' + ' /begin PGM\n' + ' PGM_MODE_ABSOLUTE\n' + ' 0x01\n' + ' 0x00\n' + ' /begin SECTOR\n' + ' "Sector"\n' + ' 0x00\n' + ' 0x22014\n' + ' 0x38\n' + ' 0x00\n' + ' 0x00\n' + ' 0x00\n' + ' /end SECTOR\n' + ' /end PGM\n' + '\n' + ' /begin XCP_ON_UDP_IP\n' + ' 0x0100\n' + ' $ip_port\n' + ' ADDRESS "$ip_address"\n' + ' /end XCP_ON_UDP_IP\n' + ' /end IF_DATA\n' + '\n' + ' /begin MOD_PAR ""\n' + ' /begin MEMORY_SEGMENT\n' + ' caldata "caldata"\n' + ' DATA FLASH INTERN 0x00000 0x0000 -1 -1 -1 -1 -1\n' + ' /begin IF_DATA XCP\n' + ' /begin SEGMENT\n' + ' 0x00\n' + ' 0x02\n' + ' 0x00\n' + ' 0x00\n' + ' 0x00\n' + ' /begin CHECKSUM\n' + ' XCP_CRC_16_CITT\n' + ' /end CHECKSUM\n' + ' /begin PAGE\n' + ' 0x00\n' + ' ECU_ACCESS_WITH_XCP_ONLY\n' + ' XCP_READ_ACCESS_WITH_ECU_ONLY\n' + ' XCP_WRITE_ACCESS_NOT_ALLOWED\n' + ' INIT_SEGMENT 0x00\n' + ' /end PAGE\n' + ' /begin PAGE\n' + ' 0x01\n' + ' ECU_ACCESS_WITH_XCP_ONLY\n' + ' XCP_READ_ACCESS_WITH_ECU_ONLY\n' + ' XCP_WRITE_ACCESS_WITH_ECU_ONLY\n' + ' INIT_SEGMENT 0x00\n' + ' /end PAGE\n' + ' /end SEGMENT\n' + ' /end IF_DATA\n' + ' /end MEMORY_SEGMENT\n' + ' /begin MEMORY_SEGMENT\n' + ' text ".text"\n' + ' CODE ROM INTERN 0x26030 0x72c10 -1 -1 -1 -1 -1\n' + ' /begin IF_DATA XCP\n' + ' /begin SEGMENT\n' + ' 0x01\n' + ' 0x01\n' + ' 0x00\n' + ' 0x00\n' + ' 0x00\n' + ' /begin CHECKSUM\n' + ' XCP_CRC_16_CITT\n' + ' /end CHECKSUM\n' + ' /begin PAGE\n' + ' 0x01\n' + ' ECU_ACCESS_WITH_XCP_ONLY\n' + ' XCP_READ_ACCESS_WITH_ECU_ONLY\n' + ' XCP_WRITE_ACCESS_WITH_ECU_ONLY\n' + ' INIT_SEGMENT 0x00\n' + ' /end PAGE\n' + ' /end SEGMENT\n' + ' /end IF_DATA\n' + ' /end MEMORY_SEGMENT\n' + ' /end MOD_PAR\n' + '\n' + ' /begin COMPU_METHOD BitSlice.CONVERSION ""\n' + ' RAT_FUNC "%6.2f" ""\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD\n' + '\n' + ' /* SPM declarations start. */\n' + '\n' + '$spm_a2l\n' + '\n' + ' /* SPM declarations end. */\n' + '\n' + ' /begin RECORD_LAYOUT __UBYTE_Z\n' + ' FNC_VALUES 1 UBYTE ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __UWORD_Z\n' + ' FNC_VALUES 1 UWORD ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __ULONG_Z\n' + ' FNC_VALUES 1 ULONG ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __SBYTE_Z\n' + ' FNC_VALUES 1 SBYTE ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __SWORD_Z\n' + ' FNC_VALUES 1 SWORD ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __SLONG_Z\n' + ' FNC_VALUES 1 SLONG ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __FLOAT32_IEEE_Z\n' + ' FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __FLOAT64_IEEE_Z\n' + ' FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __UBYTE_S\n' + ' FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __UWORD_S\n' + ' FNC_VALUES 1 UWORD COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __ULONG_S\n' + ' FNC_VALUES 1 ULONG COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __SBYTE_S\n' + ' FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __SWORD_S\n' + ' FNC_VALUES 1 SWORD COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __SLONG_S\n' + ' FNC_VALUES 1 SLONG COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __FLOAT32_IEEE_S\n' + ' FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT __FLOAT64_IEEE_S\n' + ' FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__UBYTE_S\n' + ' AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__UWORD_S\n' + ' AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__ULONG_S\n' + ' AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__SBYTE_S\n' + ' AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__SWORD_S\n' + ' AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__SLONG_S\n' + ' AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__FLOAT32_IEEE_S\n' + ' AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /begin RECORD_LAYOUT SSV__FLOAT64_IEEE_S\n' + ' AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT\n' + '\n' + ' /end MODULE\n' + '/end PROJECT\n' + ) + + def render(self): + """Render the complete A2L. + Returns: + a2l (str): The A2L for the project. + """ + event_a2l = '' + for event in self.events: + event_a2l += self.event_template.substitute( + name=event['name'], + short_name=event['name'], + channel_id=event['channel_id'], + time_cycle=event['time_cycle'], + time_unit=event['time_unit'] + ) + return self.template.substitute( + events=event_a2l, + asap2_version=self.asap2_version, + project_name=self.project_name.replace('-', '_'), + ip_address=self.ip_address, + ip_port=self.ip_port, + spm_a2l=self.spm_a2l + ) + + +class A2lSilverTemplate: + """Class for A2l Silver Template.""" + def __init__(self, base_a2l): + """Init.""" + self.patched_a2l = self.basic_patching(base_a2l) + self.template = Template( + '/* QTronic Header */\n' + 'ASAP2_VERSION 1 6\n' + '/begin PROJECT SPM ""\n' + '/begin MODULE SPM ""\n' + '\n' + '$base_a2l' + '\n' + '/end MODULE\n' + '/end PROJECT' + ) + + @staticmethod + def basic_patching(base_a2l): + """Perform required basic patching. + + Args: + base_a2l (str): Inital A2l content. + Returns: + (str): Patched A2L content. + """ + return "".join([char if ord(char) < 128 else "?" for char in base_a2l]) + + def render(self): + """Render the complete A2L. + + Returns: + (str): The patched A2L for Silver. + """ + if "ASAP2_VERSION" in self.patched_a2l[:999]: + return self.patched_a2l + return self.template.substitute(base_a2l=self.patched_a2l) diff --git a/pybuild/build.py b/pybuild/build.py new file mode 100644 index 0000000..67df554 --- /dev/null +++ b/pybuild/build.py @@ -0,0 +1,946 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Python module used for building a Vcc SPM SW release. + +This is the entry point to pybuild which includes all other needed modules. +Loads configuration files and sequences the code generation steps. +""" + +import glob +import logging +import os +import shutil +import sys +import time +from os.path import join as pjoin +from pathlib import Path + +from pybuild import __config_version__, __version__, build_defs +from pybuild.a2l_merge import A2lMerge +from pybuild.build_proj_config import BuildProjConfig +from pybuild.core import Core, HICore +from pybuild.core_dummy import CoreDummy +from pybuild.create_conversion_table import create_conversion_table +from pybuild.dids import DIDs, HIDIDs +from pybuild.dummy import DummyVar +from pybuild.dummy_spm import DummySpm +from pybuild.ext_dbg import ExtDbg +from pybuild.ext_var import ExtVarCsv, ExtVarYaml +from pybuild.feature_configs import FeatureConfigs +from pybuild.lib.helper_functions import get_repo_root, merge_dicts +from pybuild.memory_section import MemorySection +from pybuild.nvm_def import NVMDef +from pybuild.problem_logger import ProblemLogger +from pybuild.replace_compu_tab_ref import replace_tab_verb +from pybuild.sched_funcs import SchedFuncs +from pybuild.signal_if_html_rep import SigIfHtmlReport +from pybuild.signal_incons_html_rep import SigConsHtmlReport +from pybuild.signal_interfaces import CsvSignalInterfaces, YamlSignalInterfaces +from pybuild.unit_configs import CodeGenerators, UnitConfigs +from pybuild.user_defined_types import UserDefinedTypes +from pybuild.zone_controller.calibration import ZoneControllerCalibration +from pybuild.zone_controller.composition_yaml import CompositionYaml + +LOG = logging.getLogger() +REPO_ROOT = get_repo_root() + + +def setup_logging(log_dst_dir, problem_logger, debug=True, quiet=False): + """Set up the python logger for the build environment. + + Three logger streams are set up. One that log to stdout (info level), + and one to a build.log file (info level), and finally, on stream that + logs to build_dbg.log (debug level log). The log files are put in the + directory configured in the config file. + + Args: + log_dst_dir (str): the path to where the log file should be stored + problem_logger (obj): the ProblemLogger object to initialise + debug (bool): True - if debug log shall be generated + quiet (bool): False - disable logging to stdout + + """ + LOG.setLevel(logging.DEBUG) + LOG.handlers = [] # Remove all previous loggers + logging.captureWarnings(True) + # Setup debug build logger + log_file = pjoin(log_dst_dir, "build_dbg.log") + if debug: + dbg = logging.FileHandler(log_file) + dbg.setLevel(logging.DEBUG) + dbg_formatter = logging.Formatter( + "%(asctime)s - %(module)s." + "%(funcName)s [%(lineno)d]" + " - %(levelname)s - %(message)s" + ) + dbg.setFormatter(dbg_formatter) + LOG.addHandler(dbg) + # Setup normal build logger + log_file = pjoin(log_dst_dir, "build.log") + nrm = logging.FileHandler(log_file) + nrm.setLevel(logging.INFO) + build_log_frmt = logging.Formatter("%(asctime)s - %(levelname)s" " - %(message)s") + nrm.setFormatter(build_log_frmt) + LOG.addHandler(nrm) + + if not quiet: + nrm_strm = logging.StreamHandler(sys.stdout) + nrm_strm.setLevel(logging.INFO) + nrm_strm.setFormatter(build_log_frmt) + LOG.addHandler(nrm_strm) + + error_strm = logging.StreamHandler(sys.stderr) + error_strm.setLevel(logging.CRITICAL) + error_strm.setFormatter(build_log_frmt) + LOG.addHandler(error_strm) + + problem_logger.init_logger(LOG) + + +def check_interfaces(build_cfg, signal_if): + """Check the interfaces. + + Checks interfaces in all configurations, and generates a html + report with the result of the checks. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + signal_if (SignalInterfaces): class holding signal interface information + + """ + LOG.info("******************************************************") + LOG.info("Start check interface inconsistencies") + start_time = time.time() + report_dst_dir = build_cfg.get_reports_dst_dir() + signal_inconsistency_result = signal_if.check_config() + sig_report = SigConsHtmlReport(signal_inconsistency_result) + LOG.info( + "Finished check interface inconsistencies (in %4.2f s)", + time.time() - start_time, + ) + + start_time = time.time() + LOG.info("******************************************************") + LOG.info("Start generating interface inconsistencies html-report") + sig_report.generate_report_file(pjoin(report_dst_dir, "SigCheck.html")) + LOG.info( + "Finished - generating interface inconsistencies html-report (in %4.2f s)", + time.time() - start_time, + ) + + +def interface_report(build_cfg, unit_cfg, signal_if): + """Create report of signal interfaces. + + Creates a report of interfaces in all configurations, and generates + a html-report with the result of the checks. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored. + unit_cfg (UnitConfigs): Class holding all unit interfaces. + signal_if (SignalInterfaces): class holding signal interface information. + + """ + LOG.info("******************************************************") + LOG.info("Start creating interface report") + start_time = time.time() + report_dst_dir = build_cfg.get_reports_dst_dir() + + sig_if = SigIfHtmlReport(build_cfg, unit_cfg, signal_if) + sig_if.generate_report_file(pjoin(report_dst_dir, "SigIf.html")) + LOG.info( + "Finished - create interface report (in %4.2f s)", time.time() - start_time + ) + + +def generate_dummy_spm(build_cfg, unit_cfg, feature_cfg, signal_if, udt): + """Generate c-files that define unit output signals. + + Args: + build_cfg (BuildProjConfig): Build project class holding where files should be stored. + unit_cfg (UnitConfigs): Aggregated unit configs class. + feature_cfg (FeatureConfigs): Used as a library to generate C-macros. + signal_if (SignalInterfaces): Class holding signal interface information. + udt (UserDefinedTypes): Class holding user defined data types. + """ + + def _add_undefined_signals_from_unit(data): + """Add undefined signals from unit. + + Includes included configs. + Arguments: + data (dict): Data for the unit + """ + for signal_name, inport_attributes in data.get("inports", {}).items(): + if signal_name in defined_ports: + continue + if ( + feature_cfg.check_if_active_in_config(inport_attributes["configs"]) + or not build_cfg.allow_undefined_unused + ): + defined_ports.append(signal_name) + undefined_outports.append(inport_attributes) + for include_unit in data.get("includes", []): + include_data = unit_cfg.get_unit_config(include_unit) + _add_undefined_signals_from_unit(include_data) + + LOG.info("******************************************************") + LOG.info("Start generating output vars") + start_time = time.time() + dst_dir = build_cfg.get_src_code_dst_dir() + # Get out ports for all units in project regardless of code switches + unit_vars = unit_cfg.get_per_unit_cfg_total() + undefined_outports = [] + defined_ports = [] + + for data in unit_vars.values(): + for outport_name, outport_data in data.get("outports", {}).items(): + if not feature_cfg.check_if_active_in_config(outport_data["configs"]): + LOG.debug("Outport %s not active in current project", outport_name) + elif outport_name not in defined_ports: + if not outport_data.get("class").startswith("CVC_EXT"): + defined_ports.append(outport_name) + defined_ports.extend(signal_if.get_externally_defined_ports()) + + for data in unit_vars.values(): + _add_undefined_signals_from_unit(data) + + dummy_spm = DummySpm( + undefined_outports, build_cfg, feature_cfg, unit_cfg, udt, "VcDummy_spm" + ) + dummy_spm.generate_files(dst_dir) + LOG.info("Finished generating output vars (in %4.2f s)", time.time() - start_time) + + +def generate_did_files(build_cfg, unit_cfg): + """Generate DIDAPI definition files. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + unit_cfg (UnitConfigs): class holding units definitions, + and which units to include + + """ + start_time = time.time() + did_defs_files = pjoin(build_cfg.get_src_code_dst_dir(), "VcDIDDefinition") + car_com_file = build_cfg.get_car_com_dst() + LOG.info("******************************************************") + LOG.info("Start generating %s.c&h", did_defs_files) + dids = DIDs(build_cfg, unit_cfg) + dids.gen_did_def_files(did_defs_files) + LOG.info( + "Finished generating %s.c&h (in %4.2f s)", + did_defs_files, + time.time() - start_time, + ) + LOG.info("******************************************************") + LOG.info("Start generating %s", car_com_file) + start_time = time.time() + dids.gen_did_carcom_extract(car_com_file) + LOG.info( + "Finished generating %s (in %4.2f s)", car_com_file, time.time() - start_time + ) + LOG.info("******************************************************") + + +def generate_core_dummy(build_cfg, core, unit_cfg): + """Generate the Core dummy files. + + The core dummy creates RTE dummy functions, + and Id variables for enabling testing of VCC Software. If this dummy is not + included, it is not possible to build the project until the supplier deliver + an updated diagnostic core SW. + + Note: + These dummy files shall not be delivered to the supplier! + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + core (Core): class holding core configuration information + + """ + core_dummy_fname = build_cfg.get_core_dummy_name() + LOG.info("******************************************************") + LOG.info("Start generating Core Dummy - %s", core_dummy_fname) + start_time = time.time() + core_dummy = CoreDummy(core.get_current_core_config(), unit_cfg) + ecu_supplier = build_cfg.get_ecu_info()[0] + if ecu_supplier == "Denso": + core_dummy.generate_dg2_core_dummy_files(core_dummy_fname) + elif ecu_supplier == "RB": + core_dummy.generate_rb_core_dummy_files(core_dummy_fname) + elif ecu_supplier == "CSP": + core_dummy.generate_csp_core_dummy_files(core_dummy_fname) + else: + msg = f"Could not generate VcCoreDummy, cannot identify the supplier {ecu_supplier}." + LOG.critical(msg) + raise ValueError(msg) + LOG.info("Finished generating Core Dummy (in %4.2f s)", time.time() - start_time) + + +def generate_ext_var(build_cfg, unit_cfg, signal_if, udt, debug_code=True): + """Generate two c-files that define the signal interface to the supplier. + + The VcExtVar function assigns all variables to the CVC_DISP memory area, + while the ExtVarSafe.c are allocated to the CVC_DISP_ASIL_B memory area. + Note that this function only declares the variables + in the supplier interface, which the supplier writes to. All other + variables shall be declared by the function which writes to the variable. + Note that dummy functionality/variables should be created in the function + to keep the signalling interface consistent! + + Args: + build_cfg (BuildProjConfig): Build project class holding where files should be stored. + signal_if (SignalInterfaces): class holding signal interface information. + udt (UserDefinedTypes): Class holding user defined data types. + debug_code (boolean): If true, generate debug code. + """ + LOG.info("******************************************************") + LOG.info("Start generating VcExtVar and VcDebug") + start_time = time.time() + ecu_supplier = build_cfg.get_ecu_info()[0] + asil_level_dep = build_defs.ASIL_D if ecu_supplier == "HI" else build_defs.ASIL_B + asil_level_db = ( + build_defs.CVC_ASIL_D if ecu_supplier == "HI" else build_defs.CVC_ASIL_B + ) + nrm_dict, dep_dict, sec_dict, dbg_dict = signal_if.get_external_io() + + _extract_external_var( + build_cfg, unit_cfg, udt, asil_level_dep, nrm_dict, dep_dict, sec_dict + ) + if debug_code: + _extract_debug(build_cfg, unit_cfg, asil_level_db, dep_dict, dbg_dict) + + LOG.info( + "Finished generating VcExtVar and VcDebug (in %4.2f s)", + time.time() - start_time, + ) + + +def _extract_external_var( + build_cfg, unit_cfg, udt, asil_level_dep, nrm_dict, dep_dict, sec_dict +): + if build_cfg.has_yaml_interface: + ext_var_nrm = ExtVarYaml(nrm_dict, build_cfg, unit_cfg, udt) + ext_var_dep = ExtVarYaml(dep_dict, build_cfg, unit_cfg, udt, asil_level_dep) + else: + ext_var_nrm = ExtVarCsv(nrm_dict, build_cfg, unit_cfg, udt) + ext_var_dep = ExtVarCsv(dep_dict, build_cfg, unit_cfg, udt, asil_level_dep) + ext_var_sec = ExtVarCsv(sec_dict, build_cfg, unit_cfg, udt, build_defs.SECURE) + + ext_var_instances = { + ext_var_nrm: "VcExtVar", + ext_var_dep: "VcExtVarSafe", + } + + if not build_cfg.has_yaml_interface: + ext_var_instances[ext_var_sec] = "VcExtVarSecure" + + for instance, dir_name in ext_var_instances.items(): + ext_var_path = Path(build_cfg.get_src_code_dst_dir(), dir_name) + instance.generate_files(ext_var_path) + + +def _extract_debug(build_cfg, unit_cfg, asil_level_db, dep_dict, dbg_dict): + dbg_instances = { + ExtDbg(dbg_dict, build_cfg, unit_cfg): ("VcDebug", "VcDebugOutput"), + ExtDbg(dep_dict, build_cfg, unit_cfg, asil_level_db): ("VcDebugSafe", "VcDebugOutputSafe") + } + + for instance, dir_names in dbg_instances.items(): + instance.gen_dbg_files( + pjoin(build_cfg.get_src_code_dst_dir(), dir_names[0]), + pjoin(build_cfg.get_src_code_dst_dir(), dir_names[1]), + ) + + +def generate_dummy_var(build_cfg, unit_cfg, signal_if, udt): + """Generate c-file that define the missing signals. + + Args: + build_cfg (BuildProjConfig): Build project class holding where files should be stored. + unit_cfg (UnitConfigs) : Aggregated unit configs class. + signal_if (SignalInterfaces): class holding signal interface information. + udt (UserDefinedTypes): Class holding user defined data types. + """ + LOG.info("******************************************************") + LOG.info("Start generating VcDummy") + start_time = time.time() + dst_dir = build_cfg.get_src_code_dst_dir() + nrm_dict, dep_dict, sec_dict, _ = signal_if.get_external_io() + nrm_dict = merge_dicts(nrm_dict, dep_dict, merge_recursively=True) + nrm_dict = merge_dicts(nrm_dict, sec_dict, merge_recursively=True) + res_dict = signal_if.check_config() + dummy = DummyVar(unit_cfg, nrm_dict, res_dict, build_cfg, udt) + dummy.generate_file(pjoin(dst_dir, "VcDummy")) + LOG.info("Finished generating VcDummy (in %4.2f s)", time.time() - start_time) + + +def generate_nvm_def(build_cfg, unit_cfg, no_nvm_a2l, use_prefix=False): + """Generate the c&h-files which declares the NVM-ram. + + The NVM-ram is declared in a struct per datatype length, in order + to provide a defined order in RAM/FLASH/EEPROM for the tester + communication service. Furthermore, # defines with the variables are + created to minimize the needed model changes for access to the memory. + + Optionally, also patch the defined functions with the SWC name as prefix. + + Args: + build_cfg (BuildProjConfig): Build project class holding where files should be stored. + unit_cfg (UnitConfigs): class holding units definitions, and which units to include. + no_nvm_a2l (bool): Do not generate A2L for NVM structs. + use_prefix (bool): Patch the nvm source file definitions with the SWC name as prefix. + """ + LOG.info("******************************************************") + LOG.info("Start generating NVMDefinitions") + start_time = time.time() + tot_vars_nvm = unit_cfg.get_per_cfg_unit_cfg().get("nvm", {}) + nvm_def = NVMDef(build_cfg, unit_cfg, tot_vars_nvm) + nvm_def.generate_nvm_config_files(no_nvm_a2l, use_prefix) + LOG.info( + "Finished generating NVMDefinitions (in %4.2f s)", time.time() - start_time + ) + + +def copy_unit_src_to_src_out(build_cfg): + """Copy unit source code to delivery folder. + + Function to copy all relevant .c, .h and .a2l files to the src + delivery folder (defined in the config file for the project), + from the units that are included in the project. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + """ + LOG.info("******************************************************") + LOG.info("Start copying unit source files") + start_time = time.time() + src_dirs = build_cfg.get_unit_src_dirs() + src_dst_dir = build_cfg.get_src_code_dst_dir() + files = [] + for src_dir in src_dirs.values(): + files.extend(glob.glob(pjoin(src_dir, "*.c"))) + files.extend(glob.glob(pjoin(src_dir, "*.cpp"))) + files.extend(glob.glob(pjoin(src_dir, "*.h"))) + for file_ in files: + shutil.copy2(file_, src_dst_dir) + LOG.debug("copied %s to %s", file_, src_dst_dir) + LOG.info( + "Finished copying unit source files (in %4.2f s)", time.time() - start_time + ) + + +def copy_common_src_to_src_out(build_cfg, patch=False): + """Copy source code to delivery folder. + + Function to copy all relevant .c and .h files to the src + delivery folder (defined in the config file for the project), + from the units that are included in the project. + + Optionally, also patch the defined functions with the SWC name as prefix. + + Args: + build_cfg (BuildProjConfig): Build project class holding where files should be stored. + patch (bool): Patch the common source file functions with the SWC name as prefix. + """ + LOG.info("******************************************************") + if patch: + LOG.info("Start copying and patching common source files") + else: + LOG.info("Start copying common source files") + + start_time = time.time() + src_dir = build_cfg.get_common_src_dir() + src_dst_dir = build_cfg.get_src_code_dst_dir() + included_common_files = build_cfg.get_included_common_files() + + files = [ + pjoin(src_dir, common_file + ".c") for common_file in included_common_files + ] + files.extend( + [pjoin(src_dir, common_file + ".h") for common_file in included_common_files] + ) + + files_to_copy = filter(os.path.isfile, files) + for file_ in files_to_copy: + if patch: + patch_and_copy_common_src_to_src_out(build_cfg.get_swc_name(), Path(file_), Path(src_dst_dir)) + else: + shutil.copy2(file_, src_dst_dir) + LOG.debug("copied %s to %s", file_, src_dst_dir) + + LOG.info( + "Finished copying common source files (in %4.2f s)", time.time() - start_time + ) + + +def patch_and_copy_common_src_to_src_out(swc_name, file_path, dest_dir): + """Copy common source code to delivery folder, patched with SWC prefix. + + Args: + swc_name (str): Software component name to use as prefix. + file_path (Path): Path to file to patch and copy. + dest_dir (Path): Destination directory for the patched file. + """ + with file_path.open(mode="r", encoding="utf-8") as file_handle: + content = file_handle.read() + + new_function = f"{swc_name}_{file_path.stem}" + new_content = content.replace(f"{file_path.stem}(", f"{new_function}(") + new_content_lines = new_content.splitlines() + + if file_path.suffix == ".h": + defines_index = next( + (idx for idx, line in enumerate(new_content_lines) if "DEFINES" in line and "(OPT)" not in line), + None + ) + if defines_index is not None: + # Insert at defines_index + 2, +1 to get to the next line and +1 to get after multiline comment + new_content_lines.insert(defines_index + 2, f"#define {file_path.stem} {new_function}") + + with Path(dest_dir, file_path.name).open(mode="w", encoding="utf-8") as file_handle: + file_handle.write("\n".join(new_content_lines)) + + +def copy_files_to_include(build_cfg): + """Copy source code to delivery folder. + + Function to copy all extra include files to the src delivery folder + (defined in the config file for the project), + from the units that are included in the project. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + """ + LOG.info("******************************************************") + LOG.info("Start copying extra included source files") + start_time = time.time() + include_paths = build_cfg.get_includes_paths() + src_dst_dir = build_cfg.get_src_code_dst_dir() + files = [] + for include_path in include_paths: + if os.path.isdir(include_path): + files.extend( + [ + Path(include_path, file_name) + for file_name in Path(include_path).iterdir() + if not file_name.is_dir() + ] + ) + elif os.path.isfile(include_path): + files.append(include_path) + else: + LOG.critical("File or directory %s not found", include_path) + for file_ in files: + shutil.copy2(file_, src_dst_dir) + LOG.debug("copied %s to %s", file_, src_dst_dir) + LOG.info( + "Finished copying extra included files (in %4.2f s)", time.time() - start_time + ) + + +def copy_unit_cfgs_to_output(build_cfg): + """Copy all relevant unit configuration files to delivery folder. + + Function to copy all relevant unit config .json files to the UnitCfg + delivery folder (defined in the config file for the project), + from the units that are included in the project. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + """ + cfg_dst_dir = build_cfg.get_unit_cfg_deliv_dir() + if cfg_dst_dir is not None: + LOG.info("******************************************************") + LOG.info("Start copying the unit config files") + start_time = time.time() + cfg_dirs = build_cfg.get_unit_cfg_dirs() + files = [] + for cfg_dir in cfg_dirs.values(): + files.extend(glob.glob(pjoin(cfg_dir, "*.json"))) + for file_ in files: + shutil.copy2(file_, cfg_dst_dir) + LOG.debug("copied %s to %s", file_, cfg_dst_dir) + LOG.info( + "Finished copying the unit config files (in %4.2f s)", + time.time() - start_time, + ) + + +def merge_a2l_files(build_cfg, unit_cfg, complete_a2l=False, silver_a2l=False): + """Merge a2l-files. + + Args: + build_cfg (BuildProjConfig): Build project class holding where + files should be stored + unit_cfg (UnitConfigs): class holding units definitions, + and which units to include + Returns: + a2l (A2lMerge): A2lMerge class holding the merged a2l data. + """ + LOG.info("******************************************************") + LOG.info("Start merging A2L-files") + start_time = time.time() + src_dirs = build_cfg.get_unit_src_dirs() + src_dst_dir = build_cfg.get_src_code_dst_dir() + a2l_files_unit = [] + for src_dir in src_dirs.values(): + a2l_files_unit.extend(glob.glob(pjoin(src_dir, "*.a2l"))) + a2l_files_gen = glob.glob(pjoin(src_dst_dir, "*.a2l")) + a2l = A2lMerge(build_cfg, unit_cfg, a2l_files_unit, a2l_files_gen) + new_a2l_file = os.path.join(src_dst_dir, build_cfg.get_a2l_name()) + # LOG.debug(new_a2l_file) + a2l.merge(new_a2l_file, complete_a2l, silver_a2l) + LOG.info("Finished merging A2L-files (in %4.2f s)", time.time() - start_time) + return a2l + + +def find_all_project_configs(prj_cfg_file): + """Find all Project config files.""" + prj_root_dir, _ = os.path.split(prj_cfg_file) + prj_root_dir = os.path.abspath(prj_root_dir) + all_cfg_path = os.path.join(prj_root_dir, "..", "*", "ProjectCfg.json") + return glob.glob(all_cfg_path, recursive=True) + + +def propagate_tag_name(build_cfg, tag_name, problem_logger): + """Set tag name in relevant files, for release builds. + + Args: + build_cfg (BuildProjConfig): Build project class holding where files should be stored. + tag_name (str): git tag name. + problem_logger (object): logger for pybuild. + """ + LOG.info("******************************************************") + LOG.info("Propagating tag name: %s", tag_name) + start_time = time.time() + + src_dst_dir = build_cfg.get_src_code_dst_dir() + h_file_path = os.path.join(src_dst_dir, "vcc_sp_version.h") + + if not os.path.isfile(h_file_path): + problem_logger.critical("Missing %s", h_file_path) + return + + with open(h_file_path, "r+", encoding="utf-8") as file_handle: + contents = file_handle.read() + file_handle.seek(0) + new_contents = contents.replace( + '#define VCC_SOFTWARE_NAME "tagname"', + f'#define VCC_SOFTWARE_NAME "{tag_name}"', + ) + file_handle.write(new_contents) + + LOG.info("Finished propagating tag name (in %4.2f s)", time.time() - start_time) + + +def add_args(parser): + """Add command line arguments for pybuild. + + This is useful when pybuild should be run through a command line wrapper function. + + Args: + parser (argparse.ArgumentParser): Parser instance to add arguments to. + """ + pybuild_parser = parser.add_argument_group("pybuild arguments") + pybuild_parser.add_argument( + "--project-config", required=True, help="Project root configuration file" + ) + pybuild_parser.add_argument( + "--generate-system-info", action="store_true", help="Generate AllSystemInfo.mat" + ) + pybuild_parser.add_argument( + "--generate-custom-conv-tab", + default=None, + help="Path to conversion table file. Useful for TargetLink enums in A2L file.", + ) + pybuild_parser.add_argument( + "--core-dummy", + action="store_true", + help="Generate core dummy code to enable integration with old supplier code", + ) + pybuild_parser.add_argument( + "--debug", action="store_true", help="Activate the debug log" + ) + pybuild_parser.add_argument( + "--no-abort", action="store_true", help="Do not abort due to errors" + ) + pybuild_parser.add_argument( + "--no-nvm-a2l", + action="store_true", + help="Do not generate a2l file for NVM structs", + ) + pybuild_parser.add_argument( + "--complete-a2l", action="store_true", help="Generate A2L with project info" + ) + pybuild_parser.add_argument( + "--silver-a2l", + action="store_true", + help="Generate A2L file with Silver patching. Complete A2L argument takes precedence.", + ) + pybuild_parser.add_argument( + "--interface", action="store_true", help="Generate interface report" + ) + pybuild_parser.add_argument( + "--generate-rte-checkpoint-calls", + action="store_true", + help="Generate RTE function checkpoint calls", + ) + pybuild_parser.add_argument( + "--version", + action="version", + version=f"%(prog)s {__version__}", + help="Display program version", + ) + + +def build( + project_config, + interface=False, + core_dummy=False, + no_abort=False, + no_nvm_a2l=False, + debug=False, + quiet=False, + generate_system_info=False, + generate_custom_conversion_table=None, + complete_a2l=False, + silver_a2l=False, + generate_rte_checkpoint_calls=False, +): + """Execute the build. + + Args: + project_config (str): Project configuration file. + interface (bool): Generate interface report. Default=False. + core_dummy (bool): Generate core dummy code. Default=False. + no_abort (bool): Do not abort due to errors. Default=False. + no_nvm_a2l (bool): Do not generate A2L for NVM structs. Default=False. + debug (bool): Activate the debug log. Default=False. + quiet (bool): Disable logging to stdout. Default=False. + generate_system_info (bool): Generate AllSystemInfo.mat for DocGen compatibility. Default=False. + generate_custom_conversion_table (str): Path to conversion table file. + Useful for TargetLink enums in A2L file. Default=None. + complete_a2l (bool): Add an a2l header plus additional content such as XCP data. + silver_a2l (bool): Add an a2l header plus additional patching required for Silver. + generate_rte_checkpoint_calls (bool): Generate RTE function checkpoint calls. + """ + try: + problem_logger = ProblemLogger() + tot_start_time = time.time() + project_config_files = find_all_project_configs(project_config) + prj_cfgs = {} + + for project_config_file in project_config_files: + conf = BuildProjConfig(os.path.normpath(project_config_file)) + prj_cfgs.update({conf.name: conf}) + + prj_cfgs = {} + build_cfg = BuildProjConfig(os.path.normpath(project_config)) + ecu_supplier = build_cfg.get_ecu_info()[0] + prj_cfgs.update({build_cfg.name: build_cfg}) + + build_cfg.create_build_dirs() + src_dst_dir = build_cfg.get_src_code_dst_dir() + + setup_logging(build_cfg.get_log_dst_dir(), problem_logger, debug, quiet) + LOG.info("Starting build") + LOG.info("pybuild version is: %s", __version__) + LOG.info("Project/Model config file version is: %s", __config_version__) + LOG.info("Read SPM code switches") + start_time = time.time() + feature_cfg = FeatureConfigs(build_cfg) + LOG.info( + "Finished reading SPM code switches (in %4.2f s)", time.time() - start_time + ) + + LOG.info("******************************************************") + LOG.info("Start generating per project unit config data") + start_time = time.time() + unit_cfg = UnitConfigs(build_cfg, feature_cfg) + LOG.info( + "Finished generating per project unit config data (in %4.2f s)", + time.time() - start_time, + ) + + udt = UserDefinedTypes(build_cfg, unit_cfg) + + start_time = time.time() + cnf_header = pjoin(src_dst_dir, build_cfg.get_feature_conf_header_name()) + LOG.info("******************************************************") + LOG.info("Generate compiler switches header file %s", cnf_header) + feature_cfg.gen_unit_cfg_header_file(cnf_header) + LOG.info( + "Finished generating compiler switches header file (in %4.2f s)", + time.time() - start_time, + ) + if build_cfg.has_yaml_interface: + signal_if = YamlSignalInterfaces(build_cfg, unit_cfg, feature_cfg, udt) + else: + signal_if = CsvSignalInterfaces(build_cfg, unit_cfg) + check_interfaces(build_cfg, signal_if) + if interface: + interface_report(build_cfg, unit_cfg, signal_if) + + udt.generate_common_header_files() + + generate_ext_var(build_cfg, unit_cfg, signal_if, udt) + if ecu_supplier in ["CSP", "HP", "HI", "ZC"]: + LOG.info("******************************************************") + LOG.info("Skip generating VcDummy file for %s projects", ecu_supplier) + else: + generate_dummy_var(build_cfg, unit_cfg, signal_if, udt) + + custom_dummy_spm = build_cfg.get_use_custom_dummy_spm() + if custom_dummy_spm is not None: + LOG.info("******************************************************") + if os.path.isfile(custom_dummy_spm): + LOG.info("Copying custom dummy spm file (%s)", custom_dummy_spm) + shutil.copy2(custom_dummy_spm, build_cfg.get_src_code_dst_dir()) + else: + LOG.warning( + "Cannot find desired custom dummy spm file: %s", custom_dummy_spm + ) + generate_dummy_spm(build_cfg, unit_cfg, feature_cfg, signal_if, udt) + else: + generate_dummy_spm(build_cfg, unit_cfg, feature_cfg, signal_if, udt) + + custom_sources = build_cfg.get_use_custom_sources() + if custom_sources is not None: + LOG.info("******************************************************") + for custom_src in custom_sources: + if os.path.isfile(custom_src): + LOG.info("Copying custom sourcefile (%s)", custom_src) + shutil.copy2(custom_src, build_cfg.get_src_code_dst_dir()) + else: + LOG.warning("Cannot find desired custom sourcefile: %s", custom_src) + + if ecu_supplier in ["HI"]: + LOG.info("******************************************************") + LOG.info("Generating Core header") + hi_core = HICore(build_cfg, unit_cfg) + hi_core.generate_dtc_files() + LOG.info("******************************************************") + LOG.info("Generating DID files") + dids = HIDIDs(build_cfg, unit_cfg) + dids.generate_did_files() + else: + generate_did_files(build_cfg, unit_cfg) + # generate core dummy files if requested + if core_dummy: + core_dummy_fname = os.path.basename(build_cfg.get_core_dummy_name()) + if CodeGenerators.embedded_coder in unit_cfg.code_generators: + LOG.info("******************************************************") + LOG.info("Skip generating %s for EC projects", core_dummy_fname) + elif ecu_supplier in ["HI", "ZC", "CSP"]: + LOG.info("******************************************************") + LOG.info("Skip generating %s for SPA2+ projects", core_dummy_fname) + else: + core = Core(build_cfg, unit_cfg) + generate_core_dummy(build_cfg, core, unit_cfg) + + # generate NVM definitions + if ecu_supplier in ["ZC"]: + generate_nvm_def(build_cfg, unit_cfg, no_nvm_a2l, True) + else: + generate_nvm_def(build_cfg, unit_cfg, no_nvm_a2l) + + LOG.info("******************************************************") + LOG.info("Start generating the scheduling functions") + start_time = time.time() + gen_schd = SchedFuncs(build_cfg, unit_cfg) + gen_schd.generate_sched_c_fncs(generate_rte_checkpoint_calls) + LOG.info( + "Finished generating the scheduling functions (in %4.2f s)", + time.time() - start_time, + ) + LOG.info("******************************************************") + LOG.info("Start generating the ts header file") + start_time = time.time() + gen_schd.generate_ts_defines(pjoin(src_dst_dir, build_cfg.get_ts_header_name())) + LOG.info( + "Finished generating ts header file (in %4.2f s)", time.time() - start_time + ) + + # Generate AllSystemInfo.mat for DocGen compatibility + if generate_system_info: + from pybuild.gen_allsysteminfo import GenAllSystemInfo + + gen_all_system_info = GenAllSystemInfo(signal_if, unit_cfg) + gen_all_system_info.build() + + # Check if errors + if not no_abort: + if problem_logger.errors(): + nbr_err = problem_logger.get_nbr_problems() + problem_logger.info( + "Aborting build due to errors (# critical:%s, # warnings:%s" + " after %4.2f s.", + nbr_err["critical"], + nbr_err["warning"], + time.time() - tot_start_time, + ) + return 1 + + # Copy files to output folder + copy_unit_src_to_src_out(build_cfg) + if ecu_supplier in ["ZC"]: + copy_common_src_to_src_out(build_cfg, True) + else: + copy_common_src_to_src_out(build_cfg) + copy_unit_cfgs_to_output(build_cfg) + copy_files_to_include(build_cfg) + if ecu_supplier in ["HI", "ZC"]: + memory_section = MemorySection(build_cfg) + memory_section.generate_required_header_files() + + # Propagate tag name for release builds + # TAG_NAME is set in release -> release-compile-denso/release-ecmsildll -> pybuild.build + tag_name = os.environ.get("TAG_NAME", "") + if tag_name and ecu_supplier == "Denso": + propagate_tag_name(build_cfg, tag_name, problem_logger) + + # Copy header files (subversion is using an external that points to + # the correct set of pragma section header_files + + # Make A2L-file + if generate_custom_conversion_table is not None: + ctable_json = Path(generate_custom_conversion_table).resolve() + ctable_a2l = Path(build_cfg.get_src_code_dst_dir(), "custom_tabs.a2l") + create_conversion_table(ctable_json, ctable_a2l) + merged_a2l = merge_a2l_files(build_cfg, unit_cfg, complete_a2l, silver_a2l) + if ecu_supplier in ["ZC"]: + axis_data = merged_a2l.get_characteristic_axis_data() + composition_yaml = CompositionYaml( + build_cfg, signal_if.composition_spec, unit_cfg, axis_data + ) + composition_yaml.generate_yaml() + zc_calibration = ZoneControllerCalibration( + build_cfg, composition_yaml.cal_class_info["tl"] + ) + zc_calibration.generate_calibration_interface_files() + + a2l_file_path = Path(build_cfg.get_src_code_dst_dir(), build_cfg.get_a2l_name()) + replace_tab_verb(a2l_file_path) + if problem_logger.errors(): + problem_logger.info( + "Critical errors were detected, aborting" " after %4.2f s.", + time.time() - tot_start_time, + ) + return 1 + + LOG.info("Finished build in %4.2f s", time.time() - tot_start_time) + return 0 + + finally: + logging.shutdown() diff --git a/pybuild/build_defs.py b/pybuild/build_defs.py new file mode 100644 index 0000000..e02d8e8 --- /dev/null +++ b/pybuild/build_defs.py @@ -0,0 +1,309 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Defines header file names for different sections generated c-code.""" + +CVC_CODE_START = 'CVC_CODE_START.h' # Header file name for CVC code start +CVC_CODE_END = 'CVC_CODE_END.h' # Header file name for CVC code end +CVC_CODE_ASIL_A_START = 'CVC_CODE_ASIL_A_START.h' # Header file name for CVC code start +CVC_CODE_ASIL_A_END = 'CVC_CODE_ASIL_A_END.h' # Header file name for CVC code end +CVC_CODE_ASIL_B_START = 'CVC_CODE_ASIL_B_START.h' # Header file name for CVC code start +CVC_CODE_ASIL_B_END = 'CVC_CODE_ASIL_B_END.h' # Header file name for CVC code end +CVC_CODE_ASIL_C_START = 'CVC_CODE_ASIL_C_START.h' # Header file name for CVC code start +CVC_CODE_ASIL_C_END = 'CVC_CODE_ASIL_C_END.h' # Header file name for CVC code end +CVC_CODE_ASIL_D_START = 'CVC_CODE_ASIL_D_START.h' # Header file name for CVC code start +CVC_CODE_ASIL_D_END = 'CVC_CODE_ASIL_D_END.h' # Header file name for CVC code end + +CVC_DISP_START = 'CVC_DISP_START.h' # Header file name for CVC measurable variables start +CVC_DISP_END = 'CVC_DISP_END.h' # Header file name for CVC measurable variables end +CVC_DISP_ASIL_A_START = 'CVC_DISP_ASIL_A_START.h' # Header file name for CVC ASIL A measurable variables start +CVC_DISP_ASIL_A_END = 'CVC_DISP_ASIL_A_END.h' # Header file name for CVC ASIL A measurable variables end +CVC_DISP_ASIL_B_START = 'CVC_DISP_ASIL_B_START.h' # Header file name for CVC ASIL B measurable variables start +CVC_DISP_ASIL_B_END = 'CVC_DISP_ASIL_B_END.h' # Header file name for CVC ASIL B measurable variables end +CVC_DISP_ASIL_C_START = 'CVC_DISP_ASIL_C_START.h' # Header file name for CVC ASIL C measurable variables start +CVC_DISP_ASIL_C_END = 'CVC_DISP_ASIL_C_END.h' # Header file name for CVC ASIL C measurable variables end +CVC_DISP_ASIL_D_START = 'CVC_DISP_ASIL_D_START.h' # Header file name for CVC ASIL D measurable variables start +CVC_DISP_ASIL_D_END = 'CVC_DISP_ASIL_D_END.h' # Header file name for CVC ASIL D measurable variables end +CVC_DISP_SEC_START = 'CVC_DISP_SEC_START.h' # Header file name for CVC secure measurable variables start +CVC_DISP_SEC_END = 'CVC_DISP_SEC_END.h' # Header file name for CVC secure measurable variables end + +CVC_CAL_START = 'CVC_CAL_START.h' # Header file name for CVC calibration data start +CVC_CAL_END = 'CVC_CAL_END.h' # Header file name for CVC calibration data end +CVC_CAL_ASIL_A_START = 'CVC_CAL_ASIL_A_START.h' # Header file name for CVC calibration data start +CVC_CAL_ASIL_A_END = 'CVC_CAL_ASIL_A_END.h' # Header file name for CVC calibration data end +CVC_CAL_ASIL_B_START = 'CVC_CAL_ASIL_B_START.h' # Header file name for CVC calibration data start +CVC_CAL_ASIL_B_END = 'CVC_CAL_ASIL_B_END.h' # Header file name for CVC calibration data end +CVC_CAL_ASIL_C_START = 'CVC_CAL_ASIL_C_START.h' # Header file name for CVC calibration data start +CVC_CAL_ASIL_C_END = 'CVC_CAL_ASIL_C_END.h' # Header file name for CVC calibration data end +CVC_CAL_ASIL_D_START = 'CVC_CAL_ASIL_D_START.h' # Header file name for CVC calibration data start +CVC_CAL_ASIL_D_END = 'CVC_CAL_ASIL_D_END.h' # Header file name for CVC calibration data end + +CVC_CONST_START = 'CVC_CONST_START.h' # Header file name for CVC calibration data start +CVC_CONST_END = 'CVC_CONST_END.h' # Header file name for CVC calibration data end +CVC_CONST_ASIL_A_START = 'CVC_CONST_ASIL_A_START.h' # Header file name for CVC calibration data start +CVC_CONST_ASIL_A_END = 'CVC_CONST_ASIL_A_END.h' # Header file name for CVC calibration data end +CVC_CONST_ASIL_B_START = 'CVC_CONST_ASIL_B_START.h' # Header file name for CVC calibration data start +CVC_CONST_ASIL_B_END = 'CVC_CONST_ASIL_B_END.h' # Header file name for CVC calibration data end +CVC_CONST_ASIL_C_START = 'CVC_CONST_ASIL_C_START.h' # Header file name for CVC calibration data start +CVC_CONST_ASIL_C_END = 'CVC_CONST_ASIL_C_END.h' # Header file name for CVC calibration data end +CVC_CONST_ASIL_D_START = 'CVC_CONST_ASIL_D_START.h' # Header file name for CVC calibration data start +CVC_CONST_ASIL_D_END = 'CVC_CONST_ASIL_D_END.h' # Header file name for CVC calibration data end + +CVC_NVM_START = 'CVC_NVM_START.h' # Header file name for CVC Non Volatile Memory start +CVC_NVM_END = 'CVC_NVM_END.h' # Header file name for CVC Non Volatile Memory end +CVC_NVM_P_START = 'CVC_NVM_P_START.h' # Header file name for persistent Non Volatile Memory start +CVC_NVM_P_END = 'CVC_NVM_P_END.h' # Header file name for persistent Non Volatile Memory end + +PREDECL_CODE_START = 'PREDECL_CODE_START.h' # Header file name for CVC code start +PREDECL_CODE_END = 'PREDECL_CODE_END.h' # Header file name for CVC code end +PREDECL_CODE_ASIL_A_START = 'PREDECL_CODE_ASIL_A_START.h' # Header file name for CVC code start +PREDECL_CODE_ASIL_A_END = 'PREDECL_CODE_ASIL_A_END.h' # Header file name for CVC code end +PREDECL_CODE_ASIL_B_START = 'PREDECL_CODE_ASIL_B_START.h' # Header file name for CVC code start +PREDECL_CODE_ASIL_B_END = 'PREDECL_CODE_ASIL_B_END.h' # Header file name for CVC code end +PREDECL_CODE_ASIL_C_START = 'PREDECL_CODE_ASIL_C_START.h' # Header file name for CVC code start +PREDECL_CODE_ASIL_C_END = 'PREDECL_CODE_ASIL_C_END.h' # Header file name for CVC code end +PREDECL_CODE_ASIL_D_START = 'PREDECL_CODE_ASIL_D_START.h' # Header file name for CVC code start +PREDECL_CODE_ASIL_D_END = 'PREDECL_CODE_ASIL_D_END.h' # Header file name for CVC code end + +PREDECL_DISP_START = 'PREDECL_DISP_START.h' # Header file name for CVC measurable variables start +PREDECL_DISP_END = 'PREDECL_DISP_END.h' # Header file name for CVC measurable variables end +PREDECL_DISP_ASIL_A_START = 'PREDECL_DISP_ASIL_A_START.h' # Header file name for CVC ASIL A measurable variables start +PREDECL_DISP_ASIL_A_END = 'PREDECL_DISP_ASIL_A_END.h' # Header file name for CVC ASIL A measurable variables end +PREDECL_DISP_ASIL_B_START = 'PREDECL_DISP_ASIL_B_START.h' # Header file name for CVC ASIL B measurable variables start +PREDECL_DISP_ASIL_B_END = 'PREDECL_DISP_ASIL_B_END.h' # Header file name for CVC ASIL B measurable variables end +PREDECL_DISP_ASIL_C_START = 'PREDECL_DISP_ASIL_C_START.h' # Header file name for CVC ASIL C measurable variables start +PREDECL_DISP_ASIL_C_END = 'PREDECL_DISP_ASIL_C_END.h' # Header file name for CVC ASIL C measurable variables end +PREDECL_DISP_ASIL_D_START = 'PREDECL_DISP_ASIL_D_START.h' # Header file name for CVC ASIL D measurable variables start +PREDECL_DISP_ASIL_D_END = 'PREDECL_DISP_ASIL_D_END.h' # Header file name for CVC ASIL D measurable variables end +PREDECL_DISP_SEC_START = 'PREDECL_DISP_SEC_START.h' # Header file name for CVC secure measurable variables start +PREDECL_DISP_SEC_END = 'PREDECL_DISP_SEC_END.h' # Header file name for CVC secure measurable variables end + +PREDECL_CAL_START = 'PREDECL_CAL_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_END = 'PREDECL_CAL_END.h' # Header file name for CVC calibration data end +PREDECL_CAL_ASIL_A_START = 'PREDECL_CAL_ASIL_A_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_ASIL_A_END = 'PREDECL_CAL_ASIL_A_END.h' # Header file name for CVC calibration data end +PREDECL_CAL_ASIL_B_START = 'PREDECL_CAL_ASIL_B_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_ASIL_B_END = 'PREDECL_CAL_ASIL_B_END.h' # Header file name for CVC calibration data end +PREDECL_CAL_ASIL_C_START = 'PREDECL_CAL_ASIL_C_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_ASIL_C_END = 'PREDECL_CAL_ASIL_C_END.h' # Header file name for CVC calibration data end +PREDECL_CAL_ASIL_D_START = 'PREDECL_CAL_ASIL_D_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_ASIL_D_END = 'PREDECL_CAL_ASIL_D_END.h' # Header file name for CVC calibration data end +PREDECL_CAL_EXT_START = 'PREDECL_CAL_EXT_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_EXT_END = 'PREDECL_CAL_EXT_END.h' # Header file name for CVC calibration data end +PREDECL_CAL_MERG_START = 'PREDECL_CAL_MERG_START.h' # Header file name for CVC calibration data start +PREDECL_CAL_MERG_END = 'PREDECL_CAL_MERG_END.h' # Header file name for CVC calibration data end + +PREDECL_CONST_START = 'PREDECL_CONST_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_END = 'PREDECL_CONST_END.h' # Header file name for CVC calibration data end +PREDECL_CONST_ASIL_A_START = 'PREDECL_CONST_ASIL_A_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_ASIL_A_END = 'PREDECL_CONST_ASIL_A_END.h' # Header file name for CVC calibration data end +PREDECL_CONST_ASIL_B_START = 'PREDECL_CONST_ASIL_B_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_ASIL_B_END = 'PREDECL_CONST_ASIL_B_END.h' # Header file name for CVC calibration data end +PREDECL_CONST_ASIL_C_START = 'PREDECL_CONST_ASIL_C_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_ASIL_C_END = 'PREDECL_CONST_ASIL_C_END.h' # Header file name for CVC calibration data end +PREDECL_CONST_ASIL_D_START = 'PREDECL_CONST_ASIL_D_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_ASIL_D_END = 'PREDECL_CONST_ASIL_D_END.h' # Header file name for CVC calibration data end +PREDECL_CONST_EXT_START = 'PREDECL_CONST_EXT_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_EXT_END = 'PREDECL_CONST_EXT_END.h' # Header file name for CVC calibration data end +PREDECL_CONST_MERG_START = 'PREDECL_CONST_MERG_START.h' # Header file name for CVC calibration data start +PREDECL_CONST_MERG_END = 'PREDECL_CONST_MERG_END.h' # Header file name for CVC calibration data end + +PREDECL_NVM_START = 'PREDECL_NVM_START.h' # Header file name for CVC Non Volatile Memory start +PREDECL_NVM_END = 'PREDECL_NVM_END.h' # Header file name for CVC Non Volatile Memory end +PREDECL_NVM_P_START = 'PREDECL_NVM_P_START.h' # Header file name for persistent Non Volatile Memory start +PREDECL_NVM_P_END = 'PREDECL_NVM_P_END.h' # Header file name for persistent Non Volatile Memory end + +PREDECL_START = 'PREDECL_START.h' +PREDECL_END = 'PREDECL_END.h' + +CVC_CODE_QM = {'START': CVC_CODE_START, 'END': CVC_CODE_END} +CVC_CODE_A = {'START': CVC_CODE_ASIL_A_START, 'END': CVC_CODE_ASIL_A_END} +CVC_CODE_B = {'START': CVC_CODE_ASIL_B_START, 'END': CVC_CODE_ASIL_B_END} +CVC_CODE_C = {'START': CVC_CODE_ASIL_C_START, 'END': CVC_CODE_ASIL_C_END} +CVC_CODE_D = {'START': CVC_CODE_ASIL_D_START, 'END': CVC_CODE_ASIL_D_END} + +CVC_DISP_QM = {'START': CVC_DISP_START, 'END': CVC_DISP_END} +CVC_DISP_A = {'START': CVC_DISP_ASIL_A_START, 'END': CVC_DISP_ASIL_A_END} +CVC_DISP_B = {'START': CVC_DISP_ASIL_B_START, 'END': CVC_DISP_ASIL_B_END} +CVC_DISP_C = {'START': CVC_DISP_ASIL_C_START, 'END': CVC_DISP_ASIL_C_END} +CVC_DISP_D = {'START': CVC_DISP_ASIL_D_START, 'END': CVC_DISP_ASIL_D_END} +CVC_DISP_SECURE = {'START': CVC_DISP_SEC_START, 'END': CVC_DISP_SEC_END} + +CVC_CAL_QM = {'START': CVC_CAL_START, 'END': CVC_CAL_END} +CVC_CAL_A = {'START': CVC_CAL_ASIL_A_START, 'END': CVC_CAL_ASIL_A_END} +CVC_CAL_B = {'START': CVC_CAL_ASIL_B_START, 'END': CVC_CAL_ASIL_B_END} +CVC_CAL_C = {'START': CVC_CAL_ASIL_C_START, 'END': CVC_CAL_ASIL_C_END} +CVC_CAL_D = {'START': CVC_CAL_ASIL_D_START, 'END': CVC_CAL_ASIL_D_END} + +CVC_CONST_QM = {'START': CVC_CONST_START, 'END': CVC_CONST_END} +CVC_CONST_A = {'START': CVC_CONST_ASIL_A_START, 'END': CVC_CONST_ASIL_A_END} +CVC_CONST_B = {'START': CVC_CONST_ASIL_B_START, 'END': CVC_CONST_ASIL_B_END} +CVC_CONST_C = {'START': CVC_CONST_ASIL_C_START, 'END': CVC_CONST_ASIL_C_END} +CVC_CONST_D = {'START': CVC_CONST_ASIL_D_START, 'END': CVC_CONST_ASIL_D_END} + +CVC_NVM = {'START': CVC_NVM_START, 'END': CVC_NVM_END} +CVC_NVM_P = {'START': CVC_NVM_P_START, 'END': CVC_NVM_P_END} + +PREDECL = {'START': PREDECL_START, 'END': PREDECL_END} + +PREDECL_CODE_QM = {'START': PREDECL_CODE_START, 'END': PREDECL_CODE_END} +PREDECL_CODE_A = {'START': PREDECL_CODE_ASIL_A_START, 'END': PREDECL_CODE_ASIL_A_END} +PREDECL_CODE_B = {'START': PREDECL_CODE_ASIL_B_START, 'END': PREDECL_CODE_ASIL_B_END} +PREDECL_CODE_C = {'START': PREDECL_CODE_ASIL_C_START, 'END': PREDECL_CODE_ASIL_C_END} +PREDECL_CODE_D = {'START': PREDECL_CODE_ASIL_D_START, 'END': PREDECL_CODE_ASIL_D_END} + +PREDECL_DISP_QM = {'START': PREDECL_DISP_START, 'END': PREDECL_DISP_END} +PREDECL_DISP_A = {'START': PREDECL_DISP_ASIL_A_START, 'END': PREDECL_DISP_ASIL_A_END} +PREDECL_DISP_B = {'START': PREDECL_DISP_ASIL_B_START, 'END': PREDECL_DISP_ASIL_B_END} +PREDECL_DISP_C = {'START': PREDECL_DISP_ASIL_C_START, 'END': PREDECL_DISP_ASIL_C_END} +PREDECL_DISP_D = {'START': PREDECL_DISP_ASIL_D_START, 'END': PREDECL_DISP_ASIL_D_END} +PREDECL_DISP_SECURE = {'START': PREDECL_DISP_SEC_START, 'END': PREDECL_DISP_SEC_END} + +PREDECL_CAL_QM = {'START': PREDECL_CAL_START, 'END': PREDECL_CAL_END} +PREDECL_CAL_A = {'START': PREDECL_CAL_ASIL_A_START, 'END': PREDECL_CAL_ASIL_A_END} +PREDECL_CAL_B = {'START': PREDECL_CAL_ASIL_B_START, 'END': PREDECL_CAL_ASIL_B_END} +PREDECL_CAL_C = {'START': PREDECL_CAL_ASIL_C_START, 'END': PREDECL_CAL_ASIL_C_END} +PREDECL_CAL_D = {'START': PREDECL_CAL_ASIL_D_START, 'END': PREDECL_CAL_ASIL_D_END} +PREDECL_CAL_EXT = {'START': PREDECL_CAL_EXT_START, 'END': PREDECL_CAL_EXT_END} +PREDECL_CAL_MERG = {'START': PREDECL_CAL_MERG_START, 'END': PREDECL_CAL_MERG_END} + +PREDECL_CONST_QM = {'START': PREDECL_CONST_START, 'END': PREDECL_CONST_END} +PREDECL_CONST_A = {'START': PREDECL_CONST_ASIL_A_START, 'END': PREDECL_CONST_ASIL_A_END} +PREDECL_CONST_B = {'START': PREDECL_CONST_ASIL_B_START, 'END': PREDECL_CONST_ASIL_B_END} +PREDECL_CONST_C = {'START': PREDECL_CONST_ASIL_C_START, 'END': PREDECL_CONST_ASIL_C_END} +PREDECL_CONST_D = {'START': PREDECL_CONST_ASIL_D_START, 'END': PREDECL_CONST_ASIL_D_END} +PREDECL_CONST_EXT = {'START': PREDECL_CONST_EXT_START, 'END': PREDECL_CONST_EXT_END} +PREDECL_CONST_MERG = {'START': PREDECL_CONST_MERG_START, 'END': PREDECL_CONST_MERG_END} + +PREDECL_NVM = {'START': PREDECL_NVM_START, 'END': PREDECL_NVM_END} +PREDECL_NVM_P = {'START': PREDECL_NVM_P_START, 'END': PREDECL_NVM_P_END} + +CVC_SECURE = { + 'CODE': CVC_CODE_QM, + 'DISP': CVC_DISP_SECURE, + 'CAL': CVC_CAL_QM, + 'CONST': CVC_CONST_QM +} + +CVC_ASIL_QM = { + 'CODE': CVC_CODE_QM, + 'DISP': CVC_DISP_QM, + 'CAL': CVC_CAL_QM, + 'CONST': CVC_CONST_QM +} + +CVC_ASIL_A = { + 'CODE': CVC_CODE_A, + 'DISP': CVC_DISP_A, + 'CAL': CVC_CAL_A, + 'CONST': CVC_CONST_A +} + +CVC_ASIL_B = { + 'CODE': CVC_CODE_B, + 'DISP': CVC_DISP_B, + 'CAL': CVC_CAL_B, + 'CONST': CVC_CONST_B +} + +CVC_ASIL_C = { + 'CODE': CVC_CODE_C, + 'DISP': CVC_DISP_C, + 'CAL': CVC_CAL_C, + 'CONST': CVC_CONST_C +} + +CVC_ASIL_D = { + 'CODE': CVC_CODE_D, + 'DISP': CVC_DISP_D, + 'CAL': CVC_CAL_D, + 'CONST': CVC_CONST_D +} + +PREDECL_SECURE = { + 'CODE': PREDECL_CODE_QM, + 'DISP': PREDECL_DISP_SECURE, + 'CAL': PREDECL_CAL_QM, + 'CONST': PREDECL_CONST_QM +} + +PREDECL_ASIL_QM = { + 'CODE': PREDECL_CODE_QM, + 'DISP': PREDECL_DISP_QM, + 'CAL': PREDECL_CAL_QM, + 'CONST': PREDECL_CONST_QM +} + +PREDECL_ASIL_A = { + 'CODE': PREDECL_CODE_A, + 'DISP': PREDECL_DISP_A, + 'CAL': PREDECL_CAL_A, + 'CONST': PREDECL_CONST_A +} + +PREDECL_ASIL_B = { + 'CODE': PREDECL_CODE_B, + 'DISP': PREDECL_DISP_B, + 'CAL': PREDECL_CAL_B, + 'CONST': PREDECL_CONST_B +} + +PREDECL_ASIL_C = { + 'CODE': PREDECL_CODE_C, + 'DISP': PREDECL_DISP_C, + 'CAL': PREDECL_CAL_C, + 'CONST': PREDECL_CONST_C +} + +PREDECL_ASIL_D = { + 'CODE': PREDECL_CODE_D, + 'DISP': PREDECL_DISP_D, + 'CAL': PREDECL_CAL_D, + 'CONST': PREDECL_CONST_D +} + +PREDECL_EXTRA = { + 'NORM': PREDECL, + 'CAL_EXT': PREDECL_CAL_EXT, + 'CONST_EXT': PREDECL_CONST_EXT, + 'CAL_MERG': PREDECL_CAL_MERG, + 'CONST_MERG': PREDECL_CONST_MERG +} + +NVM = {'CVC': CVC_NVM, 'PREDECL': PREDECL_NVM} +NVM_P = {'CVC': CVC_NVM_P, 'PREDECL': PREDECL_NVM_P} +SECURE = {'CVC': CVC_SECURE, 'PREDECL': PREDECL_SECURE} +ASIL_QM = {'CVC': CVC_ASIL_QM, 'PREDECL': PREDECL_ASIL_QM} +ASIL_A = {'CVC': CVC_ASIL_A, 'PREDECL': PREDECL_ASIL_A} +ASIL_B = {'CVC': CVC_ASIL_B, 'PREDECL': PREDECL_ASIL_B} +ASIL_C = {'CVC': CVC_ASIL_C, 'PREDECL': PREDECL_ASIL_C} +ASIL_D = {'CVC': CVC_ASIL_D, 'PREDECL': PREDECL_ASIL_D} + +NVM_LEVEL_MAP = { + 'NORMAL': NVM, + 'PROTECTED': NVM_P +} + +CVC_ASIL_LEVEL_MAP = { + 'QM': CVC_ASIL_QM, + 'A': CVC_ASIL_A, + 'B': CVC_ASIL_B, + 'C': CVC_ASIL_C, + 'D': CVC_ASIL_D +} + +PREDECL_ASIL_LEVEL_MAP = { + 'QM': PREDECL_ASIL_QM, + 'A': PREDECL_ASIL_A, + 'B': PREDECL_ASIL_B, + 'C': PREDECL_ASIL_C, + 'D': PREDECL_ASIL_D +} + +ASIL_LEVEL_MAP = { + 'QM': ASIL_QM, + 'A': ASIL_A, + 'B': ASIL_B, + 'C': ASIL_C, + 'D': ASIL_D +} diff --git a/pybuild/build_proj_config.py b/pybuild/build_proj_config.py new file mode 100644 index 0000000..6b944e3 --- /dev/null +++ b/pybuild/build_proj_config.py @@ -0,0 +1,606 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module used to read project and base configuration files and provides methods for abstraction.""" + +import glob +import json +import os +import shutil +import pathlib +from pprint import pformat + +from pybuild.lib.helper_functions import deep_dict_update +from pybuild.versioncheck import Version + + +class BuildProjConfig: + """A class holding build project configurations.""" + + def __init__(self, prj_config_file): + """Read project configuration file to internal an representation. + + Args: + prj_config_file (str): Project config filename + """ + super().__init__() + self._prj_cfg_file = prj_config_file + prj_root_dir, _ = os.path.split(prj_config_file) + self._prj_root_dir = os.path.abspath(prj_root_dir) + + with open(prj_config_file, 'r', encoding="utf-8") as pcfg: + self._prj_cfg = json.load(pcfg) + if not Version.is_compatible(self._prj_cfg.get('ConfigFileVersion')): + raise ValueError('Incompatible project config file version.') + # Load a basic config that can be common for several projects + # the local config overrides the base config + if 'BaseConfig' in self._prj_cfg: + fil_tmp = os.path.join(prj_root_dir, self._prj_cfg['BaseConfig']) + fil_ = os.path.abspath(fil_tmp) + with open(fil_, 'r', encoding="utf-8") as bcfg: + base_cnfg = json.load(bcfg) + deep_dict_update(self._prj_cfg, base_cnfg) + if not Version.is_compatible(self._prj_cfg.get('BaseConfigFileVersion')): + raise ValueError('Incompatible base config file version.') + self.has_yaml_interface = self._prj_cfg['ProjectInfo'].get('yamlInterface', False) + self.device_domains = self._get_device_domains() + self.services_file = self._get_services_file() + self._load_unit_configs() + self._add_global_const_file() + self._all_units = [] + self._calc_all_units() + self.name = self._prj_cfg['ProjectInfo']['projConfig'] + self.allow_undefined_unused = self._prj_cfg['ProjectInfo'].get('allowUndefinedUnused', True) + self._scheduler_prefix = self._prj_cfg['ProjectInfo'].get('schedulerPrefix', '') + if self._scheduler_prefix: + self._scheduler_prefix = self._scheduler_prefix + '_' + + def __repr__(self): + """Get string representation of object.""" + return pformat(self._prj_cfg['ProjectInfo']) + + def _get_device_domains(self): + file_name = self._prj_cfg['ProjectInfo'].get('deviceDomains') + full_path = pathlib.Path(self._prj_root_dir, file_name) + if full_path.is_file(): + with open(full_path, 'r', encoding="utf-8") as device_domains: + return json.loads(device_domains.read()) + return {} + + def _get_services_file(self): + file_name = self._prj_cfg['ProjectInfo'].get('serviceInterfaces', '') + full_path = pathlib.Path(self._prj_root_dir, file_name) + return full_path + + @staticmethod + def get_services(services_file): + """Get the services from the services file. + + Args: + services_file (pathlib.Path): The services file. + + Returns: + (dict): The services. + """ + if services_file.is_file(): + with services_file.open() as services: + return json.loads(services.read()) + return {} + + def _load_unit_configs(self): + """Load Unit config json file. + + This file contains which units are included in which projects. + """ + if 'UnitCfgs' in self._prj_cfg: + fil_tmp = os.path.join(self._prj_root_dir, self._prj_cfg['UnitCfgs']) + with open(fil_tmp, 'r', encoding="utf-8") as fpr: + tmp_unit_cfg = json.load(fpr) + sample_times = tmp_unit_cfg.pop('SampleTimes') + self._unit_cfg = { + 'Rasters': tmp_unit_cfg, + 'SampleTimes': sample_times + } + else: + raise ValueError('UnitCfgs is not specified in project config') + + def _add_global_const_file(self): + """Add the global constants definition to the 'not_scheduled' time raster.""" + ugc = self.get_use_global_const() + if ugc: + self._unit_cfg['Rasters'].setdefault('NoSched', []).append(ugc) + + def create_build_dirs(self): + """Create the necessary output build dirs if they are missing. + + Clear the output build dirs if they exist. + """ + src_outp = self.get_src_code_dst_dir() + if os.path.exists(src_outp): + shutil.rmtree(src_outp) + os.makedirs(src_outp) + + log_outp = self.get_log_dst_dir() + if os.path.exists(log_outp): + shutil.rmtree(log_outp) + os.makedirs(log_outp) + + rep_outp = self.get_reports_dst_dir() + if os.path.exists(rep_outp): + shutil.rmtree(rep_outp) + os.makedirs(rep_outp) + + unit_cfg_outp = self.get_unit_cfg_deliv_dir() + if os.path.exists(unit_cfg_outp): + shutil.rmtree(unit_cfg_outp) + if unit_cfg_outp is not None: + os.makedirs(unit_cfg_outp) + + def get_a2l_cfg(self): + """ Get A2L configuration from A2lConfig. + + Returns: + config (dict): A2L configuration + """ + a2l_config = self._prj_cfg.get('A2lConfig', {}) + return { + 'name': a2l_config.get('name', self._prj_cfg["ProjectInfo"]["projConfig"]), + 'allow_kp_blob': a2l_config.get('allowKpBlob', True), + 'ip_address': a2l_config.get('ipAddress', "169.254.4.10"), + 'ip_port': '0x%X' % a2l_config.get('ipPort', 30000), + 'asap2_version': a2l_config.get('asap2Version', "1 51") + } + + def get_unit_cfg_deliv_dir(self): + """Get the directory where to put the unit configuration files. + + If this key is undefined, or set to None, the unit-configs will + not be copied to the output folder. + + Returns: + A path to the unit deliver dir, or None + + """ + if 'unitCfgDeliveryDir' in self._prj_cfg['ProjectInfo']: + return os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['unitCfgDeliveryDir'])) + return None + + def get_root_dir(self): + """Get the root directory of the project. + + Returns: + A path to the project root (with wildcards) + + """ + return self._prj_root_dir + + def get_src_code_dst_dir(self): + """Return the absolute path to the source output folder.""" + return os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['srcCodeDstDir'])) + + def get_composition_name(self): + """Return the composition name.""" + name, _ = os.path.splitext(self._prj_cfg['ProjectInfo']['compositionName']) + return name + + def get_composition_ending(self): + """Return the composition ending.""" + _, ending = os.path.splitext(self._prj_cfg['ProjectInfo']['compositionName']) + if ending: + return ending + return 'yml' + + def get_composition_arxml(self): + """Return the relative composition arxml path.""" + return self._prj_cfg['ProjectInfo']['compositionArxml'] + + def get_gen_ext_impl_type(self): + """Return the generate external implementation type.""" + return self._prj_cfg['ProjectInfo'].get('generateExternalImplementationType', True) + + def get_swc_name(self): + """Returns the software component name.""" + a2lname = f"{self.get_a2l_cfg()['name']}_SC" + return self._prj_cfg['ProjectInfo'].get('softwareComponentName', a2lname) + + def get_car_com_dst(self): + """Return the absolute path to the source output folder.""" + return os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['didCarCom'])) + + def get_reports_dst_dir(self): + """Get the destination dir for build reports. + + Returns: + A path to the report files destination directory (with wildcards) + + """ + return os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['reportDstDir'])) + + def get_all_reports_dst_dir(self): + """Get the destination dir for build reports. + + Returns: + A path to the report files destination directory (for all projects) + + """ + return os.path.join(self.get_root_dir(), "..", "..", "Reports") + + def get_log_dst_dir(self): + """Return the absolute path to the log output folder. + + Returns: + A path to the log files destination directory (with wildcards) + + """ + return os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['logDstDir'])) + + def get_core_dummy_name(self): + """Return the file name of the core dummy file from the config file. + + Returns: + A file name for the core dummy files + + """ + path = os.path.join(self.get_src_code_dst_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['coreDummyFileName'])) + return path + + def get_feature_conf_header_name(self): + """Return the feature configuration header file name. + + Returns: + A file name for the feature config header file + + """ + return self._prj_cfg['ProjectInfo']['featureHeaderName'] + + def get_ts_header_name(self): + """Return the name of the ts header file, defined in the config file. + + Returns: + The file name of the file defining all unit raster times + + """ + return self._prj_cfg['ProjectInfo']['tsHeaderName'] + + def get_included_units(self): + """Return a list of all the included units in the project. + + TODO:Consider moving this to the Feature Configs class if we start + using our configuration tool for model inclusion and scheduling + TODO:Consider calculate this on init and storing the result in the + class. this method would the just return the stored list. + """ + units_dict = self._unit_cfg['Rasters'] + units = [] + for unit in units_dict.values(): + units.extend(unit) + return units + + def get_included_common_files(self): + """Return a list of all the included common files in the project. + + Returns: + included_common_files ([str]): The names of the common files which are included in the project. + + """ + return self._prj_cfg.get('includedCommonFiles', []) + + def _calc_all_units(self): + """Return a list of all the units.""" + units = set() + for runits in self._unit_cfg['Rasters'].values(): + units = units.union(set(runits)) + self._all_units = list(units) + + def get_includes_paths(self): + """Return list of paths to files to include in source directory.""" + includes_paths = self._prj_cfg.get('includesPaths', []) + return [os.path.join(self.get_root_dir(), os.path.normpath(path)) for path in includes_paths] + + def get_all_units(self): + """Return a list of all the units.""" + return self._all_units + + def get_prj_cfg_dir(self): + """Return the directory containing the project configuration files. + + Returns: + An absolute path to the project configuration files + + """ + return os.path.join(self._prj_root_dir, + self._prj_cfg['ProjectInfo']['configDir']) + + def get_scheduler_prefix(self): + """Returns a prefix used to distinguish function calls in one project from + similarly named functions in other projects, when linked/compiled together + + Returns: + scheduler_prefix (string): prefix for scheduler functions. + """ + return self._scheduler_prefix + + def get_local_defs_name(self): + """Return a string which defines the file name of local defines. + + Returns: + A string containing the wildcard file name local defines + + """ + return self._prj_cfg['ProjectInfo']['prjLocalDefs'] + + def get_codeswitches_name(self): + """Return a string which defines the file name of code switches. + + Returns: + A string containing the wildcard file name code switches + + """ + return self._prj_cfg['ProjectInfo']['prjCodeswitches'] + + def get_did_cfg_file_name(self): + """Return the did definition file name. + + Returns: + DID definition file name + + """ + return self._prj_cfg['ProjectInfo']['didDefFile'] + + def get_prj_config(self): + """Get the project configuration name from the config file. + + Returns: + Project config name + + """ + return self._prj_cfg['ProjectInfo']["projConfig"] + + def get_a2l_name(self): + """Get the name of the a2l-file, which the build system shall generate.""" + return self._prj_cfg['ProjectInfo']['a2LFileName'] + + def get_ecu_info(self): + """Return ecuSupplier and ecuType. + + Returns: + (ecuSupplier, ecuType) + + """ + return (self._prj_cfg['ProjectInfo']['ecuSupplier'], + self._prj_cfg['ProjectInfo'].get('ecuType', '')) + + def get_xcp_enabled(self): + """Return True/False whether XCP is enabled in the project or not. + + Returns: + (bool): True/False whether XCP is enabled in the project or not + + """ + return self._prj_cfg['ProjectInfo'].get('enableXcp', True) + + def get_nvm_defs(self): + """Return NVM-ram block definitions. + + The definitions contains the sizes of the six NVM areas + which are defined in the build-system. + + Returns: + NvmConfig dict from config file. + + """ + return self._prj_cfg['NvmConfig'] + + def _get_inc_dirs(self, path): + """Get the dirs with the models defined in the units config file. + + Model name somewhere in the path. + """ + all_dirs = glob.glob(path) + inc_units = self.get_included_units() + psep = os.path.sep + out = {} + for dir_ in all_dirs: + folders = dir_.split(psep) + for inc_unit in inc_units: + if inc_unit in folders: + out.update({inc_unit: dir_}) + break + return out + + def get_units_raster_cfg(self): + """Get the units' scheduling raster config. + + I.e. which units are included, and in which + rasters they are scheduled, and in which order. + + Returns: + A dict in the following format. + + :: + + { + "SampleTimes": { + "NameOfRaster": scheduling time}, + "Rasters": { + "NameOfRaster": [ + "NameOfFunction", + ...], + ...} + } + + Example:: + + { + "SampleTimes": { + "Vc10ms": 0.01, + "Vc40ms": 0.04}, + "Rasters": { + "Vc10ms": [ + "VcPpmImob", + "VcPpmPsm", + "VcPpmRc", + "VcPpmSt", + "VcPemAlc"], + "Vc40ms": [ + "VcRegCh"] + } + + """ + return self._unit_cfg + + def get_unit_cfg_dirs(self): + """Get config dirs which matches the project config parameter prjUnitCfgDir. + + Furthermore, they should be included in the unit definition for this project + + Returns: + A list with absolute paths to all unit config dirs + included in the project + + """ + path = os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['prjUnitCfgDir'])) + return self._get_inc_dirs(path) + + def get_translation_files_dirs(self): + """Get translation files directories, specified as a path regex in project + config by key prjTranslationDir. If key is not present, will fall back to + prjUnitCfgDir. + + Returns: + A dictionary with absolute paths to all translation file dirs included + in the project + """ + + if "prjTranslationDir" not in self._prj_cfg['ProjectInfo']: + return self.get_unit_cfg_dirs() + + normpath_dir = os.path.normpath(self._prj_cfg['ProjectInfo']['prjTranslationDir']) + path = os.path.join(self.get_root_dir(), normpath_dir) + + all_dirs = glob.glob(path) + translation_dirs = {} + for directory in all_dirs: + file = pathlib.Path(directory).stem + translation_dirs[file] = directory + return translation_dirs + + def get_common_src_dir(self): + """Get source dir which matches the project config parameter commonSrcDir. + + Returns: + Absolute path to common source dir + + """ + return os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo']['commonSrcDir'])) + + def get_unit_src_dirs(self): + """Get source dirs which matches the project config parameter prjUnitCfgDir. + + Furthermore, they should be included in the unit definition for this project + + Returns: + A list with absolute paths to all source dirs included in the + project + + """ + path = os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['prjUnitSrcDir'])) + return self._get_inc_dirs(path) + + def get_unit_mdl_dirs(self): + """Get source dirs which matches the project config parameter prjUnitCfgDir. + + Furthermore, they should be included in the unit definition for this project + + Returns: + A list with absolute paths to all model dirs included in the + project + + """ + path = os.path.join(self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo'] + ['prjUnitMdlDir'])) + return self._get_inc_dirs(path) + + def get_use_global_const(self): + """Get the name of the global constant module.""" + return self._prj_cfg['ProjectInfo']['useGlobalConst'] + + def get_use_volatile_globals(self): + """Get if global variables should be defined as volatile or not.""" + if 'useVolatileGlobals' in self._prj_cfg['ProjectInfo']: + return self._prj_cfg['ProjectInfo']['useVolatileGlobals'] + return False + + def get_use_custom_dummy_spm(self): + """Get path to file defining missing internal variables, if any. + + This file will be used instead of generating VcDummy_spm.c, + to make it easier to maintain missing internal signals. + + Returns: + customDummySpm (os.path): An absolute path to the custom dummy spm file, if existent. + """ + if 'customDummySpm' in self._prj_cfg['ProjectInfo']: + return os.path.join( + self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo']['customDummySpm']) + ) + return None + + def get_use_custom_sources(self): + """Get path to files with custom handwritten sourcecode, if any. + + Returns: + customSources (os.path): A list of absolute paths to custom sources, if existent. + """ + if 'customSources' in self._prj_cfg['ProjectInfo']: + normalized_paths = (os.path.normpath(p) for p in self._prj_cfg['ProjectInfo']['customSources']) + return [os.path.join(self.get_root_dir(), p) for p in normalized_paths] + return None + + def get_if_cfg_dir(self): + """Return the directory containing the interface configuration files. + + Returns: + An absolute path to the interface configuration files + + """ + return os.path.join(self._prj_root_dir, + self._prj_cfg['ProjectInfo']['interfaceCfgDir']) + + def get_enum_def_dir(self): + """Get path to dir containing simulink enumeration definitions, if any. + + Returns: + enumDefDir (os.path): An absolute path to the simulink enumerations, if existent. + """ + if 'enumDefDir' in self._prj_cfg['ProjectInfo']: + return os.path.join( + self.get_root_dir(), + os.path.normpath(self._prj_cfg['ProjectInfo']['enumDefDir']) + ) + return None + + +if __name__ == '__main__': + # Function for testing the module + BPC = BuildProjConfig('../../ProjectCfg.json') diff --git a/pybuild/check_interface.py b/pybuild/check_interface.py new file mode 100644 index 0000000..9a94a19 --- /dev/null +++ b/pybuild/check_interface.py @@ -0,0 +1,563 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- + +"""Python module used for calculating interfaces for CSP""" + + +import argparse +import os +import re +import sys +from itertools import product +from pathlib import Path + +import git + +from pybuild.interface.application import Application, Model, get_active_signals +from pybuild.interface.ems import CsvEMS +from pybuild.lib import logger + +LOGGER = logger.create_logger("Check interface") + + +def process_app(config): + """Get an app specification for the current project + + Entrypoint for external scripts. + + Args: + config (pathlib.Path): Path to the ProjectCfg.json + Returns: + app (Application): pybuild project + """ + app = Application() + app.parse_definition(config) + return app + + +def model_app_consistency(model, app_models, app, errors): + """Compare model signal interface with list of models. + + Args: + model (Model): model to compare against application + app_models (list(Model)): list of models to compare with + app (Application): pybuild project + errors (dict): Object for counting errors of different types + """ + + for compare_model in app_models: + LOGGER.debug("Comparing %s with %s in %s", model.name, compare_model.name, app.name) + active_model_outsignals = get_active_signals(model.outsignals, app.pybuild["feature_cfg"]) + active_model_insignals = get_active_signals(model.insignals, app.pybuild["feature_cfg"]) + active_compare_outsignals = get_active_signals(compare_model.outsignals, app.pybuild["feature_cfg"]) + active_compare_insignals = get_active_signals(compare_model.insignals, app.pybuild["feature_cfg"]) + check_signals( + active_model_insignals, + active_compare_outsignals, + errors, + [app.name, model.name], + [app.name, compare_model.name], + ) + check_signals( + active_model_outsignals, + active_compare_insignals, + errors, + [app.name, model.name], + [app.name, compare_model.name], + ) + + +def check_internal_signals(app, model_names=None): + """Look for all internal signal mismatches. + + Args: + app (Application): pybuild project + model_names (list(Model)): models based on parsed config jsons + Returns: + serious_mismatch (bool): A serious mismatch was found + """ + serious_mismatch = False + LOGGER.debug("Checking internal signals") + LOGGER.debug("Checking against %s", app.signals) + errors = {"type": 0, "range": 0, "unit": 0, "width": 0} + app_models = app.get_models() + for signal in app.signals: + LOGGER.debug(signal.properties) + + for model in app_models: + if model_names is not None and model.name not in model_names: + LOGGER.debug("Skipping %s", model.name) + continue + LOGGER.debug("Checking %s in %s", model.name, app.name) + active_insignals = get_active_signals(model.insignals, app.pybuild["feature_cfg"]) + insignal_mismatch = check_signals(active_insignals, app.signals, errors, [app.name, model.name], [app.name]) + active_outsignals = get_active_signals(model.outsignals, app.pybuild["feature_cfg"]) + outsignal_mismatch = check_signals(active_outsignals, app.signals, errors, [app.name, model.name], [app.name]) + if insignal_mismatch or outsignal_mismatch: + serious_mismatch = True + model_app_consistency(model, app_models, app, errors) + # Only compare with all models if a mismatch is found + LOGGER.debug("Total errors: %s", errors) + return serious_mismatch + + +def check_models_generic(all_models, model_names, emses): + """Check filtered models against all models and external interfaces.""" + serious_mismatch = False + for model in all_models: + LOGGER.info("Checking signals attributes for %s", model.name) + if model.name not in model_names: + continue + errors = {"type": 0, "range": 0, "unit": 0, "width": 0} + LOGGER.debug("Checking internal signals for %s", model.name) + for corresponding_model in all_models: + serious_mismatch |= check_signals( + model.insignals, corresponding_model.outsignals, errors, [model.name], [corresponding_model.name] + ) + serious_mismatch |= check_signals( + model.outsignals, corresponding_model.insignals, errors, [model.name], [corresponding_model.name] + ) + if emses: + LOGGER.debug("Checking external signals for %s", model.name) + for ems in emses: + serious_mismatch |= check_signals( + model.insignals, ems.outsignals, errors, [model.name], [ems.name] + ) + serious_mismatch |= check_signals( + model.outsignals, ems.insignals, errors, [model.name], [ems.name] + ) + LOGGER.debug("Total errors for %s: %s", model.name, errors) + return serious_mismatch + + +def get_all_models(model_root): + """Find, filter and parse all model configurations.""" + LOGGER.info("Parsing all models") + prefix = "config_" + suffix = ".json" + models = [] + for dirpath, _, filenames in os.walk(model_root): + dirpath = Path(dirpath) + for filename in [f for f in filenames if f.startswith(prefix) and f.endswith(suffix)]: + name = filename[len(prefix): -len(suffix)] + if name == dirpath.parent.stem: + model = Model(None) + model.parse_definition((name, Path(dirpath, filename))) + models.append(model) + return models + + +def get_projects(root, project_names): + """Find, parse and filter all project configurations.""" + LOGGER.info("Parsing all projects") + projects = [] + for dirpath, _, filenames in os.walk(root): + dirpath = Path(dirpath) + for filename in [f for f in filenames if f == "ProjectCfg.json"]: + config = Path(dirpath, filename) + app = Application() + app_name = app.get_name(config) + if project_names is not None and app_name not in project_names: + if config.parent.stem not in project_names: + LOGGER.info("%s or %s does not match %s", app_name, config.parent.stem, project_names) + continue + app.parse_definition(config) + if app.pybuild["build_cfg"].has_yaml_interface: + LOGGER.warning("Interface checks for yaml-interface projects are not implemtented yet") + LOGGER.info("Adding empty interface for %s", app_name) + projects.append((app, None)) + else: + ems = CsvEMS() + ems.parse_definition(config) + projects.append((app, ems)) + return projects + + +def correct_type(left_spec, right_spec): + """Check if the type is the same in two specifications. + + Args: + left_spec (dict): Signal specification + right_spec (dict): Signal specification to compare with + Returns: + matches (bool): Spec1 and Spec2 has the same type + """ + return left_spec["type"] == right_spec["type"] + + +def correct_attribute(left_spec, right_spec, attribute, default=None, check_bool=True): + """Check attributes other than type. + + Args: + left_spec (dict): Signal specification + right_spec (dict): Signal specification to compare with + attribute (string): Attribute to check + default (value): Default value for the attribute (default: None) + check_bool (bool): Check signals of type Bool (default: True) + Returns: + matches (bool): Spec1 and Spec2 has the same value for the attribute + """ + + def _format(value): + if isinstance(value, str): + value = value.strip() + if re.fullmatch("[+-]?[0-9]+", value): + value = int(value) + elif re.fullmatch("[+-]?[0-9]+[0-9.,eE+]*", value): + value = float(value.replace(",", ".")) + return value + + if not check_bool and left_spec["type"] == "Bool": + return True + return _format(left_spec.get(attribute, default)) == _format(right_spec.get(attribute, default)) + + +def found_mismatch(name, left_spec, right_spec, attribute, left_path, right_path): + """Handle finding a mismatch. + + Args: + name (string): Name of signal + left_spec (dict): Spec of signal + right_spec (dict): Signal specification to compare with + attribute (string): Attribute to check + left_path (list(str)): Path for where the left signals' definitions come from + right_path (list(str)): Path for where the right signals' definitions come from + """ + if attribute in ["type", "width"]: + # TODO: Add more properties as serious when the interfaces are more cleaned up + LOGGER.error( + "%s has %ss: %s in %s and %s in %s", + name, + attribute, + left_spec.get(attribute), + left_path, + right_spec.get(attribute), + right_path, + ) + return True + LOGGER.info( + "%s has %ss: %s in %s and %s in %s", + name, + attribute, + left_spec.get(attribute), + left_path, + right_spec.get(attribute), + right_path, + ) + return False + + +def check_external_signals(ems, app, model_names=None): + """Look for external signal mismatches. + + Args: + ems (CsvEMS): Parsed signal interface cvs:s + app (Application): Parsed project config + model_names (list(Model)): models based on parsed config jsons + Returns: + serious_mismatch (bool): A serious mismatch was found + """ + serious_mismatch = False + + LOGGER.debug("Checking insignals") + errors = {"type": 0, "range": 0, "unit": 0, "width": 0} + app_models = app.get_models() + for model in app_models: + if model_names is not None and model.name not in model_names: + LOGGER.debug("Skipping %s in %s", model.name, app.name) + continue + LOGGER.debug("Checking %s in %s", model.name, app.name) + serious_mismatch |= check_signals( + get_active_signals(model.insignals, app.pybuild["feature_cfg"]), + ems.outsignals, + errors, + [app.name, model.name], + [ems.name], + ) + serious_mismatch |= check_signals( + get_active_signals(model.outsignals, app.pybuild["feature_cfg"]), + ems.insignals, + errors, + [app.name, model.name], + [ems.name], + ) + LOGGER.debug("Total errors: %s", errors) + return serious_mismatch + + +def check_signals(left_signals, right_signals, errors, left_path=None, right_path=None): + """Compares insignals from one system with the outsignals of another. + + Args: + left_signals (list(Signal)): Insignals of one system such as a model + right_signals (list(Signal)): Outsignals of system to compare with + errors (dict): Object for counting errors of different types + left_path (list(str)): Path for where the left signals' definitions come from + right_path (list(str)): Path for where the right signals' definitions come from + Returns: + serious_mismatch (bool): A serious mismatch was found + """ + left_path = [] if left_path is None else left_path + right_path = [] if right_path is None else right_path + serious_mismatch = False + LOGGER.debug("Checking from %s", left_signals) + LOGGER.debug("Checking against %s", right_signals) + for (left_signal, right_signal) in [ + (left, right) for left, right in product(left_signals, right_signals) if left.name == right.name + ]: + LOGGER.debug("Comparing %s and %s", left_signal, right_signal) + left_properties = left_signal.properties + right_properties = right_signal.properties + LOGGER.debug("Properties left: %s", left_properties) + LOGGER.debug("Properties right: %s", right_properties) + if not correct_type(left_properties, right_properties): + serious_mismatch |= found_mismatch( + left_signal.name, left_properties, right_properties, "type", left_path, right_path + ) + errors["type"] += 1 + if not correct_attribute(left_properties, right_properties, "min", check_bool=False): + serious_mismatch |= found_mismatch( + left_signal.name, left_properties, right_properties, "min", left_path, right_path + ) + errors["range"] += 1 + if not correct_attribute(left_properties, right_properties, "max", check_bool=False): + serious_mismatch |= found_mismatch( + left_signal.name, left_properties, right_properties, "max", left_path, right_path + ) + errors["range"] += 1 + if not correct_attribute(left_properties, right_properties, "unit", default="", check_bool=False): + serious_mismatch |= found_mismatch( + left_signal.name, left_properties, right_properties, "unit", left_path, right_path + ) + errors["unit"] += 1 + if not correct_attribute(left_properties, right_properties, "width", default=1): + serious_mismatch |= found_mismatch( + left_signal.name, left_properties, right_properties, "width", left_path, right_path + ) + errors["width"] += 1 + return serious_mismatch + + +def parse_args(): + """Parse arguments + + Returns: + Namespace: the parsed arguments + """ + parser = argparse.ArgumentParser( + description=""" + Checks attributes and existence of signals + + Produced but not consumed signals are giving warnings + Consumed but not produced signals are giving errors + + Attributes checked are: types, ranges, units and widths + Mismatches in types or widths give errors + Mismatches in min, max or unit gives warnings + + Examples: + py -3.6 -m pybuild.check_interface models_in_projects \ + --projects + Checks models in Models/ModelGroup against ProjectOne and ProjectTwo in the folder Projects + + py -3.6 -m pybuild.check_interface models --models + Checks models ModelOne and ModelTwo against all other models in the folder Models + + py -3.6 -m pybuild.check_interface projects \ + --projects ProjectOne ProjectTwo ProjectThree + Checks the interfaces of ProjectOne, ProjectTwo and ProjectThree in the folder Projects + """, + formatter_class=argparse.RawTextHelpFormatter, + ) + subparsers = parser.add_subparsers(help="help for subcommand", dest="mode") + + # create the parser for the different commands + model = subparsers.add_parser( + "models", + description=""" + Check models independently of projects. + + All signals are assumed to be active. + Any signal that gives and error is used in a model but is not produced in any model or project + interface. + """, + ) + add_model_args(model) + + project = subparsers.add_parser( + "projects", + description=""" + Check projects as a whole. + + It checks all models intenally and the SPM vs the interface. + """, + ) + add_project_args(project) + + models_in_projects = subparsers.add_parser( + "models_in_projects", + description=""" + Check models specifically for projects. + + Codeswitches are used to determine if the signals are produced and consumed in each model. + """, + ) + add_project_args(models_in_projects) + add_model_args(models_in_projects) + models_in_projects.add_argument("--properties", help="Check properties such as type", action="store_true") + models_in_projects.add_argument("--existence", help="Check signal existence consistency", action="store_true") + return parser.parse_args() + + +def add_project_args(parser): + """Add project arguments to subparser""" + parser.add_argument("project_root", help="Path to start looking for projects", type=Path) + parser.add_argument( + "--projects", help="Name of projects to check. Matches both path and interface name.", nargs="+" + ) + + +def add_model_args(parser): + """Add model arguments to subparser""" + parser.add_argument("model_root", help="Path to start looking for models", type=Path) + parser.add_argument("--models", help="Name of models to check", nargs="+") + parser.add_argument("--gerrit", action="store_true", help="Deprecated") + parser.add_argument("--git", action="store_true", help="Get models to check from git HEAD") + + +def get_changed_models(): + """Get changed models in current commit.""" + repo = git.Repo() + changed_files_tmp = repo.git.diff("--diff-filter=d", "--name-only", "HEAD~1") + changed_files = changed_files_tmp.splitlines() + changed_models = [m for m in changed_files if m.endswith(".mdl") or m.endswith(".slx")] + return changed_models + + +def model_path_to_name(model_paths): + """Extract model names from a list of model paths.""" + model_names = [] + for model_path in model_paths: + model_name_with_extension = model_path.split("/")[-1] + model_name = model_name_with_extension.split(".")[0] + model_names.append(model_name) + return model_names + + +def model_check(args): + """Entry point for models command.""" + serious_mismatch = False + all_models = get_all_models(args.model_root) + if args.models is not None: + model_names = args.models + elif args.git or args.gerrit: + # Still checking args.gerrit due to common-linux-signal_consistency in pt-zuul-jobs + model_paths = get_changed_models() + model_names = model_path_to_name(model_paths) + else: + model_names = [model.name for model in all_models] + + serious_mismatch |= check_models_generic(all_models, model_names, []) + return serious_mismatch + + +def projects_check(args): + """Entry point for projects command.""" + serious_mismatch = False + projects = get_projects(args.project_root, args.projects) + for app, ems in projects: + LOGGER.info("Checking interfaces for %s", app.name) + serious_mismatch |= check_internal_signals(app, None) + if ems is not None: + serious_mismatch |= check_external_signals(ems, app, None) + return serious_mismatch + + +def models_in_projects_check(args): + """Entry point for models_in_projects command.""" + serious_mismatch = False + projects = get_projects(args.project_root, args.projects) + LOGGER.debug("Checking projects: %s", projects) + if args.properties: + for app, ems in projects: + serious_mismatch |= check_internal_signals(app, None or args.models) + if ems is not None: + serious_mismatch |= check_external_signals(ems, app, None or args.models) + if args.existence: + all_models = get_all_models(args.model_root) + model_names = [model.name for model in all_models] if args.models is None else args.models + serious_mismatch |= signal_existence(projects, model_names) + return serious_mismatch + + +def signal_existence(projects, model_names): + """Check which signals are consumed and produced in each project.""" + serious_mismatch = False + for app, ems in projects: + app_models = app.get_models() + LOGGER.info("Checking %s", app.name) + for project_model in app_models: + if project_model.name not in model_names: + continue + LOGGER.debug("Checking signal existence for %s", project_model.name) + active_insignals = get_active_signals(project_model.insignals, app.pybuild["feature_cfg"]) + active_outsignals = get_active_signals(project_model.outsignals, app.pybuild["feature_cfg"]) + insignal_matches = {} + outsignal_matches = {} + for check_model in app_models: + signal_match( + active_insignals, + get_active_signals(check_model.outsignals, app.pybuild["feature_cfg"]), + insignal_matches, + ) + signal_match( + active_outsignals, + get_active_signals(check_model.insignals, app.pybuild["feature_cfg"]), + outsignal_matches, + ) + if ems is not None: + signal_match(active_insignals, ems.outsignals, insignal_matches) + signal_match(active_outsignals, ems.insignals, outsignal_matches) + for missing_signal in [signal for signal, matched in insignal_matches.items() if not matched]: + # serious_mismatch = True # TODO: Activate this code when we want to gate on it. + LOGGER.warning( + "%s is consumed in %s but never produced in %s", missing_signal, project_model.name, app.name + ) + for missing_signal in [signal for signal, matched in insignal_matches.items() if not matched]: + LOGGER.debug("%s is consumed in %s and produced in %s", missing_signal, project_model.name, app.name) + for missing_signal in [signal for signal, matched in outsignal_matches.items() if not matched]: + LOGGER.info( + "%s is produced in %s but never consumed in %s", missing_signal, project_model.name, app.name + ) + for missing_signal in [signal for signal, matched in outsignal_matches.items() if not matched]: + LOGGER.debug("%s is consumed in %s and produced in %s", missing_signal, project_model.name, app.name) + return serious_mismatch + + +def signal_match(signals_to_check, signals_to_check_against, matches): + """Check for matches in signal names.""" + for a_signal in signals_to_check: + matches[a_signal.name] = matches.get(a_signal.name, False) + for b_signal in signals_to_check_against: + if b_signal.name == a_signal.name: + matches[a_signal.name] = True + + +def main(): + """Main function for stand alone execution.""" + args = parse_args() + if args.mode == "models": + serious_errors = model_check(args) + if args.mode == "projects": + serious_errors = projects_check(args) + if args.mode == "models_in_projects": + serious_errors = models_in_projects_check(args) + if serious_errors: + LOGGER.error("Serious interface errors found.") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/pybuild/config.py b/pybuild/config.py new file mode 100644 index 0000000..ac65238 --- /dev/null +++ b/pybuild/config.py @@ -0,0 +1,526 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Script to update configs based on c-files.""" +import argparse +import copy +import glob +import itertools +import json +import operator +import os +import re +from pprint import pformat + +from pybuild.lib import logger + +LOGGER = logger.create_logger('config') + + +class ConfigParserCommon: + """Parser for c and h files.""" + + def __init__(self): + """Initialize common properties.""" + self.ifs = [] + self.def_map = {} + self.configs = {} + self.code_regexes = [(re.compile(r'^\s*#(?Pif|ifdef|ifndef) (?P.*)$'), + self.parse_if), + (re.compile(r'^\s*#else.*$'), self.parse_else), + (re.compile(r'#define (\w*)\s?(.*)?'), self.parse_defines), + (re.compile(r'^\s*#endif.*$'), self.parse_endif)] + + def parse_line(self, line): + """Process each regex. + + Arguments: + line (str): line of code + """ + for regex, function in self.code_regexes: + self.process_regex(line, regex, function) + + @staticmethod + def process_regex(line, regex, function): + """Process one regex. + + Arguments: + line (str): line of code + regex (object): compiled re object + function (function): function to run if regex matches + """ + match = regex.match(line) + if match: + function(*match.groups()) + + def parse_file_content(self, file_content): + """Parse each line in the file. + + Arguments: + file_contents (list): Contents of a file + """ + for line in file_content: + self.parse_line(line) + + def parse_if(self, if_type, condition): + """Parse an if-preprocessor statement. + + Arguments: + match (object): match object + """ + self.ifs.append((if_type, condition)) + + def parse_else(self): + """Stub for parsing.""" + raise NotImplementedError + + def parse_defines(self, variable, definition): + """Stub for parsing.""" + raise NotImplementedError + + def parse_endif(self): + """Parse an endif-preprocessor statement. + + Arguments: + match (object): match object + """ + if self.ifs: + c_type, condition = self.ifs.pop() + LOGGER.debug('Removing %s %s', c_type, condition) + + @staticmethod + def read_file(c_file): + """Read file. + + Arguments: + c_file (str): Full path to a file + """ + file_content = '' + with open(c_file, encoding='latin-1') as file_handle: + for line in file_handle: + file_content += line + out = re.sub(r'/\*.*?\*/', '', file_content, flags=re.S).splitlines() + return out + + @staticmethod + def compose_and(conditions): + """Return and conditions.""" + return f"({' && '.join(conditions)})" + + @staticmethod + def compose_or(conditions): + """Return and conditions.""" + return f"({' || '.join(conditions)})" + + @staticmethod + def sort_u(item): + """Get a unique list of configs. + + Can handle unhashable elements. + + Arguments: + item (list): list to unique elements of. + """ + return map( + operator.itemgetter(0), + itertools.groupby(sorted(item))) + + +class CConfigParser(ConfigParserCommon): + """Parser for c-files.""" + + def set_regexes(self, variable): + """Create regexes to find configs for a single variable. + + Arguments: + variable (str): variable + """ + self.code_regexes.append((re.compile(r'.*\b({})\b.*'.format(variable)), self.parse_code)) + + def parse_defines(self, variable, definition): + """Parse defines in c-files.""" + if definition: + LOGGER.warning('Configuration using %s might be wrong. Set to %s in the c-file', variable, definition) + if variable: + if self.ifs and variable == self.ifs[-1][-1]: + self.ifs.pop() + + def parse_else(self): + """Parse defines in c-files.""" + if_type, condition = self.ifs.pop() + self.ifs.append(('else' + if_type, condition)) + + def parse_code(self, variable): + """Parse a line with the variable we are looking for. + + Arguments: + match (object): match object + """ + LOGGER.debug('Found %s with %s', variable, self.ifs) + if variable not in self.configs: + self.configs[variable] = [] + # In this case, we add to a list which should be joined by 'and' + self.configs[variable].append(copy.deepcopy(self.ifs)) + + @staticmethod + def define_config(condition, header_map, ctype): + """Get a config from the header map. + + Arguments: + condition + header_map + ctype + """ + if ctype == 'ifdef': + if condition in header_map.keys(): + config = header_map[condition] + else: + config = 'ALWAYS_ACTIVE' + LOGGER.error('Define not found: %s %s in %s', ctype, condition, header_map) + if ctype == 'ifndef': + if condition in header_map.keys(): + config = '!(' + header_map[condition] + ')' + else: + config = 'NEVER_ACTIVE' + LOGGER.error('Define not found: %s %s in %s', ctype, condition, header_map) + if ctype == 'elseifdef': + if condition in header_map.keys(): + config = f'!({header_map[condition]})' + else: + config = 'NEVER_ACTIVE' + LOGGER.error('Define not found: %s %s in %s', ctype, condition, header_map) + if ctype == 'elseifndef': + if condition in header_map.keys(): + config = header_map[condition] + else: + config = 'ALWAYS_ACTIVE' + LOGGER.error('Define not found: %s %s in %s', ctype, condition, header_map) + return config + + def get_configs(self, variable, header_map): + """Get configs. + + Does not remove redundant configs. + """ + configs = [] + if variable not in self.configs: + LOGGER.warning('%s not found. Inport that leads to terminal suspected.', variable) + return '(NEVER_ACTIVE)' + for config in self.configs[variable]: + tmp_config = [] + for ctype, condition in config: + if ctype == 'if': + if condition in header_map.keys(): + LOGGER.debug('Redefining %s as %s', condition, header_map[condition]) + tmp_config.append(header_map[condition]) + else: + tmp_config.append(condition) + elif ctype == 'elseif': + if condition in header_map.keys(): + LOGGER.debug('Redefining %s as !(%s)', condition, header_map[condition]) + tmp_config.append('!(' + header_map[condition] + ')') + else: + LOGGER.debug('Negating %s to !(%s)', condition, condition) + tmp_config.append('!(' + condition + ')') + else: + tmp_config.append(self.define_config(condition, header_map, ctype)) + if not tmp_config and config: + LOGGER.warning('Config not found: %s from %s', config, self.configs) + tmp_config.append('ALWAYS_ACTIVE') + LOGGER.info('Current config: %s', tmp_config) + elif not config: + LOGGER.debug('No config, always active') + tmp_config.append('ALWAYS_ACTIVE') + configs.append(self.compose_and(list(self.sort_u(tmp_config)))) + return self.compose_or(list(self.sort_u(configs))) + + +class JsonConfigHandler: + """Handle the json config.""" + + def __init__(self, cparser, header_map): + """Initialize handling of one json file. + + Arguments: + parser (obj): c-parser + header_map (dict): defines in the header files + """ + self.cparser = cparser + self.header_map = header_map + + def traverse_unit(self, struct, setup=True): + """Go through a data structure and look for configs to update. + + Arguments: + struct (dict): data to go through + parser (obj): parsing object + header_map (dict): dict of defines + setup (bool): Set up the parser obecjt (True) or replace configs (False) + """ + for name, data in struct.items(): + if isinstance(data, dict) and name != 'API_blk': + # Core data has the propety config, not configs + if data.get('API_blk') is not None or data.get('configs') is not None: + if setup: + self.cparser.set_regexes(name) + else: + data['configs'] = self.cparser.get_configs(name, self.header_map) + else: + self.traverse_unit(data, setup) + + def update_config(self, struct, c_code, header_map=None): + """Update dict. + + Arguments: + data (dict): A configuration dict or subdict + c_code (list): code part of a c-file + """ + if header_map is None: + header_map = {} + # Set up regexes: + self.traverse_unit(struct, setup=True) + self.cparser.parse_file_content(c_code) + self.traverse_unit(struct, setup=False) + + @staticmethod + def read_config(config_file): + """Read config file. + + Arguments: + config_file (str): Full path to config file + """ + with open(config_file, encoding='latin-1') as unit_json: + unit_config = json.load(unit_json) + return unit_config + + @staticmethod + def write_config(config_file, unit_config): + """Write config file. + + Arguments: + config_file (str): Full path to config file + unit_config (dict): Unit config to write to file + """ + with open(config_file, 'w', encoding="utf-8") as unit_json: + unit_json.write(json.dumps(unit_config, indent=2)) + + +class HeaderConfigParser(ConfigParserCommon): + """Parser for c-files.""" + + def set_defines(self, defines): + """Set already defined defines.""" + self.def_map = defines + + def parse_else(self): + """Crash if this is found in a header.""" + raise NotImplementedError + + def parse_defines(self, variable, definition): + """Parse defines in c-files.""" + if self.ifs and self.ifs[-1][0] == 'ifndef' and variable == self.ifs[-1][-1]: + # We have encountered a case of: + # + # #ifndef a + # #define a + # #define b + # + # Then we don't want b to be dependent on a not being defined. + + c_type, condition = self.ifs.pop() + LOGGER.debug('Removing now defined %s from ifs: %s %s', variable, c_type, condition) + if definition: + LOGGER.info('Redefining %s as %s', variable, definition) + # Here we ignore the potential #if statements preceding this. + # Have not encountered a case where that matters. + # This structure does not support that logic. + # Potential for bugs. + self.configs[variable] = [definition] + elif self.ifs: + config = self.get_configs(self.ifs, self.def_map) + LOGGER.info('Defining %s as %s', variable, config) + if variable not in self.configs: + self.configs[variable] = [] + self.configs[variable].append(copy.deepcopy(config)) + self.def_map.update({variable: copy.deepcopy(config)}) + + @staticmethod + def define_config(condition, header_map, ctype): + """Get a config from the header map. + + Arguments: + condition + header_map + ctype + """ + if ctype == 'ifdef': + if condition in header_map.keys(): + LOGGER.debug('returning %s as %s', condition, header_map[condition]) + config = header_map[condition] + else: + config = 'ALWAYS_ACTIVE' + LOGGER.warning('Not Implemented Yet: %s %s', ctype, condition) + if ctype == 'ifndef': + if condition in header_map.keys(): + LOGGER.debug('returning %s as %s', condition, header_map[condition]) + config = '!(' + header_map[condition] + ')' + else: + config = 'ALWAYS_ACTIVE' + LOGGER.warning('Not Implemented Yet: %s %s', ctype, condition) + return config + + def process_config(self, inconfigs, header_map): + """Process configs.""" + configs = [] + for config in inconfigs: + LOGGER.debug('Current config: %s', config) + if isinstance(config, list): + configs.append(self.process_config(config, header_map)) + else: + ctype, condition = config + if ctype == 'if': + if condition in header_map.keys(): + configs.append(header_map[condition]) + else: + configs.append(condition) + elif ctype in ['ifdef', 'ifndef']: + configs.append(self.define_config(condition, header_map, ctype)) + else: + LOGGER.error('Not Implemented: %s', ctype) + if not configs: + configs = ['ALWAYS_ACTIVE'] + return list(self.sort_u(configs)) + + def get_configs(self, configs, header_map): + """Get configs. + + Does not remove redundant configs. + """ + configs = self.process_config(configs, header_map) + if len(configs) > 1: + return self.compose_and(list(self.sort_u(configs))) + return configs[0] + + def get_config(self): + """Get the header map.""" + header_map = self.def_map + for header_def, configs in self.configs.items(): + header_map[header_def] = self.compose_or(configs) + return header_map + + +class ProcessHandler: + """Class to collect functions for the process.""" + + @staticmethod + def parse_args(): + """Parse arguments.""" + parser = argparse.ArgumentParser("Parse configs.json and c-files, to update code switch configes") + subparser = parser.add_subparsers(title='Operation mode', dest='mode', + help="Run chosen files on in a number of directories") + dir_parser = subparser.add_parser( + 'models', + help="Run for one or multiple models. Script finds files generated from the model(s).") + dir_parser.add_argument('models', nargs='+', + help="Space separated list of model directories") + file_parser = subparser.add_parser('files', + help="Choose specific files. Mainly for manually written configs.") + file_parser.add_argument('c_file', + help="Full path to C-file") + file_parser.add_argument('config_file', + help="Full path to config file") + file_parser.add_argument('--aux_file', + help="Full path to tl_aux file. (Optional) ") + file_parser.add_argument('--local_file', + help="Full path to OPort file. (Optional) ") + args = parser.parse_args() + return args + + @staticmethod + def get_files(model_path): + """Get file paths from model path. + + Arguments: + model_path (str): Path to a model (.mdl) + + Returns: + local_file (str): Path to model_OPortMvd_LocalDefs.h + aux_file (str): Path to tl_aux_defines_model.h + config_file (str): Path to config_model.json + c_file (str): Path to model.c + + """ + model_dir = os.path.dirname(model_path) + LOGGER.info('Processing %s', model_dir) + model_name = os.path.basename(model_dir) + local_file = os.path.join(model_dir, 'pybuild_src', f'{model_name}_OPortMvd_LocalDefs.h') + # aux_file does not contain the whole model-name if it is too long. + aux_file = os.path.join(model_dir, 'pybuild_src', f'tl_aux_defines_{model_name[2:12]}.h') + config_file = os.path.join(model_dir, 'pybuild_cfg', f'config_{model_name}.json') + clean_model_name = model_name.split('__')[0] + c_file = os.path.join(model_dir, 'pybuild_src', f'{clean_model_name}.c') + return local_file, aux_file, c_file, config_file + + @staticmethod + def update_config_file(c_file, config_file, header_map): + """Update one config file. + + Arguments: + c_file (str): Full path to c-file + config_file (str): Full path to config.json + oport_file (str): Full path to OPortMvd_LocalDefs.h (Optional) + """ + LOGGER.info('Updating %s based on %s', config_file, c_file) + cparser = CConfigParser() + c_code = cparser.read_file(c_file) + json_handler = JsonConfigHandler(cparser, header_map) + unit_config = json_handler.read_config(config_file) + json_handler.update_config(unit_config, c_code, header_map) + json_handler.write_config(config_file, unit_config) + + @staticmethod + def get_header_config(header_file, def_map): + """Get header config. + + Arguments: + c_file (str): Full path to c-file + config_file (str): Full path to config.json + oport_file (str): Full path to OPortMvd_LocalDefs.h (Optional) + """ + if header_file is None: + LOGGER.info('File not found: %s', header_file) + return def_map + if not os.path.isfile(header_file): + LOGGER.info('File not found: %s', header_file) + model_dir = os.path.dirname(header_file) + for tl_aux_file in glob.glob(os.path.join(model_dir, 'tl_aux*')): + LOGGER.warning('Looking for %s?', tl_aux_file) + return def_map + LOGGER.info('Parsing %s', header_file) + parser = HeaderConfigParser() + header_code = parser.read_file(header_file) + parser.set_defines(def_map) + parser.parse_file_content(header_code) + LOGGER.debug('Header configs: %s', pformat(parser.configs)) + return parser.get_config() + + @classmethod + def main(cls): + """Run the main function of the script.""" + args = cls.parse_args() + if args.mode == 'files': + LOGGER.info('Using manually supplied files %s', args) + local_defs = cls.get_header_config(args.local_file, {}) + aux_defs = cls.get_header_config(args.aux_file, local_defs) + cls.update_config_file(args.c_file, args.config_file, aux_defs) + else: + for model in args.models: + local_file, aux_file, c_file, config_file = cls.get_files(model) + local_defs = cls.get_header_config(local_file, {}) + aux_defs = cls.get_header_config(aux_file, local_defs) + if os.path.isfile(c_file) and os.path.isfile(config_file): + cls.update_config_file(c_file, config_file, aux_defs) + + +if __name__ == "__main__": + ProcessHandler.main() diff --git a/pybuild/core.py b/pybuild/core.py new file mode 100644 index 0000000..76792f8 --- /dev/null +++ b/pybuild/core.py @@ -0,0 +1,296 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""This module is used to parse the core definition files. + +Also provides methods to filter the definitions per project. +""" + +import os +import time +from collections import defaultdict +from pathlib import Path +from ruamel.yaml import YAML +from pybuild import build_defs +from pybuild.xlrd_csv import WorkBook +from pybuild.problem_logger import ProblemLogger + + +class Core(ProblemLogger): + """A class holding core configuration data.""" + + __wrk_sheets = {'EventIDs': {'mdl_col': 0, + 'id_col': 1, + 'desc_col': 2, + 'fid_col': 3, + 'com_col': 4, + 'data_col': 5}, + 'FunctionIDs': {'mdl_col': 0, + 'id_col': 1, + 'desc_col': 2, + 'com_col': 3, + 'data_col': 4}, + 'IUMPR': {'mdl_col': 0, + 'id_col': 1, + 'desc_col': 2, + 'fid_col': 3, + 'com_col': 4, + 'data_col': 5}, + 'Mode$06': {'mdl_col': 0, + 'id_col': 1, + 'desc_col': 2, + 'fid_col': 3, + 'UAS_col': 4, + 'com_col': 5, + 'data_col': 6}, + 'Ranking': {'mdl_col': 0, + 'id_col': 1, + 'desc_col': 2, + 'fid_col': 3, + 'com_col': 4, + 'data_col': 5}} + + _NoFid = '_NoFid' + + def __init__(self, project_cfg, unit_cfgs): + """Parse the config files to an internal representation. + + Args: + project_cfg (BuildProjConfig): Project configuration + unit_cfgs (UnitConfigs): Unit definitions + """ + super().__init__() + self._prj_cfg = project_cfg + self._unit_cfgs = unit_cfgs + self._csv_files = None + self._read_csv_files(self._prj_cfg.get_prj_cfg_dir()) + self._parse_core_config() + + def _read_csv_files(self, config_path): + """Metod for reading the core csv confgiuration files.""" + self.info('******************************************************') + self.info('Start parsing the core configuration files') + start_time = time.time() + csv_file_names = [] + for sheet in self.__wrk_sheets: + fname = os.path.join(config_path, + 'CoreIdNameDefinition_' + sheet + '.csv') + self.debug('Core csv: %s', fname) + csv_file_names.append(fname) + self._csv_files = WorkBook(csv_file_names) + self.info('Finished parsing the core configuration files (in %4.2f s)', time.time() - start_time) + + def _parse_core_config(self): + """Parse core IDs for all projects.""" + # Parse sheet by sheet + tmp_ids = {} + for sheet_name, cols in self.__wrk_sheets.items(): + worksheet = self._csv_files.sheet_by_name(sheet_name) + prj_row = worksheet.row(1) + curr_sheet = tmp_ids[sheet_name] = {} + for prj_col in range(cols['data_col'], len(prj_row)): + prj = prj_row[prj_col].value + curr_id = curr_sheet[prj] = {} + for curr_row in range(2, worksheet.nrows): + row = worksheet.row(curr_row) + val = row[prj_col].value + if val and val.strip() in 'xX': + func_tmp = row[cols['id_col']].value.strip() + if func_tmp != '': + if sheet_name == 'Mode$06': + uas_val = row[cols['UAS_col']].value + if isinstance(uas_val, float): + uas_val = int(uas_val) + curr_id[func_tmp] = (row[cols['desc_col']].value, + str(uas_val)) + else: + curr_id[func_tmp] = row[ + cols['desc_col']].value + # Reformat from Sheet->Proj->Id to Proj->Sheet->Id + self._ids = defaultdict(dict) + for s_name, s_data in tmp_ids.items(): + for p_name, p_data in s_data.items(): + self._ids[p_name][s_name] = p_data + + def get_core_ids_proj(self, project): + """Get the core IDs for a project. + + Returns: + dict: Core IDs + + """ + core_ids = self._ids[project] + # Check for unused core symbols + for sheet_name, sheet_data in core_ids.items(): + for id_ in sheet_data: + if not self._unit_cfgs.check_if_in_per_cfg_unit_cfg('core', id_): + self.debug('Core symbol not used in current project: %s/%s', sheet_name, id_) + # Check for undefined core symbols in unit configs + ucfg = self._unit_cfgs.get_per_cfg_unit_cfg() + for id_ in ucfg.get('core', {}): + for _, core_sheet in core_ids.items(): + if id_ in core_sheet: + break + else: + self.warning('Core symbol not defined for current project: %s', id_) + return core_ids + + def get_current_core_config(self): + """Return all the core configuration parameters for the current project. + + Returns: + dict: All the core configuration parameters + + """ + return self.get_core_ids_proj(self._prj_cfg.get_prj_config()) + + +class HICore(ProblemLogger): + """A class holding HI core configuration data.""" + + DTC_DEFINITION_FILE_NAME = 'DTCs.yaml' + FILE_NAME = 'VcCoreSupplierAbstraction' + + def __init__(self, project_cfg, unit_cfgs): + """Parse the config files to an internal representation. + + Args: + project_cfg (BuildProjConfig): Project configuration. + unit_cfgs (UnitConfigs): Unit definitions. + """ + super().__init__() + self._prj_cfg = project_cfg + self._unit_cfgs = unit_cfgs + self.diagnostic_trouble_codes = self.get_diagnostic_trouble_codes() + + def _get_project_dtcs(self): + """Return a set with DTCs in the currently included SW-Units. + + Returns: + (set): Set of DTCs in the currently included SW-Units. + """ + project_dtcs = set() + unit_cfg = self._unit_cfgs.get_per_unit_cfg() + for unit, data in unit_cfg.items(): + event_data = data.get('core', {}).get('Events') + if event_data is None: + self.critical(f'No "core" or "core.Events" key in unit config for {unit}.') + continue + project_dtcs |= set(event_data.keys()) + return project_dtcs + + def _read_dtc_yaml_file(self): + """Return a set with DTCs loaded from the project DTC yaml file. + + Returns: + (set): Set of DTCs loaded from the DTC yaml file. + """ + diagnostic_trouble_codes = {} + dtc_definition_file_path = Path(self._prj_cfg.get_prj_cfg_dir(), self.DTC_DEFINITION_FILE_NAME) + if dtc_definition_file_path.exists(): + with dtc_definition_file_path.open(mode='r', encoding='utf-8') as dtc_fh: + yaml = YAML(typ='safe', pure=True) + diagnostic_trouble_codes = yaml.load(dtc_fh) + else: + self.warning( + 'Unable to generate DTC function calls. ' + f'Cannot find file: {dtc_definition_file_path.as_posix()}.' + ) + return diagnostic_trouble_codes + + def get_diagnostic_trouble_codes(self): + """Return a set of DTCs appearing in both the project and the project yaml file. + + Returns: + (dict): Dict of DTCs, project yaml dict where the keys also appear in the project. + """ + project_dtcs = self._get_project_dtcs() + yaml_dtc_dict = self._read_dtc_yaml_file() + yaml_dtcs = set(yaml_dtc_dict.keys()) + dtcs_not_in_project = yaml_dtcs - project_dtcs + dtcs_not_in_yaml = project_dtcs - yaml_dtcs + for key in dtcs_not_in_project: + self.warning(f'Ignoring DTC {key} since it does not appear in any model.') + del yaml_dtc_dict[key] + for key in dtcs_not_in_yaml: + self.warning(f'Ignoring DTC {key} since it does not appear in the project DTC yaml file.') + return yaml_dtc_dict + + def get_header_content(self): + """Get content for the DTC header file. + + Returns: + (list(str)): List of lines to write to the DTC header file. + """ + name = self._prj_cfg.get_a2l_cfg()['name'] + header_guard = f'{self.FILE_NAME.upper()}_H' + header = [ + f'#ifndef {header_guard}\n', + f'#define {header_guard}\n', + '\n', + '/* Core API Supplier Abstraction */\n', + '\n', + '#include "tl_basetypes.h"\n', + f'#include "Rte_{name}.h"\n', + '\n' + ] + footer = [f'\n#endif /* {header_guard} */\n'] + + if not self.diagnostic_trouble_codes: + return header + footer + + body = [ + '/* enum EventStatus {passed=0, failed=1, prepassed=2, prefailed=3} */\n', + '#define Dem_SetEventStatus(EventName, EventStatus)', + ' ', + f'{self.FILE_NAME}_##EventName##_SetEventStatus(EventStatus)\n' + ] + body.append(f'\n#include "{build_defs.PREDECL_CODE_ASIL_D_START}"\n') + for dtc_name in self.diagnostic_trouble_codes: + body.append(f'UInt8 {self.FILE_NAME}_{dtc_name}_SetEventStatus(UInt8 EventStatus);\n') + body.append(f'#include "{build_defs.PREDECL_CODE_ASIL_D_END}"\n') + return header + body + footer + + def get_source_content(self): + """Get content for the DTC source file. + + Returns: + (list(str)): List of lines to write to the DTC source file. + """ + header = [ + f'#include "{self.FILE_NAME}.h"\n', + '\n' + ] + + if not self.diagnostic_trouble_codes: + return header + + body = [f'#include "{build_defs.CVC_CODE_ASIL_D_START}"\n'] + for dtc_name, dtc_id in self.diagnostic_trouble_codes.items(): + # hex function removes leading 0, below solution zero pads to 6 digits + dtc_hex_str = f"0x{dtc_id:06X}" + body.extend([ + f'UInt8 {self.FILE_NAME}_{dtc_name}_SetEventStatus(UInt8 EventStatus)\n', + '{\n', + f' Rte_Call_Event_DTC_{dtc_hex_str}_SetEventStatus(EventStatus);\n', + ' return 0;\n', + '}\n', + '\n' + ]) + body.append(f'#include "{build_defs.CVC_CODE_ASIL_D_END}"\n') + + return header + body + + def generate_dtc_files(self): + """Generate required HI Core header files. + Only use for some projects, which doesn't copy static code.""" + file_contents = { + '.h': self.get_header_content(), + '.c': self.get_source_content() + } + src_dst_dir = self._prj_cfg.get_src_code_dst_dir() + for extension, content in file_contents.items(): + file_path = Path(src_dst_dir, self.FILE_NAME + extension) + with file_path.open(mode='w', encoding='utf-8') as file_handler: + file_handler.writelines(content) diff --git a/pybuild/core_dummy.py b/pybuild/core_dummy.py new file mode 100644 index 0000000..8c8ba3a --- /dev/null +++ b/pybuild/core_dummy.py @@ -0,0 +1,358 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module containing classes for generating core API dummy code for Bosch and Denso suppliers. + +These files are needed for building test SW before the supplier has +updated the core with all the needed core id definitions. +""" + +import os + +from pybuild import build_defs +from pybuild.problem_logger import ProblemLogger +from pybuild.types import get_ec_type +from pybuild.unit_configs import CodeGenerators + + +class CoreDummy(ProblemLogger): + """A class for core API dummy file generation.""" + + def __init__(self, core_cfg, unit_cfg): + """Initialize with core API configuration. + + Args: + core_cfg (Core): Configuration object + """ + super().__init__() + self._core_cfg = core_cfg + self._unit_cfg = unit_cfg + self._uint16_type = self._get_uint_16_type() + self.fh_c = None + self.fh_h = None + + def _get_uint_16_type(self): + if CodeGenerators.target_link in self._unit_cfg.code_generators: + return 'UInt16' + return get_ec_type('UInt16') + + def _gen_rb_header(self, file_name): + """Generate the RB start of the c and h files for the dummy core definition files. + + Args: + file_name : The RB header file + """ + self.fh_c.write('/* Autogenerated core id dummy file */\n\n') + self.fh_c.write(f'#include "{file_name}"\n\n') + self.fh_c.write(f'#include "{build_defs.CVC_CODE_START}"\n\n') + self.fh_c.write('#ifndef VcEvDummy_ID\n') + self.fh_c.write(' #define VcEvDummy_ID 1\n') + self.fh_c.write('#endif /* VcEvDummy_ID */\n') + self.fh_c.write('#ifndef VcEvDummy_DEBMODE\n') + self.fh_c.write(' #define VcEvDummy_DEBMODE 0\n') + self.fh_c.write('#endif /* VcEvDummy_DEBMODE */\n') + self.fh_c.write('#ifndef VcFiDummy_ID\n') + self.fh_c.write(' #define VcFiDummy_ID 1\n') + self.fh_c.write('#endif /* VcFiDummy_ID */\n') + self.fh_c.write('#ifndef Vc06Dummy_ID\n') + self.fh_c.write(' #define Vc06Dummy_ID 1\n') + self.fh_c.write('#endif /* Vc06Dummy_ID */\n') + self.fh_c.write('#ifndef Vc09Dummy_ID\n') + self.fh_c.write(' #define Vc09Dummy_ID 1\n') + self.fh_c.write('#endif /* Vc09Dummy_ID */\n') + self.fh_c.write('#ifndef VcRvDummy_ID\n') + self.fh_c.write(' #define VcRvDummy_ID 1\n') + self.fh_c.write('#endif /* VcRvDummy_ID */\n\n') + + def_name = file_name.replace('.', '_').upper() + self.fh_h.write('/* Autogenerated core id dummy file */\n\n') + self.fh_h.write(f'#ifndef {def_name}\n') + self.fh_h.write(f'#define {def_name}\n') + self.fh_h.write('#include "vcc_rb_core.h"\n') + self.fh_h.write(self._unit_cfg.base_types_headers) + + def _gen_rb_event_dummies(self): + """Generate RB dummy event declarations.""" + for id_, comment in self._core_cfg.get('EventIDs', {}).items(): + self.fh_h.write(f'#ifndef {id_}\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(f' extern const DSM_DFCType DFC_{id_} ;\n') + self.fh_h.write(f' #define {id_} (((DFC_{id_}.debmode) << 12u) | ' + f'(DFC_{id_}.id))\n') + self.fh_h.write(f' #define {id_}_Dummy\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifdef {id_}_Dummy\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(f' const DSM_DFCType DFC_{id_} = ' + '{VcEvDummy_ID, VcEvDummy_DEBMODE};\n') + self.fh_c.write(f' #warning "CoreID: {id_} is not defined in ' + 'the supplier SW"\n') + self.fh_c.write('#endif\n\n') + + def _gen_rb_fid_dummies(self): + """Generate RB dummy function id declarations.""" + for id_, comment in self._core_cfg.get('FunctionIDs', {}).items(): + self.fh_h.write(f'#ifndef {id_}\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(f' extern const DSM_FIdType FId_{id_} ;\n') + self.fh_h.write(f' #define {id_} (FId_{id_}.id)\n') + self.fh_h.write(f' #define {id_}_Dummy\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifdef {id_}_Dummy\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(f' const DSM_FIdType FId_{id_} = {{VcFiDummy_ID}};\n') + self.fh_c.write(f' #warning "CoreID: {id_} is not defined in the supplier SW"\n') + self.fh_c.write('#endif\n\n') + + def _gen_rb_iumpr_dummies(self): + """Generate RB dummy IUMPR declarations.""" + for id_, comment in self._core_cfg.get('IUMPR', {}).items(): + self.fh_h.write(f'#ifndef {id_}\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(f' extern const DSM_FIdType FId_{id_} ;\n') + self.fh_h.write(f' #define {id_} (FId_{id_}.id)\n') + self.fh_h.write(f' #define {id_}_Dummy\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifdef {id_}_Dummy\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(f' const DSM_FIdType FId_{id_} = {{Vc09Dummy_ID}};\n') + self.fh_c.write(f' #warning "CoreID: {id_} is not defined in the supplier SW"\n') + self.fh_c.write('#endif\n\n') + + def _gen_rb_mode06_dummies(self): + """Generate RB dummy mode$06 declarations.""" + for id_, comment in self._core_cfg.get('Mode$06', {}).items(): + self.fh_h.write(f'#ifndef {id_}\n') + self.fh_h.write(f' /* {comment[0]}, UAS {comment[1]} */\n') + self.fh_h.write(f' extern const DSM_DTRType DTR_{id_};\n') + self.fh_h.write(f' #define {id_} (DTR_{id_}.id)\n') + self.fh_h.write(f' #define {id_}_Dummy\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifdef {id_}_Dummy\n') + self.fh_c.write(f' /* {comment[0]}, UAS {comment[1]} */\n') + self.fh_c.write(f' const DSM_DTRType DTR_{id_} = {{Vc06Dummy_ID}};\n') + self.fh_c.write(f'#warning "CoreID: {id_} is not defined in the supplier SW"\n') + self.fh_c.write('#endif\n\n') + + def _gen_rb_rnk_dummies(self): + """Generate RB dummy ranking declarations.""" + for id_, comment in self._core_cfg.get('Ranking', {}).items(): + self.fh_h.write(f'#ifndef {id_}\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(f' extern const {self._uint16_type} DSMAppl_RnkValStorg_RnkId_{id_};\n') + self.fh_h.write(f' #define {id_} DSMAppl_RnkValStorg_RnkId_{id_}\n') + self.fh_h.write(f' #define {id_}_Dummy\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifdef {id_}_Dummy\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(f' const {self._uint16_type} DSMAppl_RnkValStorg_RnkId_{id_} = ' + 'VcRvDummy_ID;\n') + self.fh_c.write(f' #warning "CoreID: {id_} is not defined in the supplier SW"\n') + self.fh_c.write('#endif\n\n') + + def _gen_rb_end(self, file_name): + """Generate RB footer of c and h files for dummy core definition files.""" + def_name = file_name.replace('.', '_').upper() + + self.fh_h.write(f'#endif /* {def_name} */\n') + self.fh_h.write('/*-------------------------------------' + '---------------------------------------*\\\n') + self.fh_h.write(' END OF FILE\n') + self.fh_h.write('\\*-------------------------------------' + '---------------------------------------*/\n') + + self.fh_c.write(f'#include "{build_defs.CVC_CODE_END}"\n') + self.fh_c.write('/*--------------------------------------' + '--------------------------------------*\\\n') + self.fh_c.write(' END OF FILE\n') + self.fh_c.write('\\*--------------------------------------' + '--------------------------------------*/\n') + + def generate_rb_core_dummy_files(self, file_name): + """Generate core API dummy files for Bosch projects.""" + cname = file_name + '.c' + hname = file_name + '.h' + with open(cname, 'w', encoding="utf-8") as self.fh_c: + with open(hname, 'w', encoding="utf-8") as self.fh_h: + _, f_name = os.path.split(hname) + self._gen_rb_header(f_name) + self._gen_rb_event_dummies() + self._gen_rb_fid_dummies() + self._gen_rb_iumpr_dummies() + self._gen_rb_mode06_dummies() + self._gen_rb_rnk_dummies() + self._gen_rb_end(f_name) + + def _gen_dg2_header(self, file_name): + """Generate Denso Gen2/3 header of c and h files for dummy core definition files.""" + self.fh_c.write('/* Autogenerated core id dummy file */\n\n') + self.fh_c.write(f'#include "{file_name}"\n') + self.fh_c.write(self._unit_cfg.base_types_headers) + self.fh_c.write(f'#include "{build_defs.CVC_CODE_START}"\n\n') + self.fh_c.write('#define Vc06Undef 1\n') + self.fh_c.write('#define Vc09Undef 1\n') + self.fh_c.write('#define VcRvUndef 1\n\n') + self.fh_h.write('/* Autogenerated core id dummy file */\n\n') + def_name = file_name.replace('.', '_').upper() + self.fh_h.write(f'#ifndef {def_name}\n') + self.fh_h.write(f'#define {def_name}\n') + self.fh_h.write('\n#include "VcCoreSupplierAbstraction.h"\n\n') + self.fh_h.write('/* Check if denso make env. has defined the AUTOSAR declarations\n') + self.fh_h.write(' if not, do dummy declaration to be able to build a dummy I/F in\n') + self.fh_h.write(' an old make environment */\n') + self.fh_h.write('#ifndef FUNC\n') + self.fh_h.write(' #define FUNC(rettype, memclass) rettype /* from Compiler.h */\n') + self.fh_h.write(' #define P2VAR(ptrtype, memclass, ptrclass) ptrtype * ' + '/* from Compiler.h */\n') + self.fh_h.write(' typedef unsigned char Std_ReturnType; /* from Std_Types.h */\n') + self.fh_h.write(' typedef unsigned char Dem_EventStatusType;\n') + self.fh_h.write(' typedef unsigned char boolean;\n') + self.fh_h.write(' #define AUTOMATIC\n') + self.fh_h.write(' #define RTE_APPL_DATA\n') + self.fh_h.write(' #define RTE_CODE /* from Compiler_cfg.h */\n') + self.fh_h.write(f'#endif /* {def_name} */\n\n') + self.fh_h.write(f'#include "{build_defs.CVC_CODE_START}"\n') + + def _gen_dg2_event_dummies(self): + """Generate the Denso Gen2+ dummy event declarations.""" + for id_, comment in self._core_cfg.get('EventIDs', {}).items(): + # Compare with core0/app/OBDFW/bdcore/Rte_Diag.h + self.fh_h.write(f'#ifndef Rte_Call_Event_{id_}_SetEventStatus\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(' extern FUNC(Std_ReturnType, RTE_CODE) ' + f'Rte_Call_Diag_Event_{id_}_SetEventStatus ' + '(Dem_EventStatusType EventStatus);\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifndef Rte_Call_Event_{id_}_SetEventStatus\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(' FUNC(Std_ReturnType, RTE_CODE) ' + f'Rte_Call_Diag_Event_{id_}_SetEventStatus ' + '(Dem_EventStatusType EventStatus) { return 0;}\n') + self.fh_c.write('#endif\n\n') + # Generate Dem_SetEventDisabled dummmies + self.fh_h.write(f'#ifndef Rte_Call_Event_{id_}_SetEventDisabled\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(' extern FUNC(Std_ReturnType, RTE_CODE) ' + f'Rte_Call_Diag_Event_{id_}_SetEventDisabled (void);\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifndef Rte_Call_Event_{id_}_SetEventDisabled\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(' FUNC(Std_ReturnType, RTE_CODE) ' + f'Rte_Call_Diag_Event_{id_}_SetEventDisabled ' + '(void) { return 0;}\n') + self.fh_c.write('#endif\n\n') + + def _gen_dg2_fid_dummies(self): + """Generate the Denso Gen2+ dummy function id declarations.""" + for id_, comment in self._core_cfg.get('FunctionIDs', {}).items(): + self.fh_h.write(f'#ifndef Rte_Call_FI_{id_}_GetFunctionPermission\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(' extern FUNC(Std_ReturnType, RTE_CODE) ' + f'Rte_Call_Diag_FI_{id_}_GetFunctionPermission ' + '(P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Permission);\n') + self.fh_h.write('#endif\n\n') + + self.fh_c.write(f'#ifndef Rte_Call_FI_{id_}_GetFunctionPermission\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(' FUNC(Std_ReturnType, RTE_CODE) ' + f'Rte_Call_Diag_FI_{id_}_GetFunctionPermission ' + '(P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Permission) ' + '{ *Permission = 1; return 0;}\n') + self.fh_c.write('#endif\n\n') + + def _gen_dg2_iumpr_dummies(self): + """Generate the Denso Gen2+ dummy IUMPR declarations.""" + for id_, comment in self._core_cfg.get('IUMPR', {}).items(): + self.fh_h.write(f'#ifndef IUMID_{id_}\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(f' #define IUMID_{id_} cIUMID_{id_}\n') + self.fh_h.write(f' #define {id_}_DUMMY\n') + self.fh_h.write(f' extern const {self._uint16_type} cIUMID_{id_};\n') + self.fh_h.write('#endif\n\n') + self.fh_c.write(f'#ifdef {id_}_DUMMY\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(f' const {self._uint16_type} cIUMID_{id_} = Vc09Undef;\n') + self.fh_c.write('#endif\n\n') + + def _gen_dg2_mode06_dummies(self): + """Generate the Denso Gen2+ dummy mode$06 declarations.""" + for id_, comment in self._core_cfg.get('Mode$06', {}).items(): + self.fh_h.write(f'#ifndef TR_{id_}\n') + self.fh_h.write(f' /* {comment[0]}, UAS {comment[1]} */\n') + self.fh_h.write(f' #define TR_{id_} cTR_{id_}\n') + self.fh_h.write(f' #define {id_}_DUMMY\n') + self.fh_h.write(f' extern const {self._uint16_type} cTR_{id_};\n') + self.fh_h.write('#endif\n\n') + self.fh_c.write(f'#ifdef {id_}_DUMMY\n') + self.fh_c.write(f' /* {comment[0]}, UAS {comment[1]} */\n') + self.fh_c.write(f' const {self._uint16_type} cTR_{id_} = Vc06Undef;\n') + self.fh_c.write('#endif\n\n') + + def _gen_dg2_rnk_dummies(self): + """Generate the Denso Gen2+ dummy ranking declarations.""" + for id_, comment in self._core_cfg.get('Ranking', {}).items(): + self.fh_h.write(f'#ifndef RVID_{id_}\n') + self.fh_h.write(f' /* {comment} */\n') + self.fh_h.write(f' #define RVID_{id_} cRVID_{id_}\n') + self.fh_h.write(f' #define {id_}_DUMMY\n') + self.fh_h.write(f' extern const {self._uint16_type} cRVID_{id_};\n') + self.fh_h.write('#endif\n\n') + self.fh_c.write(f'#ifdef {id_}_DUMMY\n') + self.fh_c.write(f' /* {comment} */\n') + self.fh_c.write(f' const {self._uint16_type} cRVID_{id_} = VcRvUndef;\n') + self.fh_c.write('#endif\n\n') + + def _gen_dg2_end(self, file_name): + """Generate Denso Gen2+ footer of c and h files for dummy core definition files.""" + def_name = file_name.replace('.', '_').upper() + self.fh_h.write(f'#include "{build_defs.CVC_CODE_END}"\n') + self.fh_h.write(f'#endif /* {def_name} */\n') + self.fh_h.write('/*------------------------------------------' + '----------------------------------*\\\n') + self.fh_h.write(' END OF FILE\n') + self.fh_h.write('\\*-----------------------------------------' + '-----------------------------------*/\n') + self.fh_c.write(f'#include "{build_defs.CVC_CODE_END}"\n') + self.fh_c.write('/*------------------------------------------' + '----------------------------------*\\\n') + self.fh_c.write(' END OF FILE\n') + self.fh_c.write('\\*-----------------------------------------' + '-----------------------------------*/\n') + + def generate_dg2_core_dummy_files(self, file_name): + """Generate the core API dummy files for Denso gen2+ projects.""" + cname = file_name + '.c' + hname = file_name + '.h' + with open(cname, 'w', encoding="utf-8") as self.fh_c: + with open(hname, 'w', encoding="utf-8") as self.fh_h: + _, f_name = os.path.split(hname) + self._gen_dg2_header(f_name) + self._gen_dg2_event_dummies() + self._gen_dg2_fid_dummies() + self._gen_dg2_iumpr_dummies() + self._gen_dg2_mode06_dummies() + self._gen_dg2_rnk_dummies() + self._gen_dg2_end(f_name) + + def generate_csp_core_dummy_files(self, file_name): + """Generate core API dummy files for Bosch projects.""" + cname = file_name + '.c' + hname = file_name + '.h' + with open(cname, 'w', encoding="utf-8") as self.fh_c: + with open(hname, 'w', encoding="utf-8") as self.fh_h: + _, f_name = os.path.split(hname) + self._gen_dg2_header(f_name) + self._gen_dg2_event_dummies() + self._gen_dg2_fid_dummies() + self._gen_dg2_iumpr_dummies() + self._gen_dg2_mode06_dummies() + self._gen_dg2_rnk_dummies() + self._gen_dg2_end(f_name) diff --git a/pybuild/create_conversion_table.py b/pybuild/create_conversion_table.py new file mode 100644 index 0000000..5d87c7c --- /dev/null +++ b/pybuild/create_conversion_table.py @@ -0,0 +1,61 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module to create an a2l file from a conversion table file.""" + +import argparse +import json +from pathlib import Path + + +def get_vtab_text(vtab): + """Convert vtab dict to a2l text.""" + + vtab_text = ( + ' /begin COMPU_VTAB\n' + f' CONV_TAB_{vtab["name"]} /* Name */\n' + ' "Conversion table" /* LongIdentifier */\n' + ' TAB_VERB /* ConversionType */\n' + f' {len(vtab["disp_values"])} /* NumberValuePairs */\n' + ) + + vtab_text += ''.join( + f' {vtab["start_value"]+i} /* InVal */\n' + f' "{value}" /* OutVal */\n' + for i, value in enumerate(vtab['disp_values']) + ) + + vtab_text += ' /end COMPU_VTAB\n\n' + + return vtab_text + + +def create_conversion_table(input_json: Path, output_a2l: Path): + """Create a2l conversion table for custom units.""" + with open(input_json.resolve(), encoding="utf-8") as f_h: + conversion_table = json.load(f_h) + + with open(output_a2l.resolve(), 'w', encoding="utf-8") as f_h: + for vtab in conversion_table: + f_h.write(get_vtab_text(vtab)) + + +def parse_args(): + """Parse args.""" + parser = argparse.ArgumentParser('Create a2l file from conversion_table.json file') + parser.add_argument('input_file', type=Path) + parser.add_argument('output_file', type=Path) + args = parser.parse_args() + return args + + +def main(): + """Main.""" + args = parse_args() + conversion_table_json = args.input_file + conversion_table_a2l = args.output_file + create_conversion_table(conversion_table_json, conversion_table_a2l) + + +if __name__ == '__main__': + main() diff --git a/pybuild/dids.py b/pybuild/dids.py new file mode 100644 index 0000000..962f0a7 --- /dev/null +++ b/pybuild/dids.py @@ -0,0 +1,604 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module containing classes for DID definitions. + +This module is used to parse DID definition files and merge with the unit definitions to find DIDs in a project. +It then generates the DID definition c-files for the supplier DID API. +""" + +import csv +import os +from pathlib import Path +from ruamel.yaml import YAML +from pybuild import build_defs +from pybuild.lib.helper_functions import deep_dict_update +from pybuild.problem_logger import ProblemLogger +from pybuild.types import get_ec_type, get_float32_types +from pybuild.unit_configs import CodeGenerators + + +def get_dids_in_prj(unit_cfgs): + """Return a dict with DIDs in the currently included SW-Units. + + Args: + unit_cfgs (UnitConfigs): Unit definitions. + Returns: + error_message (str): Message in case something went wrong. + dict: a dict with all dids in the project, in the below format: + + :: + + {'DID_VARIABLE_NAME': { + 'handle': 'VcRegCh/VcRegCh/Subsystem/VcRegCh/1000_VcRegCh/1600_DID/Gain14', + 'configs': ['all'], + 'type': 'UInt32', + 'unit': '-', + 'lsb': 1, + 'max': 20, + 'min': 0, + 'offset': 0, + 'description': 'Actual Regen State', + 'name': 'DID_VARIABLE_NAME', + 'class': 'CVC_DISP' + } + } + """ + dids_prj = {} + error_messages = [] + unit_cfg = unit_cfgs.get_per_unit_cfg() + for unit, data in unit_cfg.items(): + dids = data.get('dids') + if dids is None: + error_messages.append(f'No "dids" key in unit config for {unit}.') + continue + for name, did in dids.items(): + dids_prj[name] = did + return error_messages, dids_prj + + +class DIDs(ProblemLogger): + """A class for handling of DID definitions.""" + + def __init__(self, build_cfg, unit_cfgs): + """Parse DID definition files referenced by project config. + + Args: + build_cfg (BuildProjConfig): Project configuration + unit_cfgs (UnitConfigs): Unit definitions + """ + super().__init__() + self._build_cfg = build_cfg + self._unit_cfgs = unit_cfgs + did_filename = self._build_cfg.get_did_cfg_file_name() + cfg_dir = self._build_cfg.get_prj_cfg_dir() + did_f32_cfg_file = os.path.join(cfg_dir, did_filename + '_Float32.csv') + did_u32_cfg_file = os.path.join(cfg_dir, did_filename + '_UInt32.csv') + self._dids_f32 = self._load_did_config_files(did_f32_cfg_file) + self._dids_u32 = self._load_did_config_files(did_u32_cfg_file) + self.fh_h = None + self.fh_c = None + get_did_error_messages, self._did_dict = get_dids_in_prj(unit_cfgs) + self._did_defs = self.get_did_config() + self._float32_types = get_float32_types() + if get_did_error_messages: + self.critical('\n'.join(get_did_error_messages)) + + def _load_did_config_files(self, config_file): + """Load the did config files.""" + dids = {} + with open(config_file, mode='r', encoding='utf-8') as did_fh: + csv_did = csv.reader(did_fh, delimiter=';') + did = list(csv_did) + dids['dids'] = {row[0]: int(row[1], 16) for row in did[3:]} + dids['start_did'] = int(did[1][0], 16) + dids['end_did'] = int(did[1][1], 16) + self._check_dids(dids) + return dids + + @staticmethod + def _check_dids(dids): + """Check that all dids are within the start and end values.""" + start_did = dids['start_did'] + end_did = dids['end_did'] + + for var, did in dids['dids'].items(): + if did < start_did: + raise ValueError(f'{var} has a too low did 0x{did:X} start did is 0x{start_did:X}') + if did > end_did: + raise ValueError(f'{var} has a too high did 0x{did:X} start did is 0x{start_did:X}') + + def gen_did_def_files(self, filename): + """Generate the VcDidDefinitions.c & h files used by the Did-API.""" + with open(filename + '.h', 'w', encoding="utf-8") as self.fh_h: + with open(filename + '.c', 'w', encoding="utf-8") as self.fh_c: + dids_f32, dids_u32, errors = self._check_and_reformat_dids() + self._gen_did_def_c_file(dids_f32, dids_u32, errors) + self._gen_did_def_h_file(dids_f32, dids_u32) + return errors + + def _check_and_reformat_dids(self): + """Check that DIDs are defined and create two new dicts.""" + dids_f32 = {} + dids_u32 = {} + did_def_f32s = self._did_defs['Float32']['dids'] + did_def_u32s = self._did_defs['UInt32']['dids'] + errors = [] + for sig in sorted(self._did_dict.keys()): + did = self._did_dict[sig] + if did['type'] in self._float32_types: + if sig in did_def_f32s: + dids_f32[did_def_f32s[sig]] = did + else: + msg = f'Did for Float32 signal "{sig}" not defined' + self.critical(msg) + errors.append(msg) + else: + if sig in did_def_u32s: + dids_u32[did_def_u32s[sig]] = did + else: + msg = f'Did for UInt32 signal "{sig}" not defined' + self.critical(msg) + errors.append(msg) + return (dids_f32, dids_u32, errors) + + def _get_datatypes(self): + tl_types = ['UInt8', 'Int8', 'UInt16', 'Int16', 'UInt32', 'Int32', 'Float32', 'Bool'] + data_types_tl = [f'{tl_type}_' for tl_type in tl_types] + data_types_ec = [f'{get_ec_type(tl_type)}_' for tl_type in tl_types] + if len(self._unit_cfgs.code_generators) > 1: + self.warning('Cannot generate DIDs for more than one generator.' + 'Defaulting to TargetLink') + return ', '.join(data_types_tl) + if CodeGenerators.target_link in self._unit_cfgs.code_generators: + return ', '.join(data_types_tl) + return ', '.join(data_types_ec) + + def _get_type(self, tl_type): + if CodeGenerators.target_link in self._unit_cfgs.code_generators: + return tl_type + return get_ec_type(tl_type) + + def _gen_did_def_h_file(self, dids_f32, dids_u32): + """Generate the VcDidDefinitions.h files used by the Did-API.""" + _, f_name = os.path.split(self.fh_h.name) + header_def_name = f_name.upper().replace('.', '_') + self.fh_h.write(f'#ifndef {header_def_name}\n') + self.fh_h.write(f'#define {header_def_name}\n\n') + self.fh_h.write(self._unit_cfgs.base_types_headers) + self.fh_h.write(f'enum Datatypes {{{self._get_datatypes()}}};\n\n') + self.fh_h.write(f'#define DID_DATASTRUCT_LEN_FLOAT32 {len(dids_f32)}\n') + self.fh_h.write(f'#define DID_DATASTRUCT_LEN_UINT32 {len(dids_u32)}\n\n') + uint16_type = self._get_type('UInt16') + float32_type = self._get_type('Float32') + self.fh_h.write('struct DID_Mapping_UInt32 {\n\t' + f'{uint16_type} DID;' + '\n\tvoid* data;\n\tenum Datatypes type;\n};\n\n') + self.fh_h.write('struct DID_Mapping_Float32 {\n\t' + f'{uint16_type} DID;' + '\n\t' + f'{float32_type}* data;' + '\n};\n\n') + + self.fh_h.write(f'#include "{build_defs.PREDECL_START}"\n') + + self.fh_h.write('extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n') + self.fh_h.write('extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n') + + self.fh_h.write('/* Floats */\n') + + for key in sorted(dids_f32.keys()): + did = dids_f32[key] + self.fh_h.write(f'extern {did["type"]} {did["name"]}; /* Did id: 0x{key:X} */\n') + + self.fh_h.write('/* Integers & Bools */\n') + + for key in sorted(dids_u32.keys()): + did = dids_u32[key] + self.fh_h.write(f'extern {did["type"]} {did["name"]}; /* Did id: 0x{key:X} */\n') + + self.fh_h.write(f'#include "{build_defs.PREDECL_END}"\n') + self.fh_h.write(f'\n#endif /* {header_def_name} */\n') + + def _gen_did_def_c_file(self, dids_f32, dids_u32, errors): + """Generate the VcDidDefinitions.c files used by the Did-API.""" + _, filename = os.path.split(self.fh_h.name) + self.fh_c.write(f'#include "{filename}"\n\n') + self.fh_c.write(f'#include "{build_defs.CVC_CODE_START}"\n\n') + self.fh_c.write('/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n') + self.fh_c.write('const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n') + + keys = sorted(dids_f32.keys()) + for key in keys: + did = dids_f32[key] + if key == keys[-1]: + delim = ' ' + else: + delim = ',' + self.fh_c.write('\t{0x%X, &%s}%c /* %s */ \n' % + (key, did['name'], delim, did['handle'])) + if not keys: + self.fh_c.write('\t{0x0000, 0L} /* Dummy entry */ \n') + self.fh_c.write('};\n\n') + + self.fh_c.write('const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n') + keys = sorted(dids_u32.keys()) + for key in keys: + did = dids_u32[key] + if key == keys[-1]: + delim = ' ' + else: + delim = ',' + self.fh_c.write('\t{0x%X, &%s, %s_}%c /* %s */ \n' % + (key, did['name'], did['type'], delim, did['handle'])) + + if not keys: + self.fh_c.write(f'\t{{0x0000, 0L, {self._get_type("UInt32")}_}} /* Dummy entry */ \n') + self.fh_c.write('};\n\n') + + if errors: + self.fh_c.write('/* *** DIDs not in the definition file! ****\n') + for error in errors: + self.fh_c.write(f'{error}\n') + self.fh_c.write('*/\n') + + self.fh_c.write(f'\n#include "{build_defs.CVC_CODE_END}"\n') + self.fh_c.write('\n/*------------------------------------------------------' + '----------------------*\\\n END OF FILE\n\\*-------------' + '---------------------------------------------------------------*/') + + def gen_did_carcom_extract(self, filename): + """Generate the csv-file used for carcom database import.""" + with open(filename, 'w', encoding="utf-8") as carcom_file: + for sig in sorted(self._did_dict.keys()): + did = self._did_dict[sig] + carcom_file.write(self._format_did_csv_line(did)) + + @staticmethod + def _convert_value(value, type, default_value=0): + if value in ['', '-']: + return type(default_value) + return type(value) + + @staticmethod + def _hex_location(value): + return hex(value).upper().lstrip('0X') + + def _format_did_csv_line(self, did): + """Format the line based on the did. + + Arguments: + did (dict): DID data + """ + did_line = '{' + '};{'.join(['location', + 'description', + 'name', + 'name', + 'bytes', + 'offset', + 'bits', + 'data_type', + 'nine', + 'ten', + 'low', + 'high', + 'scaling', + 'compare', + 'unit', + 'sixteen', + 'service', + 'eighteen', + 'sessions']) + '}\n' + float_format = '06' + compare = '' + did_bytes = 4 + did_offset = 0 # Always use 0. Not sure why. + did_bits = 8 * did_bytes + service = 17 + sessions = '22: 01 02 03' + unknown = '' # Fields were empty in old system + did_def_f32s = self._did_defs['Float32']['dids'] + did_def_u32s = self._did_defs['UInt32']['dids'] + if did['name'] in did_def_f32s: + location = self._hex_location(did_def_f32s[did['name']]) + elif did['name'] in did_def_u32s: + location = self._hex_location(did_def_u32s[did['name']]) + else: + self.warning('Could not find location for %s', did['name']) + location = unknown + if did['type'] in self._float32_types: + did_type = '4-byte float' + scaling = 'x*1' + else: + did_type = 'Unsigned' + u32_scaling_base = '(x-2147483647){{operator}}{{lsb:{float_format}}} {{sign}} {{offset:{float_format}}}' + u32_scaling = u32_scaling_base.format(float_format=float_format) + offset = self._convert_value(did['offset'], float, 0) + if offset > 0: + sign = '+' + else: + sign = '-' + lsb = self._convert_value(did['lsb'], float, 1) + if lsb > 0: + operator = '*' + else: + operator = '/' + lsb = 1.0/lsb # Why we do this, I do not know. + scaling = u32_scaling.format(operator=operator, + lsb=lsb, + sign=sign, + offset=offset) + + return did_line.format(location=location, + name=did['name'], + description=did['description'], + bytes=did_bytes, + offset=did_offset, + bits=did_bits, + data_type=did_type, + nine=unknown, + ten=unknown, + low=did['min'], + high=did['max'], + scaling=scaling, + compare=compare, + unit=did['unit'], + sixteen=unknown, + service=service, + eighteen=unknown, + sessions=sessions) + + def get_did_config(self): + """Return a dict with the defined DIDs for all configs. + + Returns: + dict: a dict with the DIDs defined for all configs + + """ + # self._checkConfig() + return {'Float32': self._dids_f32, 'UInt32': self._dids_u32} + + +class HIDIDs(ProblemLogger): + """A class for handling of HI DID definitions.""" + + FILE_NAME = 'VcDIDAPI' + + def __init__(self, build_cfg, unit_cfgs): + """Init. + + Args: + build_cfg (BuildProjConfig): Project configuration + unit_cfgs (UnitConfigs): Unit definitions + """ + super().__init__() + self._build_cfg = build_cfg + self._unit_cfgs = unit_cfgs + self.did_dict = self._compose_did_data() + + def _load_did_config_files(self, config_file): + """Load the did config files. + + Args: + config_file (str): Path to DID configuration file. + Returns: + dids (dict): Parsed DIDs from the configuration file. + """ + dids = {} + config_file_path = Path(config_file) + if config_file_path.exists(): + with config_file_path.open(mode='r', encoding='utf-8') as did_fh: + yaml = YAML(typ='safe', pure=True) + dids = self._verify_did_config_dict(yaml.load(did_fh)) + else: + self.warning(f'Unable to parse DIDs. Cannot find file: {config_file_path.as_posix()}.') + return dids + + def _verify_did_config_dict(self, dids): + """Verify the structure of the dict from the DID configuration file. + Missing keys will be added but also produce critical errors. + + Args: + dids (dict): DIDs parsed from DID configuration file. + Returns: + (dict): Updated DID dict. + """ + optional_keys = { + 'nr_of_bytes', + } + expected_keys = { + 'id', + 'data_type', + 'function_type', + } + expected_function_type_keys = { + 'read_data', + 'read_data_max', + 'read_data_min', + 'condition_check', + 'condition_check_max', + 'condition_check_min', + } + for did, did_data in dids.items(): + did_keys = set(did_data.keys()) + used_optional_keys = did_keys & optional_keys + unknown_keys = did_keys - (expected_keys | optional_keys) + missing_keys = expected_keys - did_keys + for key in used_optional_keys: + self.info(f'Using optional key {key} for DID {did}.') + for key in unknown_keys: + self.warning(f'Ignoring unknown element {key} for DID {did}.') + del did_data[key] + for key in missing_keys: + self.critical(f'DID {did} is missing element {key}.') + did_data[key] = '' + if did_data['function_type'] not in expected_function_type_keys: + self.critical(f"DID {did} lists unknown function type {did_data['function_type']}") + did_data['function_type'] = '' + return dids + + def _compose_did_data(self): + """Gather and merge DID data from project simulink models and DID configuration file. + + Returns: + did_dict (dict): Dict containing project DID data. + """ + get_did_error_messages, project_dids = get_dids_in_prj(self._unit_cfgs) + if get_did_error_messages: + self.critical('\n'.join(get_did_error_messages)) + return {} + + did_filename = self._build_cfg.get_did_cfg_file_name() + config_directory = self._build_cfg.get_prj_cfg_dir() + did_config_file = os.path.join(config_directory, did_filename) + dids = self._load_did_config_files(did_config_file) + + did_dict = self.verify_dids(project_dids, dids) + for data in did_dict.values(): + data['function'] = self.compose_did_function(data) + + return did_dict + + @staticmethod + def compose_did_function(did_data): + """Compose DID function calls. + Args: + did_data (dict): Dict describing a DID in the project. + Returns: + function (str): Function to generate for given DID. + """ + did_id = did_data["id"] + data_type = did_data["data_type"] + type_to_function_map = { + '': f'DID_{did_id}_Missing({data_type} *Data)', + 'read_data': f'DID_{did_id}_Runnable_ReadData({data_type} *Data)', + 'read_data_max': f'DID_{did_id}_Runnable_MAX_ReadData({data_type} *Data)', + 'read_data_min': f'DID_{did_id}_Runnable_MIN_ReadData({data_type} *Data)', + 'condition_check': f'DID_{did_id}_Runnable_ConditionCheckRead({data_type} *ErrorCode)', + 'condition_check_max': f'DID_{did_id}_Runnable_MAX_ConditionCheckRead({data_type} *ErrorCode)', + 'condition_check_min': f'DID_{did_id}_Runnable_MIN_ConditionCheckRead({data_type} *ErrorCode)' + } + return type_to_function_map[did_data['function_type']] + + def verify_dids(self, project_dids, dids): + """Verify the DIDs. + + * Model DIDs must be defined in DID configuration file. + * ID numbers can only appear once per function type. + + Args: + project_dids (dict): DIDs listed in project/simulink models. + dids (dict): DIDs listed in the DID configuration file. + Returns: + valid_dids (dict): Validated DIDs listed in both DID configuration file as well as project. + """ + valid_dids = {} + did_id_usage = {} + + if not project_dids: + for did in dids: + self.warning(f'Ignoring DID {did}, not defined in any model.') + return valid_dids + + for name in project_dids: + if name not in dids: + self.warning(f'DID {name} not defined in DID defintion file.') + continue + + did_id = dids[name]['id'] + function_type = dids[name]['function_type'] + if did_id in did_id_usage: + if function_type in did_id_usage[did_id]: + self.critical( + f'ID {did_id} is ' + f'already used for DID {did_id_usage[did_id][function_type]} of ' + f'function type {function_type}.' + ) + continue + did_id_usage[did_id][function_type] = name + else: + did_id_usage[did_id] = {function_type: name} + + valid_dids[name] = deep_dict_update(dids[name], project_dids[name]) + + return valid_dids + + def get_header_file_content(self): + """Get content for the DID API header file. + + Returns: + (list(str)): List of lines to write to DID API header file. + """ + name = self._build_cfg.get_a2l_cfg()['name'] + header_guard = f'{self.FILE_NAME.upper()}_H' + header = [ + f'#ifndef {header_guard}\n', + f'#define {header_guard}\n', + '\n', + '#include "tl_basetypes.h"\n', + f'#include "Rte_{name}.h"\n', + '\n' + ] + footer = [f'\n#endif /* {header_guard} */\n'] + + if not self.did_dict: + return header + footer + + body = [f'#include "{build_defs.PREDECL_DISP_ASIL_D_START}"\n'] + for did_data in self.did_dict.values(): + define = did_data["class"].split('/')[-1] # E.q. for ASIL D it is ASIL_D/CVC_DISP_ASIL_D + body.append(f'extern {define} {did_data["type"]} {did_data["name"]};\n') + body.append(f'#include "{build_defs.PREDECL_DISP_ASIL_D_END}"\n') + + body.append(f'\n#include "{build_defs.PREDECL_CODE_ASIL_D_START}"\n') + for did_data in self.did_dict.values(): + body.append(f'void {did_data["function"]};\n') + body.append(f'#include "{build_defs.PREDECL_CODE_ASIL_D_END}"\n') + + return header + body + footer + + def get_source_file_content(self): + """Get content for the DID API source file. + + Returns: + (list(str)): List of lines to write to DID API source file. + """ + header = [ + f'#include "{self.FILE_NAME}.h"\n', + '\n' + ] + + if not self.did_dict: + return header + + body = [f'#include "{build_defs.CVC_CODE_ASIL_D_START}"\n'] + for did, did_data in self.did_dict.items(): + size = f'{did_data["nr_of_bytes"]}' if 'nr_of_bytes' in did_data else f'sizeof({did_data["data_type"]})' + if 'ConditionCheckRead' in did_data["function"]: + argument = 'ErrorCode' + else: + argument = 'Data' + body.extend([ + f'void {did_data["function"]}\n', + '{\n', + f' memcpy({argument}, &{did}, {size});\n', + '}\n' + ]) + body.append(f'#include "{build_defs.CVC_CODE_ASIL_D_END}"\n') + + return header + body + + def generate_did_files(self): + """Generate required DID API files. + Only use for some projects, which doesn't copy static code.""" + file_contents = { + '.h': self.get_header_file_content(), + '.c': self.get_source_file_content() + } + src_dst_dir = self._build_cfg.get_src_code_dst_dir() + for extension, content in file_contents.items(): + file_path = Path(src_dst_dir, self.FILE_NAME + extension) + with file_path.open(mode='w', encoding='utf-8') as file_handler: + file_handler.writelines(content) diff --git a/pybuild/dummy.py b/pybuild/dummy.py new file mode 100644 index 0000000..0363658 --- /dev/null +++ b/pybuild/dummy.py @@ -0,0 +1,159 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for generation of c- and a2l-file with dummy signal declarations.""" + +import pybuild.build_defs as bd + +from pybuild.types import byte_size_string, get_bitmask +from pybuild.a2l import A2l +from pybuild.problem_logger import ProblemLogger + + +class DummyVar(ProblemLogger): + """Generate c- and a2l-files which declares all missing variables in the interfaces. + + TODO: Please remove this file! Only used while testing. + """ + + def __init__(self, unit_cfg, ext_dict, res_dict, prj_cfg, user_defined_types): + """Initialize instance of class.""" + super().__init__() + self._unit_cfg = unit_cfg + self._unit_vars = unit_cfg.get_per_cfg_unit_cfg() + self._ext_dict = ext_dict + self._res_dict = res_dict + self._ext_vars = {} + self._int_vars = {} + self._prj_cfg = prj_cfg + self._enumerations = user_defined_types.get_enumerations() + self._common_header_files = user_defined_types.common_header_files + + def _get_byte_size_string(self, data_type): + """Get byte size of a data type as string. + Enumeration byte sizes are derived from the underlying data type. + + Args: + data_type (str): Data type. + Returns: + byte_size_string(pybuild.types.byte_size_string): Return result of pybuild.types.byte_size_string. + """ + if data_type in self._enumerations: + return byte_size_string(self._enumerations[data_type]['underlying_data_type']) + return byte_size_string(data_type) + + def _restruct_input_data(self): + """Restructure all the input variables per data-type. + + This will be used for declaring the variables and generating the + A2L-file + """ + ext_out = {var: data for ioclass, vardict in self._ext_dict.items() + if ioclass.endswith('-Output') for var, data in vardict.items()} + ext_ = {} + for var in self._res_dict['sigs']['ext']['missing']: + self.debug('ext: %s', var) + if var in ext_out: + data = ext_out[var] + self.debug('ext_data: %s', data) + ext_[var] = data + int_ = {} + for unit in self._res_dict['sigs']['int']: + for var in self._res_dict['sigs']['int'][unit]['missing']: + if var not in ext_ and var in self._unit_vars['inports']: + data = self._unit_vars['inports'][var][unit] + int_[var] = data + for var, data in int_.items(): + data_type_size = self._get_byte_size_string(data['type']) + self._int_vars.setdefault(data_type_size, {})[var] = data + for var, data in ext_.items(): + data_type_size = self._get_byte_size_string(data['type']) + self._ext_vars.setdefault(data_type_size, {})[var] = data + + def _a2l_dict(self): + """Return a dict defining all parameters for a2l-generation.""" + res = { + 'vars': {}, + 'function': 'VcDummy' + } + for inp in [self._ext_vars]: + for sizes in inp.values(): + for var, data in sizes.items(): + if data['type'] in self._enumerations: + data_type = self._enumerations[data['type']]['underlying_data_type'] + else: + data_type = data['type'] + + resv = res['vars'] + resv.setdefault(var, {})['a2l_data'] = { + 'bitmask': get_bitmask(data_type), + 'description': data.get('description', ''), + 'lsb': '2^0', + 'max': data.get('max'), + 'min': data.get('min'), + 'offset': '0', + 'unit': data['unit'], + 'x_axis': None, + 'y_axis': None + } + resv[var]['array'] = [] + resv[var]['function'] = ['VcEc'] + resv[var]['var'] = { + 'cvc_type': 'CVC_DISP', + 'type': data_type, + 'var': var + } + return res + + @classmethod + def _generate_var_defs(cls, fh_c, vars, enums, comment): + """Generate the variable definitions.""" + fh_c.write(f'\n{comment}\n\n') + for varsize in sorted(vars.keys(), reverse=True): + fh_c.write(f'/* Variables of size {varsize} bytes */\n\n') + var_defs = vars[varsize] + for var in sorted(var_defs.keys()): + data = var_defs[var] + if data['type'] in enums: + if enums[data['type']]['default_value'] is not None: + init_value = enums[data['type']]['default_value'] + else: + cls.warning('Initializing enumeration %s to "zero".', data['type']) + init_value = [k for k, v in enums[data['type']]['members'].items() if v == 0][0] + fh_c.write(f"{data['type']} {var} = {init_value};\n") + else: + fh_c.write(f"{data['type']} {var} = {0};\n") + fh_c.write('\n') + + @classmethod + def _generate_var_initialization(cls, fh_c, vars, comment): + """Generate the variable initializations.""" + fh_c.write(f'\n{comment}\n\n') + fh_c.write('\nvoid RESTART_VcDummy(void)\n{\n') + for varsize in sorted(vars.keys(), reverse=True): + var_defs = vars[varsize] + for var in sorted(var_defs.keys()): + fh_c.write(f" {var} = {0};\n") + fh_c.write('}\n') + + def _generate_c_file(self, filename): + """Generate the c-file defining all missing input variables.""" + general_includes = '' + general_includes += self._unit_cfg.base_types_headers + for common_header_file in self._common_header_files: + general_includes += f'#include "{common_header_file}"\n' + general_includes += '\n' + + with open(filename, 'w', encoding="utf-8") as fh_c: + fh_c.write(general_includes) + fh_c.write(f'#include "{bd.CVC_DISP_START}"\n\n') + self._generate_var_defs(fh_c, self._ext_vars, self._enumerations, '/** Missing external signals **/') + fh_c.write(f'\n#include "{bd.CVC_DISP_END}"\n') + self.info('Generated %s', filename) + + def generate_file(self, filename): + """Generate the files for defining all missing input variables.""" + self._restruct_input_data() + self._generate_c_file(filename + '.c') + a2l_dict = self._a2l_dict() + A2l(a2l_dict, self._prj_cfg).gen_a2l(filename + '.a2l') diff --git a/pybuild/dummy_spm.py b/pybuild/dummy_spm.py new file mode 100644 index 0000000..f265fb3 --- /dev/null +++ b/pybuild/dummy_spm.py @@ -0,0 +1,252 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module containing classes for model out-port interfaces.""" +import os +from operator import itemgetter +import math + +import pybuild.build_defs as bd +from pybuild import signal +from pybuild.a2l import A2l +from pybuild.problem_logger import ProblemLogger +from pybuild.types import byte_size, get_bitmask + + +class DummySpm(ProblemLogger): + """Generate c-files which defines missing outport variables in the model out-port interface. + + The models declare all in-ports as 'external' and pybuild will then + generate any missing outports in the correct #if/#endif guards here. + One c-file per outport origin model should be generated. + + * Generate c-code from matlab/TL script with #if/#endif guards. + - Pro: Is generated at the same time as other code and placed in model src folder. + - Pro: Generic code. Will be cached together with TL-generated code. + - Con: m-script + * Generate c-code from python with only needed variables. No preprocessor directives. + - Pro: Python + - Pro: Simpler c-file with only used variables. + - Con: Not generic! Not cached? + + """ + + __asil_level_map = { + 'A': (bd.CVC_DISP_ASIL_A_START, bd.CVC_DISP_ASIL_A_END), + 'B': (bd.CVC_DISP_ASIL_B_START, bd.CVC_DISP_ASIL_B_END), + 'C': (bd.CVC_DISP_ASIL_C_START, bd.CVC_DISP_ASIL_C_END), + 'D': (bd.CVC_DISP_ASIL_D_START, bd.CVC_DISP_ASIL_D_END), + 'QM': (bd.CVC_DISP_START, bd.CVC_DISP_END)} + + def __init__(self, missing_outports, prj_cfg, feature_cfg, unit_cfg, user_defined_types, basename): + """Constructor. + + Args: + missing_outports (list): undefined outports based on unit config variables. + prj_cfg (BuildProjConfig): Build project class holding where files should be stored. + feature_cfg (FeatureConfig): Feature configs from SPM_Codeswitch_Setup. + unit_cfg (UnitConfigs): Class holding all unit interfaces. + user_defined_types (UserDefinedTypes): Class holding user defined data types. + basename (str): the basename of the outvar, used for .c and .a2l creation. + + See :doc:`Unit config ` for information on the 'outport' dict. + """ + super().__init__() + self._prj_cfg = prj_cfg + self._feature_cfg = feature_cfg + self._unit_cfg = unit_cfg + self._enumerations = user_defined_types.get_enumerations() + self._common_header_files = user_defined_types.common_header_files + self._name = basename + self.use_volatile_globals = prj_cfg.get_use_volatile_globals() + self._missing_outports = self._restruct_input_data(missing_outports) + + def _get_byte_size(self, data_type): + """Get byte size of a data type. + Enumeration byte sizes are derived from the underlying data type. + + Args: + data_type (str): Data type. + Returns: + byte_size(pybuild.types.byte_size): Return result of pybuild.types.byte_size. + """ + if data_type in self._enumerations: + return byte_size(self._enumerations[data_type]['underlying_data_type']) + return byte_size(data_type) + + def _restruct_input_data(self, outports): + """Restructure all the input variables per data-type.""" + outports.sort(key=itemgetter('name')) + outports.sort(key=lambda var: self._get_byte_size(var['type']), reverse=True) + new_outports = {} + for outport in outports: + integrity_level = outport.get('integrity_level', 'QM') + if integrity_level == 'QM': + outport['cvc_type'] = 'CVC_DISP' + else: + outport['cvc_type'] = f'ASIL_{integrity_level}/CVC_DISP_ASIL_{integrity_level}' + if integrity_level in new_outports: + new_outports[integrity_level].append(outport) + else: + new_outports.update({integrity_level: [outport]}) + return new_outports + + def _a2l_dict(self, outports): + """Return a dict defining all parameters for a2l-generation.""" + res = { + 'vars': {}, + 'function': 'VcDummy_spm' + } + + for outport in [port for sublist in outports.values() for port in sublist]: + var = outport['name'] + + if outport['type'] in self._enumerations: + data_type = self._enumerations[outport['type']]['underlying_data_type'] + else: + data_type = outport['type'] + + resv = res['vars'] + resv.setdefault(var, {})['a2l_data'] = { + 'bitmask': get_bitmask(data_type), + 'description': outport.get('description', ''), + 'lsb': '2^{}'.format(int(math.log2(outport.get('lsb', 1))) + if outport.get('lsb') not in ['-', ''] + else 0), + 'max': outport.get('max'), + 'min': outport.get('min'), + 'offset': -(outport.get('offset', 0) if outport.get('offset') not in ['-', ''] else 0), + 'unit': outport['unit'], + 'x_axis': None, + 'y_axis': None} + resv[var]['function'] = ['VcEc'] + resv[var]['var'] = {'cvc_type': outport['cvc_type'], + 'type': data_type, + 'var': var} + resv[var]['array'] = outport.get('width', 1) + res.update({'vars': resv}) + return res + + def generate_code_files(self, dst_dir): + """Generate code and header files. + + Args: + dst_dir (str): Path to destination directory. + + """ + h_file_path = os.path.join(dst_dir, f'{self._name}.h') + self._generate_h_file(h_file_path, self._missing_outports) + c_file_path = os.path.join(dst_dir, f'{self._name}.c') + self._generate_c_file(c_file_path, self._missing_outports) + + def generate_a2l_files(self, dst_dir): + """Generate A2L files. + + Args: + dst_dir (str): Path to destination directory. + + """ + filename = f"{os.path.join(dst_dir, self._name)}.a2l" + a2l_dict = self._a2l_dict(self._missing_outports) + a2l = A2l(a2l_dict, self._prj_cfg) + a2l.gen_a2l(filename) + + def _generate_h_file(self, file_path, outports): + """Generate header file. + + Args: + file_path (str): File path to generate. + """ + file_name = os.path.basename(file_path).split('.')[0] + with open(file_path, 'w', encoding="utf-8") as fh: + fh.write(f'#ifndef {file_name.upper()}_H\n') + fh.write(f'#define {file_name.upper()}_H\n') + + fh.write(self._unit_cfg.base_types_headers) + fh.write('#include "VcCodeSwDefines.h"\n') + for common_header_file in self._common_header_files: + fh.write(f'#include "{common_header_file}"\n') + + for integrity_level in outports.keys(): + disp_start = bd.PREDECL_ASIL_LEVEL_MAP[integrity_level]['DISP']['START'] + disp_end = bd.PREDECL_ASIL_LEVEL_MAP[integrity_level]['DISP']['END'] + fh.write('\n') + fh.write(f'#include "{disp_start}"\n') + for outport in outports[integrity_level]: + if outport['class'] not in signal.INPORT_CLASSES: + self.warning(f'inport {outport["name"]} class {outport["class"]} is not an inport class') + + array = '' + width = outport['width'] + if not isinstance(width, list): + width = [width] + if len(width) != 1 or width[0] != 1: + for w in width: + if w > 1: + if not isinstance(w, int): + self.critical(f'{outport["name"]} widths must be integers. Got "{type(w)}"') + array += f'[{w}]' + elif w < 0: + self.critical(f'{outport["name"]} widths can not be negative. Got "{w}"') + if self.use_volatile_globals: + fh.write(f"extern volatile {outport['type']} {outport['name']}{array};\n") + else: + fh.write(f"extern {outport['type']} {outport['name']}{array};\n") + fh.write(f'#include "{disp_end}"\n') + + fh.write(f'#endif /* {file_name.upper()}_H */\n') + + def _generate_c_file(self, file_path, outports): + """Generate C-file for inports that are missing outports except for supplier ports.""" + file_name = os.path.basename(file_path).split('.')[0] + base_header = f'#include "{file_name}.h"\n' + + with open(file_path, 'w', encoding="utf-8") as fh_c: + fh_c.write(base_header) + for integrity_level in outports.keys(): + disp_start = bd.CVC_ASIL_LEVEL_MAP[integrity_level]['DISP']['START'] + disp_end = bd.CVC_ASIL_LEVEL_MAP[integrity_level]['DISP']['END'] + fh_c.write('\n') + fh_c.write(f'#include "{disp_start}"\n') + for outport in outports[integrity_level]: + if outport['class'] not in signal.INPORT_CLASSES: + self.warning(f'inport {outport["name"]} class {outport["class"]} is not an inport class') + + width = outport['width'] + if outport['type'] in self._enumerations: + if self._enumerations[outport['type']]['default_value'] is not None: + init_value = self._enumerations[outport['type']]['default_value'] + else: + self.warning('Initializing enumeration %s to "zero".', outport['type']) + init_value = [ + k for k, v in self._enumerations[outport['type']]['members'].items() if v == 0 + ][0] + if width != 1: + self.critical(f'{outport["name"]} enumeration width must be 1. Got "{width}"') + fh_c.write(f"{outport['type']} {outport['name']} = {init_value};\n") + else: + if not isinstance(width, list): + width = [width] + if len(width) == 1 and width[0] == 1: + array = ' = 0' + else: + array = '' + for w in width: + if w > 1: + if not isinstance(w, int): + msg = f'{outport["name"]} widths must be integers. Got "{type(w)}"' + self.critical(msg) + array += f'[{w}]' + elif w < 0: + self.critical(f'{outport["name"]} widths can not be negative. Got "{w}"') + if self.use_volatile_globals: + fh_c.write(f'volatile {outport["type"]} {outport["name"]}{array};\n') + else: + fh_c.write(f'{outport["type"]} {outport["name"]}{array};\n') + fh_c.write(f'#include "{disp_end}"\n') + + def generate_files(self, dst_dir): + """Generate the files for defining all missing input variables.""" + self.generate_code_files(dst_dir) + self.generate_a2l_files(dst_dir) diff --git a/pybuild/environmentcheck.py b/pybuild/environmentcheck.py new file mode 100644 index 0000000..0e5b692 --- /dev/null +++ b/pybuild/environmentcheck.py @@ -0,0 +1,52 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Environment compatibility check.""" + +import sys + + +def check_python_string(python_lower, python_upper=None): + """Ensure current Python interpreter is a version between lower and upper. + + Arguments: + python_lower (str): Required lower bound for Python version. + python_upper (str): Optional upper bound for Python version. + Raises: + RuntimeError: If current Python executable is not compatible with pybuild. + + """ + versions = [_split_version(python_lower)] + if python_upper: + versions.append(_split_version(python_upper)) + check_python_tuple(*versions) + + +def check_python_tuple(python_lower, python_upper=None): + """Ensure current Python interpreter is a version between lower and upper. + + Arguments: + python_lower (2-tuple): Required lower bound for Python version. + python_upper (2-tuple): Optional upper bound for Python version. + Raises: + RuntimeError: If current Python executable is not compatible with pybuild. + + """ + cur_version = sys.version_info[:2] + + if cur_version[0] < python_lower[0] or cur_version[1] < python_lower[1]: + raise RuntimeError(_format_error(f'must be higher than {python_lower}')) + + if python_upper and (cur_version[0] > python_upper[0] or cur_version[1] > python_upper[1]): + raise RuntimeError(_format_error(f'must be lower than {python_upper}')) + + +def _split_version(version_string): + """Split a major.minor style string and returns a 2-tuple of integers.""" + parts = version_string.split('.') + return (int(parts[0]), int(parts[1])) + + +def _format_error(message): + """Return a version error string including current interpreter, version and a custom message.""" + return f'Unsupported Python version ({sys.version_info}), {message}. Path: {sys.executable}' diff --git a/pybuild/ext_dbg.py b/pybuild/ext_dbg.py new file mode 100644 index 0000000..9bb21d1 --- /dev/null +++ b/pybuild/ext_dbg.py @@ -0,0 +1,249 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module containing classes for VCC - Supplier debug interface. + +TODO: Check if all IO parameters in SPMEMSInterfaceRequirements.xlsx defined as safety variables + automatically have debug switches. +""" + +import os +import re + +from pybuild import build_defs +from pybuild.types import byte_size_string, get_bitmask, a2l_range +from pybuild.a2l import A2l +from pybuild.problem_logger import ProblemLogger + + +class ExtDbg(ProblemLogger): + """Class for generating c-files. + + These declares all debug parameters in the VCC - Supplier interface. + """ + + __data_type_size = {'Float32': '4', 'UInt32': '4', 'Int32': '4', + 'UInt16': '2', 'Int16': '2', + 'UInt8': '1', 'Int8': '1', 'Bool': '1'} + + def __init__(self, variable_dict, prj_cfg, unit_cfg, integrity_level=build_defs.CVC_ASIL_QM): + """Constructor. + + Args: + variable_dict (dict): dictionary with signal information + + Variable dict shall have the following format and is generated by the + :doc:`CsvSignalInterfaces ` class:: + + { + 'CAN-Input': { + 'signal1': { + 'IOType': 'd', + 'description': 'Some description', + 'init': 0, + 'max': 1, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + }, + 'signal2': { + ... + } + }, + 'CAN-Output': { + 'signal3': { + ... + } + }, + 'xxx-Input': ..., + 'xxx-Output': ... + } + + The optional keyword arguments may override which code section + directives to use. + """ + super().__init__() + self.set_integrity_level(integrity_level) + self._var_dict = variable_dict + self.__restructured_data = self._restruct_data() + self._prj_cfg = prj_cfg + self._unit_cfg = unit_cfg + self.use_volatile_globals = prj_cfg.get_use_volatile_globals() + + def set_integrity_level(self, integrity_level): + """Set integrity level of code generation. + + Args: + integrity_level (str): integrity level of the unit from 'A' to 'D' or 'QM' + """ + self._disp_start = integrity_level['DISP']['START'] + self._disp_end = integrity_level['DISP']['END'] + self._cal_start = integrity_level['CAL']['START'] + self._cal_end = integrity_level['CAL']['END'] + self._code_start = integrity_level['CODE']['START'] + self._code_end = integrity_level['CODE']['END'] + + def _restruct_data(self): + """Restructure input variables per data-type. + + This will be used for declaring the variables and generating the A2L-file. + """ + data = {'outputs': {}, 'inputs': {}} + for inp in self._var_dict.keys(): + if re.match(r'.*Output$', inp) is not None: + iotype = 'outputs' + else: + iotype = 'inputs' + for var, var_data in self._var_dict[inp].items(): + data_type_size = byte_size_string(var_data['type']) + data[iotype].setdefault(data_type_size, {})[var] = var_data + return data + + def _a2l_dict(self, var_dict, function): + """Generate dict defining parameters for a2l-generation.""" + def _range(data): + range_a2l = a2l_range(data['type']) + if data['min'] == '-': + a2l_min = range_a2l[0] + else: + a2l_min = data['min'] + if data['max'] == '-': + a2l_max = range_a2l[1] + else: + a2l_max = data['max'] + return a2l_min, a2l_max + + res = {'vars': {}, + 'function': function} + for var, data in self._type_order_iterator(var_dict): + resv = res['vars'] + a2l_min, a2l_max = _range(data) + a2l_data = { + 'bitmask': get_bitmask(data['type']), + 'description': data['description'], + 'lsb': '2^0', + 'max': a2l_max, + 'min': a2l_min, + 'offset': '0', + 'unit': '', + 'x_axis': None, + 'y_axis': None + } + var_db = f'c{var[1:]}_db' + var_sw = self._var_name_to_dbgsw_name(var) + resv.setdefault(var_db, {})['a2l_data'] = a2l_data + a2l_data = { + 'bitmask': get_bitmask(data['type']), + 'description': f'debug switch for {var_db} (1=bdsw act)', + 'lsb': '2^0', + 'max': '1', + 'min': '0', + 'offset': '0', + 'unit': '', + 'x_axis': None, + 'y_axis': None + } + resv.setdefault(var_sw, {})['a2l_data'] = a2l_data + resv[var_db]['array'] = [] + resv[var_sw]['array'] = [] + resv[var_db]['function'] = [function] + resv[var_sw]['function'] = [function] + resv[var_db]['var'] = {'cvc_type': 'CVC_CAL', + 'type': data['type'], + 'var': var} + resv[var_sw]['var'] = {'cvc_type': 'CVC_CAL', + 'type': 'Bool', + 'var': var} + return res + + @staticmethod + def _var_name_to_dbgsw_name(name): + """Convert a variable name to a debug switch name.""" + # the below conversion would generate a correct name for the + # debug switch, however the current build systemt generates one + # like the currently returned name + # return re.sub(r'\w(\w+?)_\w+?_(\w+)', r'c\1_B_\2_sw', name) + return re.sub(r'\w(\w+)', r'c\1_sw', name) + + @staticmethod + def _type_order_iterator(var_items): + """Get iterator over all variables. + + In data type size order, and then in alphabetical order. + """ + for _, typ_data in var_items.items(): + for var in sorted(typ_data.keys()): + yield (var, typ_data[var]) + + def _gen_dbg_c_file(self, data, filename): + """Generate debug c-files. + + These define all the debug labels for + the supplier input and output signals. + """ + with open(filename, 'w', encoding="utf-8") as fh_c: + fh_c.write(self._unit_cfg.base_types_headers) + fh_c.write('#define CVC_DISP\n') + + # define extrern variable references + fh_c.write(f'#include "{self._disp_start}"\n') + for var, var_data in self._type_order_iterator(data): + fh_c.write(f"extern CVC_DISP {var_data['type']} {var};\n") + fh_c.write(f'#include "{self._disp_end}"\n\n') + + # define debug calibration constants + fh_c.write(f'#include "{self._cal_start}"\n') + fh_c.write('\n/* Debug values */\n\n') + for var, var_data in self._type_order_iterator(data): + initial_value = var_data['min'] if var_data['min'] != "-" and float(var_data['min']) > 0 else "0" + if self.use_volatile_globals: + fh_c.write(f"volatile {var_data['type']} c{var[1:]}_db = {initial_value};\n") + else: + fh_c.write(f"{var_data['type']} c{var[1:]}_db = {initial_value};\n") + + fh_c.write('\n/* Debug switches */\n\n') + for var, var_data in self._type_order_iterator(data): + sw_name = self._var_name_to_dbgsw_name(var) + if self.use_volatile_globals: + fh_c.write(f"volatile Bool {sw_name} = 0;\n") + else: + fh_c.write(f"Bool {sw_name} = 0;\n") + fh_c.write(f'#include "{self._cal_end}"\n\n') + + # set the variable to the debug calibration constants + fh_c.write('/***********************/\n') + fh_c.write('/* debug functionality */\n') + fh_c.write('/***********************/\n\n') + _, fname_tmp = os.path.split(filename) + func_name = fname_tmp.split('.')[-2] + fh_c.write(f'#include "{self._code_start}"\n') + fh_c.write(f'void {func_name}(void) {{\n') + for var, var_data in self._type_order_iterator(data): + sw_name = self._var_name_to_dbgsw_name(var) + fh_c.write(f' if ({sw_name}) {{\n') + fh_c.write(f' {var} = c{var[1:]}_db;\n }}\n') + fh_c.write(f'}}\n#include "{self._code_end}"\n\n') + self.info('Generated %s', filename) + + def gen_dbg_files(self, fname_in, fname_out): + """Generate the c-files and A2L-files. + + These declares all the supplier interface debug parameters and functions. + """ + # c-files + self._gen_dbg_c_file(self.__restructured_data['inputs'], + fname_in + '.c') + self._gen_dbg_c_file(self.__restructured_data['outputs'], + fname_out + '.c') + # A2L-files + _, fname_tmp = os.path.split(fname_in) + a2l_dict_in = self._a2l_dict(self.__restructured_data['inputs'], + fname_tmp) + _, fname_tmp = os.path.split(fname_out) + a2l_dict_out = self._a2l_dict(self.__restructured_data['outputs'], + fname_tmp) + a2l = A2l(a2l_dict_in, self._prj_cfg) + a2l.gen_a2l(fname_in + '.a2l') + a2l = A2l(a2l_dict_out, self._prj_cfg) + a2l.gen_a2l(fname_out + '.a2l') diff --git a/pybuild/ext_var.py b/pybuild/ext_var.py new file mode 100644 index 0000000..ae2fe25 --- /dev/null +++ b/pybuild/ext_var.py @@ -0,0 +1,296 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module containing classes for VCC - Supplier signal interface.""" + +from pybuild import build_defs +from pybuild.types import byte_size_string, get_bitmask +from pybuild.a2l import A2l +from pybuild.problem_logger import ProblemLogger + + +class ExtVarBase(ProblemLogger): + """Generate a2l- and c-files. + + These which declares all variables in the interface that the + supplier platform writes to. + + This is needed due to legacy handling of the interfaces between units. + Note that all variables sent from the VCC SPM to the platform should be declared in + the function that produces the signal! + """ + + INPORT_INDEX = 0 + OUTPORT_INDEX = 1 + + __data_type_size = {'Float32': '4', 'UInt32': '4', 'Int32': '4', + 'UInt16': '2', 'Int16': '2', + 'UInt8': '1', 'Int8': '1', 'Bool': '1'} + + def __init__(self, variable_dict, prj_cfg, unit_cfg, user_defined_types, integrity_level=build_defs.ASIL_QM): + """Constructor. + + Args: + variable_dict (dict): dictionary with signal information. + prj_cfg (BuildProjConfig): Build project class holding where files should be stored. + user_defined_types (UserDefinedTypes): Class holding user defined data types. + integrity_level (str): integrity level of the unit from 'A' to 'D' or 'QM'. + """ + super().__init__() + self.set_integrity_level(integrity_level) + self._var_dict = variable_dict + self._ext_vars = {} + self._prj_cfg = prj_cfg + self._unit_cfg = unit_cfg + self._enumerations = user_defined_types.get_enumerations() + self._common_header_files = user_defined_types.common_header_files + + def set_integrity_level(self, integrity_level): + """Set integrity level of code generation. + + Args: + integrity_level (str): integrity level of the unit from 'A' to 'D' or 'QM' + """ + self._disp_start = integrity_level['CVC']['DISP']['START'] + self._disp_end = integrity_level['CVC']['DISP']['END'] + self._decl_start = integrity_level['PREDECL']['DISP']['START'] + self._decl_end = integrity_level['PREDECL']['DISP']['END'] + + def _get_byte_size_string(self, data_type): + """Get byte size of a data type as string. + Enumeration byte sizes are derived from the underlying data type. + + Args: + data_type (str): Data type. + Returns: + byte_size_string(pybuild.types.byte_size_string): Return result of pybuild.types.byte_size_string. + """ + if data_type in self._enumerations: + return byte_size_string(self._enumerations[data_type]['underlying_data_type']) + return byte_size_string(data_type) + + def _get_bitmask(self, data_type): + """Get bitmask of a data type. + Enumeration bitmasks are derived from the underlying data type. + + Args: + data_type (str): Data type. + Returns: + get_bitmask(pybuild.types.get_bitmask): Return result of pybuild.types.get_bitmask. + """ + if data_type in self._enumerations: + return get_bitmask(self._enumerations[data_type]['underlying_data_type']) + return get_bitmask(data_type) + + def _restruct_input_data(self): + """Restructure all the input variables per data-type. + + This will be used for declaring the variables and generating the + A2L-file + """ + external_inports = {} + external_outports = {} + for external_port_type in self.EXTERNAL_INPORT_TYPES: + if external_port_type in self._var_dict: + for var, data in self._var_dict[external_port_type].items(): + data_type_size = self._get_byte_size_string(data[self.TYPE_NAME]) + external_inports.setdefault(data_type_size, {})[var] = data + for external_port_type in self.EXTERNAL_OUTPORT_TYPES: + if external_port_type in self._var_dict: + for var, data in self._var_dict[external_port_type].items(): + data_type_size = self._get_byte_size_string(data[self.TYPE_NAME]) + external_outports.setdefault(data_type_size, {})[var] = data + self._ext_vars = external_inports, external_outports + + def _a2l_dict(self): + """Return a dict defining all parameters for a2l-generation.""" + res = { + 'vars': {}, + 'function': 'VcExtVar' + } + for inp in self.EXTERNAL_INPORT_TYPES: + if inp in self._var_dict: + for var, data in self._var_dict[inp].items(): + if data[self.TYPE_NAME] in self._enumerations: + data_type = self._enumerations[data[self.TYPE_NAME]]['underlying_data_type'] + else: + data_type = data[self.TYPE_NAME] + + resv = res['vars'] + resv.setdefault(var, {})['a2l_data'] = self.get_a2l_format(data) + resv[var]['array'] = [] + resv[var]['function'] = ['VcEc'] + resv[var]['var'] = { + 'cvc_type': 'CVC_DISP', + 'type': data_type, + 'var': var + } + return res + + def _generate_c_file(self, path): + """Generate the c-file defining all the supplier input signals.""" + header = path.with_suffix('.h').name + var_set = set() + with path.open('w') as fh_c: + fh_c.write(f'#include "{header}"\n') + fh_c.write(f'#include "{self._disp_start}"\n\n') + for data_type_s, ext_vars in self._ext_vars[self.INPORT_INDEX].items(): + fh_c.write(f"/* Variables of size {data_type_s} bytes */\n\n") + for var in sorted(ext_vars.keys()): + data = ext_vars[var] + if var not in var_set: + fh_c.write(f"CVC_DISP {data[self.TYPE_NAME]} {var} = {data['init']};\n") + var_set.add(var) + fh_c.write('\n') + fh_c.write(f'\n#include "{self._disp_end}"\n') + self.info('Generated %s', path.name) + + def _generate_h_file(self, path): + """Generate header file externally declaring interface signals.""" + filename = path.stem + guard = f"{filename.upper()}_H" + var_set = set() + with path.open('w') as fh_c: + fh_c.write(f'#ifndef {guard}\n') + fh_c.write(f'#define {guard}\n') + fh_c.write('#define CVC_DISP\n') + fh_c.write(self._unit_cfg.base_types_headers) + + for common_header_file in self._common_header_files: + fh_c.write(f'#include "{common_header_file}"\n') + fh_c.write('\n') + + fh_c.write(f'#include "{self._decl_start}"\n') + fh_c.write('/* VCC Inports */\n') + for data_type_s, ext_vars in self._ext_vars[self.INPORT_INDEX].items(): + fh_c.write(f"/* Variables of size {data_type_s} bytes */\n\n") + for var in sorted(ext_vars.keys()): + if var not in var_set: + data = ext_vars[var] + fh_c.write(f"extern CVC_DISP {data[self.TYPE_NAME]} {var};\n") + var_set.add(var) + fh_c.write('\n') + + fh_c.write('/* VCC Outports */\n') + for data_type_s, ext_vars in self._ext_vars[self.OUTPORT_INDEX].items(): + fh_c.write(f"/* Variables of size {data_type_s} bytes */\n\n") + for var in sorted(ext_vars.keys()): + if var not in var_set: + data = ext_vars[var] + fh_c.write(f"extern CVC_DISP {data[self.TYPE_NAME]} {var};\n") + var_set.add(var) + fh_c.write('\n') + fh_c.write(f'#include "{self._decl_end}"\n') + fh_c.write('#endif\n') + self.info('Generated %s', path.name) + + def generate_files(self, path): + """Generate the c- and a2l-file for defining all the supplier input variables.""" + self._restruct_input_data() + if not self._ext_vars[0] and not self._ext_vars[1]: + self.info(f'Skipping {path.name} as there were no corresponding vars.') + return + self._generate_c_file(path.with_suffix('.c')) + self._generate_h_file(path.with_suffix('.h')) + a2l_dict = self._a2l_dict() + a2l = A2l(a2l_dict, self._prj_cfg) + a2l.gen_a2l(path.with_suffix('.a2l')) + + +class ExtVarCsv(ExtVarBase): + """Handles variable dicts from CSV files. + + Variable dict shall have the following format and is generated by the + :doc:`CsvSignalInterfaces ` class:: + + { + 'CAN-Input': { + 'signal1': { + 'IOType': 'd', + 'description': 'Some description', + 'init': 0, + 'max': 1, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + }, + 'signal2': { + ... + } + }, + 'CAN-Output': { + 'signal3': { + ... + } + }, + 'xxx-Input': ..., + 'xxx-Output': ... + } + """ + EXTERNAL_INPORT_TYPES = ['EMS-Input', 'CAN-Input', 'Private CAN-Input', 'LIN-Input'] + EXTERNAL_OUTPORT_TYPES = ['EMS-Output', 'CAN-Output', 'Private CAN-Output', 'LIN-Output'] + TYPE_NAME = 'type' + + def get_a2l_format(self, data): + """Get a2l format. + + Args: + data (dict): Data dictionary. + Returns: + dict: A2l format dictionary. + """ + return { + 'bitmask': self._get_bitmask(data[self.TYPE_NAME]), + 'description': data['description'], + 'lsb': '2^0', + 'max': data['max'], + 'min': data['min'], + 'offset': '0', + 'unit': data['unit'], + 'x_axis': None, + 'y_axis': None + } + + +class ExtVarYaml(ExtVarBase): + """Handles variable dicts from Yaml files. + + Variable dict shall have the following format and is generated by the + :doc:`YamlSignalInterfaces ` class:: + + { + 'input': { + 'sVcIhfa_D_WhlMotSysFrntLimnIndcn': {}, + 'sVcIhfa_D_WhlMotSysFrntModSts': {}, + 'sVcIhfa_I_WhlMotSysFrntIdc': {}, + 'sVcIhfa_U_UDcDcActHiSide1': {}, + 'sVcIhfa_U_WhlMotSysFrntUdc': {} + }, + 'output': {}, + 'status': {}, + } + """ + EXTERNAL_INPORT_TYPES = ['input', 'status'] + EXTERNAL_OUTPORT_TYPES = ['output'] + TYPE_NAME = 'variable_type' + + def get_a2l_format(self, data): + """Get a2l format. + + Args: + data (dict): Data dictionary. + Returns: + dict: A2l format dictionary. + """ + return { + 'bitmask': self._get_bitmask(data[self.TYPE_NAME]), + 'description': data['description'], + 'lsb': '2^0', + 'max': data['range']['max'], + 'min': data['range']['min'], + 'offset': '0', + 'unit': data['unit'], + 'x_axis': None, + 'y_axis': None + } diff --git a/pybuild/feature_configs.py b/pybuild/feature_configs.py new file mode 100644 index 0000000..0b005ee --- /dev/null +++ b/pybuild/feature_configs.py @@ -0,0 +1,301 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Feature configuration (codeswitches) module.""" + +import copy +import glob +import os +import re +from pprint import pformat + +from pybuild.lib.helper_functions import deep_dict_update +from pybuild.problem_logger import ProblemLogger +from pybuild.xlrd_csv import WorkBook + + +class FeatureConfigs(ProblemLogger): + """Hold feature configurations read from SPM_Codeswitch_Setup*.csv config files. + + Provides methods for retrieving the currently + used configurations of a unit. + """ + + convs = (('~=', '!='), ('~', ' not '), ('!', ' not '), (r'\&\&', ' and '), + (r'\|\|', ' or ')) + + def __init__(self, prj_config): + """Constructor. + + Args: + prj_config (BuildProjConfig): configures which units are active in the current project and where + the codeswitches files are located + + """ + super().__init__() + self._if_define_dict = {} + self._build_prj_config = prj_config + self._missing_codesw = set() + # Get the config switches configuration + self._set_config(self._parse_all_code_sw_configs()) + self._parse_all_local_defs() + self._add_local_defs_to_tot_code_sw() + + def __repr__(self): + """Get string representation of object.""" + return pformat(self.__code_sw_cfg.keys()) + + def _parse_all_code_sw_configs(self): + """Parse all SPM_Codeswitch_Setup*.csv config files. + + Returns: + dict: with the projects as keys, and the values are + another dict with the config-parameter and it's value. + + """ + # TODO: Change this when condeswitches are moved to model config + # cfg_paths = self._build_prj_config.get_unit_mdl_dirs('all') + cfg_paths = [self._build_prj_config.get_prj_cfg_dir()] + cfg_fname = self._build_prj_config.get_codeswitches_name() + cfg_files = [] + for cfg_path in cfg_paths: + cfg_files.extend(glob.glob(os.path.join(cfg_path, cfg_fname))) + self.debug('cfg_paths: %s', pformat(cfg_paths)) + self.debug('cfg_fname: %s', pformat(cfg_fname)) + self.debug('cfg_files: %s', pformat(cfg_files)) + conf_dict = {} + for file_ in cfg_files: + conf_dict = deep_dict_update(conf_dict, self._parse_code_sw_config(file_)) + return conf_dict + + def _parse_code_sw_config(self, file_name): + """Parse the SPM_Codeswitch_Setup.csv config file. + + Returns: + dict: with the projects as keys, and the values are + another dict with the config-parameter and it's value. + + """ + self.debug('_parse_code_sw_config: %s', file_name) + wbook = WorkBook(file_name) + conf_dict = {'NEVER_ACTIVE': 0, + 'ALWAYS_ACTIVE': 1} + # TODO: handle sheet names in a better way! + wsheet = wbook.single_sheet() + prjs = [d.value for d in wsheet.row(0)[2:]] + prj_row = enumerate(prjs, 2) + for col, prj in prj_row: + if prj != self._build_prj_config.get_prj_config(): + self.debug('Skipping %s', prj) + continue + for r_nbr in range(1, wsheet.nrows): + row = wsheet.row(r_nbr) + conf_par = row[0].value.strip().replace('.', '_') + val = row[col].value + if not isinstance(val, str): + conf_dict[conf_par] = val + elif val.lower().strip() == 'na' or val.lower().strip() == 'n/a': + conf_dict[conf_par] = 0 + else: + self.warning('Unexpected codeswitch value %s = "%s". Ignored!', row[0].value.strip(), val) + return conf_dict + return conf_dict + + def _recursive_subs(self, m_def, code_sws): + """Recursivly replaces macro definitions with values.""" + # find and replace all symbols with values + symbols = re.findall(r'(?!(?:and|or|not)\b)(\b[a-zA-Z_]\w+)', m_def) + m_def_subs = m_def + for symbol in symbols: + if symbol in code_sws: + m_def_subs = re.sub(symbol, str(code_sws[symbol]), m_def_subs) + elif symbol in self._if_define_dict: + m_def_subs = re.sub(symbol, str(self._if_define_dict[symbol]), m_def_subs) + m_def_subs = self._recursive_subs(m_def_subs, code_sws) + else: + self.critical('Symbol %s not defined in config switches.', symbol) + return None + return m_def_subs + + def _add_local_defs_to_tot_code_sw(self): + """Add the defines from the LocalDefs.h files to the code switch dict.""" + for macro, m_def in self._if_define_dict.items(): + tmp_subs = self._recursive_subs(m_def, self.__tot_code_sw) + if tmp_subs is None: + continue + self.__tot_code_sw[macro] = eval(tmp_subs) + + def get_preprocessor_macro(self, nested_code_switches): + """Get the #if macro string for a code switch configuration from a unit config json file. + + Args: + nested_code_switches(list()): list of lists of code switches from unitconfig + return: + string: A string with an #if macro that defines if the code should be active + '#if ( && ) || ( && )' + """ + if_macro_and = [] + if not isinstance(nested_code_switches, list): + self.warning("Unitconfig codeswitches should be in a nested list") + nested_code_switches = [nested_code_switches] + if not isinstance(nested_code_switches[0], list): + self.warning("Unitconfig codeswitches should be in a nested list") + nested_code_switches = [nested_code_switches] + + for code_switches in nested_code_switches: + if isinstance(code_switches, str): + code_switches = [code_switches] + if_macro_and.append(f"( { ' && '.join(code_switches) } )") + if_macro_string = f"#if {' || '.join(if_macro_and)}" if if_macro_and else "" + all_projects = re.search('all', if_macro_string, re.I) + if all_projects: + return "" + return if_macro_string + + def gen_unit_cfg_header_file(self, file_name): + """Generate a header file with preprocessor defines needed to configure the SW. + + Args: + file_name (str): The file name (with path) of the unit config header file + + """ + with open(file_name, 'w', encoding="utf-8") as f_hndl: + _, fname = os.path.split(file_name) + fname = fname.replace('.', '_').upper() + f_hndl.write(f'#ifndef {fname}\n') + f_hndl.write(f'#define {fname}\n\n') + conf_sw = self.__code_sw_cfg + for key_, val in conf_sw.items(): + if val == "": + self.warning('Code switch "%s" is missing a defined value', key_) + f_hndl.write(f'#define {key_} {val}\n') + f_hndl.write(f'\n#endif /* {fname} */\n') + + def _eval_cfg_expr(self, elem): + """Convert matlab config expression to python expression. + + Uses the tuple self.convs, and evaluates the result using + self.__code_sw_cfg[config] + This function does not handle the complex definitions made outside + the dict. + + Args: + elem (str): element string + + Returns: + Bool: True if config is active, False if not. + + """ + res = re.search('all', elem, re.I) + if res is not None: + return True + # modify all matlab expressions + elem_tmp = elem + # find and replace all symbols with values + symbols = re.findall(r'[a-zA-Z_]\w+', elem_tmp) + code_sw_dict = self.__tot_code_sw + for symbol in symbols: + try: + elem_tmp = re.sub(fr'\b{symbol}\b', str(code_sw_dict[symbol]), elem_tmp) + except KeyError: + if symbol not in self._missing_codesw: + self.critical('Missing %s in CodeSwitch definition', symbol) + self._missing_codesw.add(symbol) + return False + # convert matlab/c to python expressions + for conv in self.convs: + elem_tmp = re.sub(conv[0], conv[1], elem_tmp) + # evaluate and return result + return eval(elem_tmp) + + def check_if_active_in_config(self, config_def): + """Check if a config is active in the current context. + + Takes a collection of config strings and checks if this config definition is active + within the current configuration. The structure of the provided string collection + determines how the config definition is evaluated. (logical and/or expressions) + + list of list of config strings + [[*cs1* and *cs2*] or [*cs3* and *cs4*]]. + + list of config strings + [*cs1* and *cs2*] + + single config string + *cs1* + + Args: + config_def (list): the config definitions as described above + + Returns: + Bool: True if active the current configuration + + """ + if not config_def: + return True + # format the input to a list of list of strings + if isinstance(config_def, str): + c_def = [[config_def]] + elif isinstance(config_def, list) and isinstance(config_def[0], str): + c_def = [config_def] + else: + c_def = config_def + eval_ = False + for or_elem in c_def: + for and_elem in or_elem: + eval_ = self._eval_cfg_expr(and_elem) + if not eval_: + break + if eval_: + break + return eval_ + + def _conv_mlab_def_to_py(self, matlab_def): + """Convert matlab syntax to python syntax. + + TODO: Move this functionality to the matlab-scripts, which are + run on the local machine. + + """ + m_def_tmp = matlab_def + for from_, to_ in self.convs: + m_def_tmp = re.sub(from_, to_, m_def_tmp) + return m_def_tmp + + def _parse_local_def(self, file_data): + """Parse one local define file.""" + res = re.findall(r'#if\s+(.*?)(? symbol name (therefore not in list of symbol groups). + 2 -> diesel group. + 3 -> petrol group. + 4 -> hybrid group. + 5 -> subsystem (therefore not in list of symbol groups). + + Args: + sgp_file (Path): Path to an _sgp.xml file. + Returns: + found_sgp_symbols (dict): A symbol to symbol_groups dictionary found in the sgp_file. + """ + tree = ElementTree.parse(sgp_file) + root = tree.getroot() + search_string = '{{urn:schemas-microsoft-com:office:spreadsheet}}{tag}' + label_sheet = root.find(search_string.format(tag='Worksheet')) + table = label_sheet.find(search_string.format(tag='Table')) + rows = table.findall(search_string.format(tag='Row')) + + found_sgp_symbols = {} + for row in rows: + symbol = None + column_counter = 1 + cells = row.findall(search_string.format(tag='Cell')) + for cell in cells: + data = cell.find(search_string.format(tag='Data')) + if data is not None: + # Sometimes there are spaces in the symbol cell + # Sometimes there is a weird \ufeff character (VcDebug_sgp.xml) in the symbol cell + value = data.text.replace(' ', '').replace('\ufeff', '') + if symbol is None: + symbol = value + found_sgp_symbols[symbol] = [] + else: + new_index = search_string.format(tag='Index') + if new_index in cell.attrib: + column_counter = int(cell.attrib[new_index]) + found_sgp_symbols[symbol].append((column_counter, value)) + column_counter += 1 + + return found_sgp_symbols + + def get_sgp_symbol_group(self, symbol_groups_by_index): + """Match _sgp.xml file indices (symbol groups) with a given project. + + Args: + symbol_groups_by_index (list(tuple)): List of (index, symbol_group) pairs. + Returns: + symbol_group (str): The symbol group corresponding to the given project. + """ + symbol_group = '' + symbol_dict = self.labelsplit_cfg.get("SGP_SYMBOL_GROUPS") + symbol_list = [val for key, val in symbol_dict.items() if key in self.project] + if len(symbol_list) >= 1: + for index, group in symbol_groups_by_index: + if index == symbol_list[0]: + symbol_group = group + else: + LOGGER.error('Cannot match symbol group type for project: %s', self.project) + return symbol_group + + def get_interface_symbols_and_groups(self, interface_dict, in_symbol_sgp_dict, out_symbol_sgp_dict): + """Get a list of (symbol, symbol_group) pairs found in given interface and sgp files. + + Args: + interface_dict (dict): interface to symbol map, matching a certain IO type. + in_symbol_sgp_dict (dict): An input symbol to symbol_groups dictionary found in an sgp_file, + to be compared with interface_dict inputs. + out_symbol_sgp_dict (dict): An output symbol to symbol_groups dictionary found in an sgp_file, + to be compared with interface_dict outputs. + Returns: + symbols_and_groups (list(tuple)): List of (symbol, symbol_group) pairs in: interface and sgp file. + """ + symbols_and_groups = [] + for interface, symbol_data in interface_dict.items(): + for symbol in symbol_data.keys(): + debug_name = re.sub(r'\w(\w+)', r'c\1_db', symbol) + switch_name = re.sub(r'\w(\w+)', r'c\1_sw', symbol) + if 'Input' in interface and debug_name in in_symbol_sgp_dict and switch_name in in_symbol_sgp_dict: + debug_symbol_group = self.get_sgp_symbol_group(in_symbol_sgp_dict[debug_name]) + switch_symbol_group = self.get_sgp_symbol_group(in_symbol_sgp_dict[switch_name]) + symbols_and_groups.extend([(debug_name, debug_symbol_group), (switch_name, switch_symbol_group)]) + elif 'Output' in interface and debug_name in out_symbol_sgp_dict and switch_name in out_symbol_sgp_dict: + debug_symbol_group = self.get_sgp_symbol_group(out_symbol_sgp_dict[debug_name]) + switch_symbol_group = self.get_sgp_symbol_group(out_symbol_sgp_dict[switch_name]) + symbols_and_groups.extend([(debug_name, debug_symbol_group), (switch_name, switch_symbol_group)]) + return symbols_and_groups + + def get_debug_symbols_and_groups(self): + """Get a list of (symbol, symbol_group) pairs found in project interface and VcDebug*_sgp.xml files. + + Returns: + debug_symbols_and_groups (list(tuple)): List of (symbol, symbol_group) pairs in: + interface and VcDebug*_sgp.xmlfiles. + """ + _unused, dep, _unused_two, debug = self.csv_if.get_io_config() + sgp_file_dict = self.labelsplit_cfg.get("SGP_FILE") + debug_sgp_file = Path(sgp_file_dict.get('cfg_folder'), sgp_file_dict.get('debug')) + debug_output_sgp_file = Path(sgp_file_dict.get('cfg_folder'), sgp_file_dict.get('debug_output')) + dep_sgp_file = Path(sgp_file_dict.get('cfg_folder'), sgp_file_dict.get('dep')) + dep_output_sgp_file = Path(sgp_file_dict.get('cfg_folder'), sgp_file_dict.get('dep_output')) + debug_sgp_symbols = self.get_sgp_symbols(debug_sgp_file) + debug_output_sgp_symbols = self.get_sgp_symbols(debug_output_sgp_file) + dep_sgp_symbols = self.get_sgp_symbols(dep_sgp_file) + dep_output_sgp_symbols = self.get_sgp_symbols(dep_output_sgp_file) + + symbols_and_groups_tmp = [] + debug_tmp = self.get_interface_symbols_and_groups(debug, + debug_sgp_symbols, + debug_output_sgp_symbols) + dep_tmp = self.get_interface_symbols_and_groups(dep, + dep_sgp_symbols, + dep_output_sgp_symbols) + symbols_and_groups_tmp.extend(debug_tmp) + symbols_and_groups_tmp.extend(dep_tmp) + + debug_symbols_and_groups = [] + for symbol, symbol_group in symbols_and_groups_tmp: + if symbol_group == '': + LOGGER.info('Debug symbol %s is missing symbol group and will be removed.', symbol) + else: + debug_symbols_and_groups.append((symbol, symbol_group)) + + return debug_symbols_and_groups + + def check_unit_par_file(self, unit): + """Check _par.m file for default sgp symbol group. + + Args: + unit (str): Current unit/model name. + Returns: + has_sgp_default (Bool): True/False if unit is associated with default sgp value. + default_symbol_group (str): Name of default symbol group. + """ + has_sgp_default = False + default_symbol_group = '' + base_search_string = r'SgpDefault\.{unit}\.[A-Za-z]+\s*=\s*[\'\"]([A-Za-z_]+)[\'\"]' + search_string = base_search_string.format(unit=unit) + + non_existent_par_file = Path('non_existent_par_file.m') + found_par_files = glob.glob('Models/*/' + unit + '/' + unit + '_par.m') + if len(found_par_files) > 1: + LOGGER.warning('Found more than one _par.m file, using %s', found_par_files[0]) + par_file = Path(found_par_files[0]) if found_par_files else non_existent_par_file + + if self.labelsplit_cfg.get("special_unit_prefixes"): + for special_prefix in self.labelsplit_cfg.get("special_unit_prefixes"): + if unit.startswith(special_prefix) and not par_file.is_file(): + # Some units require special handling. + if '__' in unit: + parent = unit.replace('__', 'Mdl__') + else: + parent = unit + 'Mdl' + found_par_files = glob.glob('Models/*/' + parent + '/' + parent + '_par.m') + par_file = Path(found_par_files[0]) if found_par_files else Path(non_existent_par_file) + # Default symbol group is based on c-file name + c_name = re.sub('(Mdl)?(__.*)?', '', unit) + search_string = base_search_string.format(unit=c_name) + + if par_file.is_file(): + with par_file.open(encoding="latin-1") as par_fh: + par_text = par_fh.read() + sgp_default_match = re.search(search_string, par_text) + if sgp_default_match is not None: + has_sgp_default = True + default_symbol_group = sgp_default_match.group(1) + else: + LOGGER.info('Missing _par file for model: %s', unit) + + return has_sgp_default, default_symbol_group + + def get_unit_sgp_file(self, unit): + """Get path to _sgp.xml file. + + Args: + unit (str): Current unit/model name. + Returns: + sgp_file (Path): Path to _sgp.xml file. + """ + non_existent_sgp_file = Path('non_existent_sgp_file.xml') + found_sgp_files = glob.glob('Models/*/' + unit + '/' + unit + '_sgp.xml') + if len(found_sgp_files) > 1: + LOGGER.warning('Found more than one _sgp.xml file, using %s', found_sgp_files[0]) + sgp_file = Path(found_sgp_files[0]) if found_sgp_files else Path(non_existent_sgp_file) + + if self.labelsplit_cfg.get("special_unit_prefixes"): + for special_prefix in self.labelsplit_cfg.get("special_unit_prefixes"): + if unit.startswith(special_prefix) and not sgp_file.is_file(): + # Some units require special handling. + if '__' in unit: + parent = unit.replace('__', 'Mdl__') + else: + parent = unit + 'Mdl' + found_sgp_files = glob.glob('Models/*/' + parent + '/' + parent + '_sgp.xml') + sgp_file = Path(found_sgp_files[0]) if found_sgp_files else Path(non_existent_sgp_file) + + return sgp_file + + def get_unit_symbols_and_groups(self, unit, calibration_symbols): + """Get a list of (symbol, symbol_group) pairs found in A2L, _sgp/par and config_.json files. + + Args: + unit (str): Current unit/model name. + calibration_symbols (list): All calibration symbols for the unit (from config_.json). + Returns: + unit_symbols_and_groups (list(tuple)): List of (symbol, symbol_group) pairs in: A2L, _sgp/_par and + config files. + """ + unit_symbols_and_groups = [] + has_sgp_default, default_symbol_group = self.check_unit_par_file(unit) + sgp_file = self.get_unit_sgp_file(unit) + + if sgp_file.is_file(): + found_sgp_symbols = self.get_sgp_symbols(sgp_file) + else: + found_sgp_symbols = {} + LOGGER.info('Missing _sgp file for model: %s', unit) + + for symbol in calibration_symbols: + if symbol not in self.project_a2l_symbols: + LOGGER.info('Symbol %s not in project A2L file and will be removed.', symbol) + continue + + if symbol in found_sgp_symbols: + symbol_group = self.get_sgp_symbol_group(found_sgp_symbols[symbol]) + unit_symbols_and_groups.append((symbol, symbol_group)) + elif has_sgp_default: + if symbol.endswith('_sw') or symbol.endswith('_db'): + LOGGER.info('Debug symbol %s not in sgp file and will be removed.', symbol) + else: + unit_symbols_and_groups.append((symbol, default_symbol_group)) + else: + LOGGER.info('Symbol %s missing in _sgp file and lack SgpDefault value.', symbol) + + return unit_symbols_and_groups + + def get_calibration_constants(self): + """Get all calibration symbols for each unit in the project. + + Returns: + calibration_symbols_per_unit (dict): A unit to symbol list dictionary. + """ + security_variables = self.labelsplit_cfg.get("security_variables") + u_conf_dict = self.unit_cfg.get_per_cfg_unit_cfg() + + safe_calibration_symbols = {} + for symbol, symbol_data in u_conf_dict['calib_consts'].items(): + if symbol not in security_variables: + safe_calibration_symbols.update({symbol: symbol_data}) + + calibration_symbols_per_unit = {} + for symbol, symbol_data in safe_calibration_symbols.items(): + for unit, unit_data in symbol_data.items(): + if 'CVC_CAL' in unit_data['class']: + if unit in calibration_symbols_per_unit: + calibration_symbols_per_unit[unit].append(symbol) + else: + calibration_symbols_per_unit[unit] = [symbol] + + return calibration_symbols_per_unit + + def get_symbols_and_groups(self): + """Get a list of (symbol, symbol_group) pairs found in A2L, _sgp/par and config_.json files. + + Returns: + exit_code (int): 0/1 based on successful collection of symbols and symbol groups. + all_symbols_and_groups (dict): A symbol to symbol_group dictionary for all A2L, _sgp/_par and config files, + """ + exit_code = 0 + calibration_symbols_per_unit = self.get_calibration_constants() + debug_symbols = self.get_debug_symbols_and_groups() + + all_symbol_and_group_pairs = [] + if self.labelsplit_cfg.get("project_symbols"): + special_project_dict = self.labelsplit_cfg.get("project_symbols") + pair_list = [val for key, val in special_project_dict.items() if key in self.project] + if len(pair_list) == 1: + symbol_and_group_pairs_list = pair_list[0].items() + all_symbol_and_group_pairs += symbol_and_group_pairs_list + elif len(pair_list) > 1: + LOGGER.error('Project %s has does not follow the name rule', self.project) + return 1, {} + + all_symbol_and_group_pairs.extend(debug_symbols) + + for unit, symbols in calibration_symbols_per_unit.items(): + if self.labelsplit_cfg.get("special_units"): + special_unit_dict = self.labelsplit_cfg.get("special_units") + if unit in special_unit_dict.keys(): + # Some units require special handling. + LOGGER.warning('Found %s, assuming %s is used.', unit, special_unit_dict.get(unit)) + labels = self.get_unit_symbols_and_groups(special_unit_dict.get(unit), symbols) + else: + labels = self.get_unit_symbols_and_groups(unit, symbols) + else: + labels = self.get_unit_symbols_and_groups(unit, symbols) + all_symbol_and_group_pairs.extend(labels) + + symbol_to_group_dict = {} + for symbol, symbol_group in all_symbol_and_group_pairs: + if symbol in symbol_to_group_dict: + if symbol_to_group_dict[symbol] != symbol_group: + LOGGER.error('Symbol %s multiply defined with different symbol groups.', symbol) + exit_code = 1 + else: + symbol_to_group_dict[symbol] = symbol_group + + return exit_code, symbol_to_group_dict + + def generate_label_split_xml_file(self, symbols_and_groups): + """Generate a label split file, given a directory plus labels and groups to add. + + Args: + symbols_and_groups (dict): A symbol to symbol_group dictionary given a project. + Returns: + exit_code (int): 0/1 based on successful generation of Labelsplit.xls. + """ + errors = [] + project_root_dir = self.build_cfg.get_root_dir() + cmt_output_folder = helper_functions.create_dir(Path(project_root_dir, 'output', 'CMT')) + start_file_name = Path(self.cmt_source_folder, 'template_labelsplit_sgp_start.xml_') + row_count_file_name = Path(cmt_output_folder, 'labelsplit_rowcount.xml_') + start_2_file_name = Path(self.cmt_source_folder, 'template_labelsplit_sgp_start_2.xml_') + label_split_rows_filename = Path(cmt_output_folder, 'labelsplit_rows.xml_') + end_file_name = Path(self.cmt_source_folder, 'template_labelsplit_sgp_end.xml_') + files_to_merge = [start_file_name, row_count_file_name, start_2_file_name, + label_split_rows_filename, end_file_name] + + with row_count_file_name.open('w', encoding="utf-8") as rc_fh: + rc_fh.write(f'{len(symbols_and_groups) + 1}') # header + data + + with label_split_rows_filename.open('w', encoding="utf-8") as lsrf_fh: + for symbol, symbol_group in symbols_and_groups.items(): + if symbol_group == '': + errors.append(f'Missing symbol group for symbol: {symbol}') + elif symbol_group == 'VCC_SPM_DEBUG': + LOGGER.info('Ignoring undistributed debug symbol: %s', symbol) + else: + lsrf_fh.write( + ' \n' + f' {symbol}' + '\n' + f' {symbol_group}' + '\n' + ' \n' + ) + + if errors: + LOGGER.error('\n'.join(errors)) + return 1 + + output_file_name = Path(project_root_dir, 'output', 'CMT', 'Labelsplit.xls') + with output_file_name.open('w', encoding="utf-8") as output_fh: + for file_name in files_to_merge: + with file_name.open(encoding="utf-8") as input_fh: + content = input_fh.read() + output_fh.write(content) + LOGGER.info('Delivery to: %s', str(output_file_name)) + return 0 diff --git a/pybuild/handcode_replacer.py b/pybuild/handcode_replacer.py new file mode 100644 index 0000000..d53b7ee --- /dev/null +++ b/pybuild/handcode_replacer.py @@ -0,0 +1,124 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Script to replace pragmas in hand written c-code.""" + +import re +import os +import sys +import shutil + +REPO_ROOT = os.path.join(os.path.dirname(__file__), '..', '..') + + +class CodeReplacer: + """Class to replace code in hand written c-code.""" + + def replace_line(self, line): + """Replace line.""" + raise NotImplementedError + + def replace_file(self, file_name): + """Go through all lines in the file and replace pragmas.""" + tmp_file = file_name + '.tmp' + with open(file_name, 'r', encoding='ascii', errors='ignore') as old_file: + with open(tmp_file, 'w', encoding='ascii', errors='ignore') as new_file: + for line in old_file.readlines(): + line = self.replace_line(line) + new_file.write(line) + shutil.move(tmp_file, file_name) + + +class PragmaReplacer(CodeReplacer): + """Class to replace pragmas in hand written c-code.""" + + def __init__(self): + """Init.""" + self.cvc_started = False + self.cvc = None + self.regex = re.compile(r'^\s*#pragma section\s*(CVC(?P[a-zA-Z0-9_]*))*\s*$') + self.template = '#include "CVC_{cvc}_{start_or_end}.h"\n' + + def replace_line(self, line): + """Replace line (if it has a pragma).""" + match = self.regex.match(line) + if match: + if self.cvc_started: + line = self.template.format(cvc=self.cvc, + start_or_end='END') + self.cvc = None + else: + self.cvc = match.group('cvc') or 'CODE' + line = self.template.format(cvc=self.cvc, + start_or_end='START') + self.cvc_started = not self.cvc_started + return line + + +class CodeSwitchReplacer(CodeReplacer): + """Class to replace code switch includes in hand written c-code.""" + + def __init__(self): + """Init.""" + self.regex = re.compile(r'(.*)SPM_Codeswitch_Setup(_PVC)?(.*)') + self.template = '{}VcCodeSwDefines{}\n' + + def replace_line(self, line): + """Replace include code switch file.""" + match = self.regex.match(line) + if match: + return self.template.format(match.group(1), match.group(3)) + return line + + +def update_files(files): + """Replace code in handwritten file.""" + for file_path in files: + PragmaReplacer().replace_file(file_path) + CodeSwitchReplacer().replace_file(file_path) + + +def update_test_files(files): + """Replace code in handwritten file.""" + for file_path in files: + CodeSwitchReplacer().replace_file(file_path) + + +def get_files_to_update(source_dir_name): + """Get files to update.""" + files = [os.path.join('./Models/SSPCECD/VcTqReq__DIESEL', source_dir_name, 'invTab2_UInt16_func.c'), + os.path.join('./Models/SSPCECD/VcCmbNOx__DIESEL', source_dir_name, 'NNEval15x8_func.c'), + os.path.join('./Models/SSPCECD/VcTqEff__DIESEL', source_dir_name, 'NNEval15x8_func.c')] + for path, _, filenames in os.walk(os.path.join(REPO_ROOT, 'Models', 'SSPDL')): + if path.endswith(os.path.join('Mdl', source_dir_name)) or\ + path.endswith(os.path.join('Mdl__denso', source_dir_name)): + for filename in filenames: + if (filename.endswith('.c') and not filename.endswith('Mdl.c')) or \ + (filename.endswith('.h') and not filename.endswith('Mdl.h')): + file_path = os.path.relpath(os.path.join(path, filename)) + files.append(file_path) + return files + + +def get_test_files_to_update(): + """Get files to update.""" + files = [] + for path, _, filenames in os.walk(os.path.join(REPO_ROOT, 'Models')): + for filename in filenames: + if filename.endswith('.py'): + file_path = os.path.relpath(os.path.join(path, filename)) + files.append(file_path) + return files + + +def main(): + """Replace incorrect pragmas in handwritten c-code.""" + files_to_update = get_files_to_update('pybuild_src') + update_files(files_to_update) + test_files_to_update = get_test_files_to_update() + update_test_files(test_files_to_update) + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/pybuild/html_report.py b/pybuild/html_report.py new file mode 100644 index 0000000..de98cc5 --- /dev/null +++ b/pybuild/html_report.py @@ -0,0 +1,133 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for html report generation.""" +from string import Template + + +class HtmlReport: + """Generate template html report. Extend this class to add content. + + TODO: Refactor common parts from derived report classes to this class. + """ + + __html_head = """ + + + + +$title + + +

    $title

    +""" + + __html_end = """ + +""" + + def __init__(self, title): + """Initialize report title. + + Args: + title (str): The report title + """ + super().__init__() + self._title = title + + def _gen_header(self): + """Generate html header.""" + return Template(self.__html_head).substitute(title=self._title) + + @staticmethod + def gen_contents(): + """Generate report contents. + + Override this method to add report contents. + Contents should start with a

    header. + """ + return '

    Template report

    ' + + def _gen_end(self): + """Generate the end of the body and html document.""" + return self.__html_end + + def generate_report_string(self): + """Generate a html report as string.""" + html = [] + html += self._gen_header() + html += self.gen_contents() + html += self._gen_end() + return ''.join(html) + + def generate_report_file(self, filename): + """Generate a html report and save to file.""" + with open(filename, 'w', encoding="utf-8") as fhndl: + fhndl.write(self.generate_report_string()) diff --git a/pybuild/interface/README.md b/pybuild/interface/README.md new file mode 100644 index 0000000..2ca7350 --- /dev/null +++ b/pybuild/interface/README.md @@ -0,0 +1,19 @@ +#Folder for abstract interfaces + +The idea is to be able to calculate an interface between any two things. + +Examples: +* Calculate the interface between a raster and the EMS. +* Calculate the interface between two rasters. + +This is done by specifying anything as something with insignals and outsignals. +Then we can match the insignals from one item with the outsignals of the other. +When we do this, it is important that the signal names correspond. +The insignal name in one item has to be exactly the same as the outsignal name in the other. +That is why we have the HALA, to translate between internal signal name and hal property name. + +We can also combine more than one interface to a domain. + +Examples of domains: +* All raster to raster interfaces -> internal domain +* All rasters communication with one hal -> that hals domain diff --git a/pybuild/interface/__init__.py b/pybuild/interface/__init__.py new file mode 100644 index 0000000..7ff1ad8 --- /dev/null +++ b/pybuild/interface/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""pybuild.interface.""" diff --git a/pybuild/interface/application.py b/pybuild/interface/application.py new file mode 100644 index 0000000..9f9712e --- /dev/null +++ b/pybuild/interface/application.py @@ -0,0 +1,511 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- + +"""Python module for abstracting Pybuild applications""" +from pathlib import Path +import json + +from pybuild.interface.base import BaseApplication, Signal, MultipleProducersError, Domain, Interface +from pybuild.lib import logger +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from pybuild.unit_configs import UnitConfigs +from pybuild.user_defined_types import UserDefinedTypes + + +LOGGER = logger.create_logger("application") + + +def get_raster_to_raster_interfaces(rasters): + """Generate a list of Interfaces for internal raster-to-raster signals. + + Args: + rasters (list): Input rasters (from app.get_rasters()) + Returns: + interfaces (list(interfaces)): List of unique raster-to-raster-interfaces. + """ + raster_pairs = [] + for current_raster in rasters: + for corresponding_raster in [r for r in rasters if r != current_raster]: + # If we have interface a_b, no need to produce b_a. + if (corresponding_raster, current_raster) not in raster_pairs: + raster_pairs.append((current_raster, corresponding_raster)) + + return [Interface(raster[0], raster[1]) for raster in raster_pairs] + + +def get_internal_domain(rasters): + """ Create an internal domain of signals + + Loops through all raster<->raster communications and adds them to a domain object + + Args: + rasters (list(Raster)): rasters to calculate communication for + Returns: + domain (Domain): signals belonging to the same domain + """ + internal = Domain() + internal.set_name("internal") + for interface in get_raster_to_raster_interfaces(rasters): + internal.add_interface(interface) + + return internal + + +def get_active_signals(signals, feature_cfg): + """ Filter out inactive signals. """ + LOGGER.debug('Filtering %s', signals) + return [signal for signal in signals if feature_cfg.check_if_active_in_config(signal.properties['configs'])] + + +class Application(BaseApplication): + """ Object for holding information about a pybuild project """ + def __init__(self): + self.name = None + self.pybuild = {'build_cfg': None, + 'feature_cfg': None, + 'unit_vars': {}} + self._insignals = None + self._outsignals = None + self._signals = None + self._raster_definitions = [] + self._services = None + self._methods = [] + self._enumerations = None + self._structs = None + + def parse_definition(self, definition): + """ Parse ProjectCfg.json, get code switch values and read config.json files. + Add the information to the object. + + Args: + definition (Path): Path to ProjectCfg.json + """ + self.pybuild['build_cfg'] = BuildProjConfig(str(definition)) + self.name = self.pybuild['build_cfg'].name + self.pybuild['feature_cfg'] = FeatureConfigs(self.pybuild['build_cfg']) + unit_cfg = UnitConfigs(self.pybuild['build_cfg'], self.pybuild['feature_cfg']) + self.pybuild['unit_vars'] = unit_cfg.get_per_unit_cfg() + self.pybuild['user_defined_types'] = UserDefinedTypes(self.pybuild['build_cfg'], unit_cfg) + + def get_domain_names(self): + """ Get domain names. """ + return self.pybuild['build_cfg'].device_domains.values() + + def get_domain_mapping(self): + """ Get device to signal domain mapping. """ + return self.pybuild['build_cfg'].device_domains + + def get_methods(self): + """ Get csp methods. """ + if self._signals is None: + self._get_signals() + return self._methods + + @property + def enumerations(self): + """ Get enumerations defined in the project. """ + if self._enumerations is None: + self._enumerations = self.pybuild['user_defined_types'].get_enumerations() + return self._enumerations + + @property + def structs(self): + """ Get structs defined in the project. """ + if self._structs is None: + self._structs = self.pybuild['user_defined_types'].get_structs() + return self._structs + + @property + def services(self): + """ Get interface to service mapping. """ + if self._services is None: + services_file = self.get_services_file() + self._services = self.pybuild['build_cfg'].get_services(services_file) + return self._services + + def get_service_mapping(self): + """ Get interface to service mapping. """ + return self.services + + def get_services_file(self): + """ Get path to file specifying interface to service mapping. """ + return self.pybuild['build_cfg'].services_file + + def get_name(self, definition): + """ Parse ProjectCfg.json and return the specified project name """ + if self.name is None: + return BuildProjConfig(str(definition)).name + return self.name + + def _get_signals(self): + """ Calculate parse all inport and outports of all models """ + self._insignals = set() + self._outsignals = set() + defined_ports = {'inports': set(), 'outports': set()} + for unit, data in self.pybuild['unit_vars'].items(): + self.parse_ports(data, defined_ports, self.pybuild['feature_cfg'], unit) + self.parse_csp_methods(data, self.pybuild['feature_cfg'], unit) + + def parse_ports(self, port_data, defined_ports, feature_cfg, unit): + """ Parse ports for one model, based on code switch values. + Modifies the defined_ports dict and the object. + + Args: + port_data (dict): port data for a model/unit + defined_ports (set): all known signals + feature_cfg (FeatureConfigs): pybuild parsed object for code switches + unit (string): Name of model/unit + """ + if self._signals is None: + self._signals = {} + for port_type, outport in {'outports': True, 'inports': False}.items(): + for port_name, data in port_data.get(port_type, {}).items(): + # Get what signals we are dealing with + if not feature_cfg.check_if_active_in_config(data['configs']): + continue + if port_name not in self._signals: + signal = Signal(port_name, self) + self._signals.update({port_name: signal}) + else: + signal = self._signals[port_name] + # Add information about which models are involved while we are reading it + if outport: + try: + signal.set_producer(unit) + except MultipleProducersError as mpe: + LOGGER.debug(mpe.message) + signal.force_producer(unit) + self._outsignals.add(port_name) + else: + signal.consumers = unit + self._insignals.add(port_name) + defined_ports[port_type].add(port_name) + + def parse_csp_methods(self, port_data, feature_cfg, unit): + """ Parse csp methods. + + Args: + port_data (dict): port data for a model/unit. + feature_cfg (FeatureConfigs): pybuild parsed object for code switches + unit (string): Name of model/unit + """ + if self._signals is None: + self._signals = {} + methods = port_data.get('csp', {}).get('methods', {}) + for method_name, data in methods.items(): + if feature_cfg.check_if_active_in_config(data['configs']): + method = Method(self, unit) + method.parse_definition((method_name, data)) + self._methods.append(method) + + def get_signal_properties(self, signal): + """ Get properties for the signal from pybuild definition. + + Args: + signal (Signal): Signal object + Returns: + properties (dict): Properties of the signal in pybuild + """ + # Hack: Take the first consumer or producer if any exists + for producer in signal.producer: + return self.pybuild['unit_vars'][producer]['outports'][signal.name] + for consumer in signal.consumers: + return self.pybuild['unit_vars'][consumer]['inports'][signal.name] + return {} + + def get_rasters(self): + """ Get rasters parsed from pybuild. + + Returns: + rasters (list): rasters parsed from pybuild + """ + if self._signals is None: + self._get_signals() + raster_definition = self.pybuild['build_cfg'].get_units_raster_cfg() + rasters = [] + for raster_field, raster_content in raster_definition.items(): + if raster_field in ['SampleTimes']: + continue + for name, content in raster_content.items(): + if name in ['NoSched']: + continue + raster = Raster(self) + raster.parse_definition((name, content, self._signals)) + rasters.append(raster) + return rasters + + def get_models(self): + """ Get models and parse their config files. + + Returns: + models (list(Model)): config.jsons parsed + """ + rasters = self.get_rasters() + # Since one model can exist in many rasters. Find all unique model names first. + cfg_dirs = self.pybuild['build_cfg'].get_unit_cfg_dirs() + model_names = set() + for raster in rasters: + model_names = model_names.union(raster.models) + models = [] + for model_name in model_names: + if model_name not in cfg_dirs: + LOGGER.debug("%s is generated code. It does not have a config.", model_name) + continue + model = Model(self) + cfg_dir = cfg_dirs[model_name] + config = Path(cfg_dir, f'config_{model_name}.json') + model.parse_definition((model_name, config)) + models.append(model) + return models + + def get_translation_files(self): + """ Find all yaml files in translation file dirs. + + Returns: + translation_files (list(Path)): translation files + """ + translation_files = [] + cfg_dirs = self.pybuild['build_cfg'].get_translation_files_dirs() + for cfg_dir in cfg_dirs.values(): + cfg_path = Path(cfg_dir) + translation_files.extend(cfg_path.glob('*.yaml')) + translation_files = list(set(translation_files)) + return translation_files + + +class Raster(BaseApplication): + """ Object for holding information about a raster """ + def __init__(self, app): + """Construct a new Raster object. + + Args: + app (pybuild.interface.application.Application): Pybuild project raster is part of + """ + self.app = app + self.name = str() + self._insignals = None + self._outsignals = None + self._available_signals = None + self.models = set() + + def parse_definition(self, definition): + """ Parse the definition from pybuild. + + Args: + definition (tuple): + name (string): Name of the raster + content (list): Models in the raster + app_signals (dict): All signals in all rasters + """ + self.name = definition[0] + self.models = set(definition[1]) + self._available_signals = definition[2] + + def _get_signals(self): + """ Add signals from the project to the raster if they are used here + + Modifies the object itself. + """ + self._insignals = set() + self._outsignals = set() + self._signals = {} + if self._available_signals is None: + return + for signal in self._available_signals.values(): + for consumer in signal.consumers: + if consumer in self.models: + self._signals.update({signal.name: signal}) + self._insignals.add(signal.name) + if isinstance(signal.producer, set): + for producer in signal.producer: + if producer in self.models: + self._signals.update({signal.name: signal}) + self._outsignals.add(signal.name) + else: + if signal.producer in self.models: + self._signals.update({signal.name: signal}) + self._outsignals.add(signal.name) + + def get_signal_properties(self, signal): + """ Get properties for the signal from pybuild definition. + + Args: + signal (Signal): Signal object + Returns: + properties (dict): Properties of the signal in pybuild + """ + for producer in signal.producer: + if producer in self.app.pybuild['unit_vars']: + return self.app.get_signal_properties(signal) + return {} + + +class Model(BaseApplication): + """ Object for holding information about a model """ + def __init__(self, app): + self.app = app + self.name = str() + self.config = None + self._insignals = None + self._outsignals = None + self._signal_specs = None + + def get_signal_properties(self, signal): + """ Get properties for the signal from pybuild definition. + + Args: + signal (Signal): Signal object + Returns: + properties (dict): Properties of the signal in pybuild + """ + if self._signal_specs is None: + self._get_signals() + if signal.name in self._signal_specs: + return self._signal_specs[signal.name] + return {} + + def _get_signals(self): + """ Add signals from the project to the model if they are used here + + Modifies the object itself. + Entrypoint for finding signals from the base class. + """ + self._insignals = set() + self._outsignals = set() + self._signals = {} + self._signal_specs = {} + self._parse_unit_config(self.config) + + def _parse_unit_config(self, path): + """ Parse a unit config file. + + Broken out of get_signals to be recursive for included configs. + """ + cfg = self._load_json(path) + for signal_spec in cfg['inports'].values(): + signal = Signal(signal_spec['name'], self) + self._insignals.add(signal.name) + self._signals.update({signal.name: signal}) + self._signal_specs[signal.name] = signal_spec + for signal_spec in cfg['outports'].values(): + signal = Signal(signal_spec['name'], self) + self._outsignals.add(signal.name) + self._signals.update({signal.name: signal}) + self._signal_specs[signal.name] = signal_spec + for include_cfg in cfg.get('includes', []): + LOGGER.debug('%s includes %s in %s', self.name, include_cfg, path.parent) + include_path = Path(path.parent, f'config_{include_cfg}.json') + self._parse_unit_config(include_path) + + @staticmethod + def _load_json(path): + """ Small function that opens and loads a json file. + + Exists to be mocked in unittests + """ + with open(path, encoding="utf-8") as fhndl: + return json.load(fhndl) + + def parse_definition(self, definition): + """ Parse the definition from pybuild. + + Args: + definition (tuple): + name (string): Name of the model + configuration (Path): Path to config file + """ + self.name = definition[0] + self.config = definition[1] + self._get_signals() + + +class Method(BaseApplication): + """ Object for holding information about a csp method call """ + def __init__(self, app, unit): + """Construct a new Method object. + + Args: + app (pybuild.interface.application.Application): Pybuild project raster is part of. + unit (str): Model that the method is defined in. + """ + self.app = app + self.unit = unit + self.name = str() + self.namespace = str() + self.adapter = str() + self.description = None + self._signals = {} + self._insignals = set() + self._outsignals = set() + self._primitives = {} + self._properties = {} + + def parse_definition(self, definition): + """ Parse the definition from pybuild. + + Args: + definition (tuple): + name (string): Name of the model + configuration (dict): Configuration of method + """ + name = definition[0] + configuration = definition[1] + self.name = name + self.adapter = configuration['adapter'] + self.namespace = configuration['namespace'] + self._primitives[name] = configuration['primitive'] + if 'description' in configuration: + self.description = configuration['description'] + signals = configuration.get('ports', {}) + outsignals = signals.get('out', {}) + for signal_name, signal_data in outsignals.items(): + signal = self._add_signal(signal_name) + signal.consumers = name + signal.set_producer(name) + self._primitives[signal_name] = signal_data['primitive'] + self._properties[signal_name] = signal_data + self._outsignals.add(signal_name) + insignals = signals.get('in', {}) + for signal_name, signal_data in insignals.items(): + signal = self._add_signal(signal_name) + signal.consumers = name + signal.set_producer(name) + self._insignals.add(signal_name) + self._primitives[signal_name] = signal_data['primitive'] + self._properties[signal_name] = signal_data + + def _add_signal(self, signal_name): + """ Add a signal used by the method. + + Args: + signal_name (str): Name of the signal + """ + if signal_name not in self._signals: + signal = Signal(signal_name, self) + self._signals.update({signal_name: signal}) + else: + signal = self._signals[signal_name] + return signal + + def get_signal_properties(self, signal): + """ Get properties for the signal from csp method configuration. + + Args: + signal (Signal): Signal object + Returns: + properties (dict): Properties of the signal in pybuild + """ + return self._properties[signal.name] + + def get_primitive(self, primitive_name): + """ Get primitive. + + Args: + primitive_name (str): Name of primitive part + Returns: + primitive (str): Primitive + """ + return self._primitives[primitive_name] diff --git a/pybuild/interface/base.py b/pybuild/interface/base.py new file mode 100644 index 0000000..487f2fd --- /dev/null +++ b/pybuild/interface/base.py @@ -0,0 +1,500 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Python module used for abstracting an application that should be interfacing others.""" +from abc import abstractmethod +from ruamel.yaml import YAML +from pybuild.lib import logger + +LOGGER = logger.create_logger('base') + + +def filter_signals(signals, domain): + """ Take a list of signals and remove all domains belonging to a domain + + If the signal is part of the domain, it is not part of the resulting list + + Arguments: + signals (list(Signal)): signals to filter + domain (Domain): domain that the signals should not be part of + """ + filtered_signals = [] + for signal in signals: + if signal.name not in domain.signals: + filtered_signals.append(signal) + return filtered_signals + + +class MultipleProducersError(Exception): + """Error when setting a producer and there already exists one""" + def __init__(self, signal, old_producer, new_producer): + """Set error message + + Args: + signal (Signal): Signal object + old_producer (BaseApplication): Producer already registered + new_producer (BaseApplication): Producer attempted to be registered + """ + super().__init__() + self.message = (f"{signal.name}:" + f" Attempting to set producer {new_producer}" + f" when {old_producer} is already set") + + +class BaseApplication: + """Base application to build other adapters on""" + name = str() + _signals = None + node = str() # Used to calculate interface + + read_strategies = { + "Always", + "OnChanged", + "OnUpdated" + } + + def __repr__(self): + """String representation for logging and debugging + + Returns: + repr (string): Name of the application, the number of insignals and outsignals + """ + return f"<{self.name}" \ + f" insignals:{len(self.insignals)}" \ + f" outsignals:{len(self.outsignals)}>" + + def parse_signals(self): + """API interface to read all signals in any child object""" + self._get_signals() + + @property + def insignals(self): + """ Insignals to the raster. + Calculated as all read ports - all written ports + + Returns: + signals (list): List of Signal objects. + """ + if self._insignals is None: + self._get_signals() + return [self._signals[port] for port in self._insignals - self._outsignals] + + @property + def outsignals(self): + """ All outports. + Since we might consume some of the signals that should also be sent elsewhere, + we do not remove internally consumed signals. + + Returns: + signals (list): List of Signal objects. + """ + if self._outsignals is None: + self._get_signals() + return [self._signals[port] for port in self._outsignals] + + @property + def signals(self): + """API interface property in any child object + + All cached signals. + If no cache exists, reads all signals and save to cache. + + Returns: + signals (list): Signal objects + """ + if self._signals is None: + self.parse_signals() + return self._signals.values() + + @abstractmethod + def _get_signals(self): + """Stub to implement in child object""" + + @abstractmethod + def get_signal_properties(self, signal): + """Stub to implement in child object + + Ideally, this should be moved to the signal. + Currently, getting the properties depends on how we read and define the signals. + """ + + @abstractmethod + def parse_definition(self, definition): + """Stub for parsing a defintion after the object has been initialized. + + Raises NotImplementedError if called without being implemented. + + Args: + definition: Definition of the Application. Type depends on the application. + """ + raise NotImplementedError('This is a stub') + + +class Signal: + """Signal object + + The signal should behave the same way independently of where we define it. + """ + def __repr__(self): + """String representation for logging and debugging + + Returns: + repr (string): Name of the application, the number of insignals and outsignals + """ + return (f"<{self.name} in {self.applications}" + f" producer:{self.producer}" + f" consumers:{self.consumers}>") + + def __init__(self, name, application): + """Define base properties of the signal object + + The application object is used to read properties of a signal. + TODO: Do this when we define the signal and add properties known in other + systems when we encounter them. + + Args: + name (string): Signal name + application (BaseApplication): Application defining the signal + """ + self.name = name + self.applications = {} # Add applications to a dict to prevent duplicates + if application is not None: + self.applications[application.name] = application + self._consumers = set() + self._producer = None + + def add_application(self, application): + """Add an application to find properties from + + Args: + application (BaseApplication): Application to read properties from + """ + if application.name in self.applications: + return + self.applications[application.name] = application + + @property + def consumers(self): + """Get all consumers of a signal + + Returns: + consumers (set): All consumers of a signal + """ + if isinstance(self._consumers, set): + return self._consumers + return set() + + @consumers.setter + def consumers(self, consumers): + """Set consumers of a signal + + If the consumers is a list or set, iterate over each consumer + Otherwise, add the consumer to the set of consumers + + Args: + consumers (list/set/string): consumer(s) of a signal + """ + if isinstance(consumers, (list, set)): + for consumer in consumers: + self._consumers.add(consumer) + else: + self._consumers.add(consumers) + + @property + def producer(self): + """Get the producer of a signal + + Since we have some strange signals with multiple producers, + such as counters for dep, this returns a set. + Returns: + producer (set): Producer(s) of a signal + """ + if isinstance(self._producer, set): + return self._producer + return set() + + @producer.setter + def producer(self, producer): + """Set producer of a signal + + Args: + producer (string/set): Name of the producer + """ + if isinstance(producer, set): + self._producer = producer + else: + self._producer = {producer} + + def set_producer(self, producer): + """Set producer of a signal + + If there already is a registered producer of the signal, + raise MultipleProducersError + + This can be expected and force_producer can be called to override this. + That must be explicit in each instance. + + Args: + producer (string): Name of the producer + application (BaseApplication): Application defining the signal. Optional + """ + if isinstance(producer, set): + if self._producer is not None and producer - self._producer: + raise MultipleProducersError(self, self._producer, producer) + self.producer = producer + else: + if self._producer is not None \ + and isinstance(producer, str) \ + and producer not in self._producer: + raise MultipleProducersError(self, self._producer, producer) + self.producer = {producer} + + def force_producer(self, producer): + """Forcefully update add producers of a signal + + This is needed since we have some signals that are written by multiple model + Args: + producers (string): Producer of a signal + application (BaseApplication): Application defining the signal. Optional + """ + + self._producer.add(producer) + + @property + def properties(self): + """Properties of a signal + + Currently not homogenized. + Therefore we read the properties from the application that defined the signal. + + Returns: + properties (dict): properties of a signal + """ + properties = {} + for application in self.applications.values(): + LOGGER.debug('Getting properties for %s from %s', self.name, application.name) + application_properties = application.get_signal_properties(self) + LOGGER.debug(application_properties) + for key, value in application_properties.items(): + LOGGER.debug('Looking at %s: %s', key, value) + if key in properties and value != properties[key]: + LOGGER.debug('Signal %s already has %s with value %s, ignoring %s from %s', + self.name, key, properties[key], value, application.name) + continue + properties[key] = value + return properties + + +class Interface: + """Interface between two objects""" + def __repr__(self): + """String representation for logging and debugging + + Returns: + repr (string): Name of the interface, and the length of received and transmitted signals + """ + return (f"<{self.name}" + f" a->b:{len(self.get_directional_signals(self.current, self.corresponding))}" + f" b->a:{len(self.get_directional_signals(self.corresponding, self.current))}>") + + def debug(self): + """Debug an interface object to stdout""" + LOGGER.info('name: %s', self.name) + for signal in self.get_directional_signals(self.current, self.corresponding): + LOGGER.info('insignal: %s', signal) + for signal in self.get_directional_signals(self.corresponding, self.current): + LOGGER.info('outsignal: %s', signal) + + def __init__(self, current, corresponding): + """Create the interface object + + Args: + current (BaseApplication): Primary object of an interface + corresponding (BaseApplication): Secondary object of an interface + """ + self.name = current.name + '_' + corresponding.name + self.current = current + self.corresponding = corresponding + + @staticmethod + def get_directional_signals(producer, consumer): + """Get signals going from producer to consumer + + Args: + producer (BaseApplication): producer of the signals + consumer (BaseApplication): consumer of the signals + Returns: + signals (list): Signals sent from producer and received in consumer + """ + outsignals = {signal.name: signal for signal in producer.outsignals} + signals = [] + for signal in consumer.insignals: + if signal.name in outsignals: + signal.set_producer(outsignals[signal.name].producer) + signal.add_application(producer) + signal.add_application(consumer) + signals.append(signal) + return signals + + def get_produced_signals(self, producer_name): + """Get signals going from producer to consumer + + This function can be used if you are lacking some objects + + Args: + consumer_name (string): name of the consumer of the signals + Returns: + signals (list): Signals sent from producer and received in consumer + """ + if producer_name == self.current.name: + consumer = self.corresponding + producer = self.current + elif producer_name == self.corresponding.name: + consumer = self.current + producer = self.corresponding + else: + LOGGER.error('%s not in [%s, %s]', + producer_name, + self.current.name, + self.corresponding.name) + return self.get_directional_signals(producer, consumer) + + def get_consumed_signals(self, consumer_name): + """Get signals going from producer to consumer + + This function can be used if you are lacking some objects + + Args: + consumer_name (string): name of the consumer of the signals + Returns: + signals (list): Signals sent from producer and received in consumer + """ + if consumer_name == self.current.name: + consumer = self.current + producer = self.corresponding + elif consumer_name == self.corresponding.name: + consumer = self.corresponding + producer = self.current + else: + LOGGER.error('%s not in [%s, %s]', + consumer_name, + self.current.name, + self.corresponding.name) + return self.get_directional_signals(producer, consumer) + + +class Domain: + """Domain with interacting interfaces""" + def __repr__(self): + """String representation for logging and debugging + + Returns: + repr (string): Name of the domain, and all clients for that domain + """ + return f"<{self.name}: {self.clients}>" + + def __init__(self): + """Initialize the object""" + self.name = '' + self.signals = {} + self.clients = set() + self._clients = {} + + def set_name(self, name): + """Set the name of the domain + + Args: + name (string): Name of the domain + """ + self.name = name + + def add_interface(self, interface): + """Add an interface to a domain + + Args: + interface (Interface): Interface object + """ + self._process_interface(interface) + + def _process_interface(self, interface): + """Process interface to add signals to the domain + + Args: + interface (Interface): Interface object + """ + for signal in interface.get_directional_signals(interface.current, interface.corresponding): + self._process_signal(signal.name, interface.current, interface.corresponding) + for signal in interface.get_directional_signals(interface.corresponding, interface.current): + self._process_signal(signal.name, interface.corresponding, interface.current) + + def _process_signal(self, signal_name, producer, consumer): + """Process signal to add to the domain + + Args: + signal_name (string): Name of the signal + consumer (BaseApplication): Consumer application of the signal + producer (BaseApplication): Producer application of the signal + """ + if signal_name not in self.signals: + self.signals[signal_name] = Signal(signal_name, producer) + self.signals[signal_name].consumers = consumer.name + self.signals[signal_name].add_application(producer) + self.signals[signal_name].add_application(consumer) + signal = self.signals[signal_name] + if producer.name not in self.clients: + self.clients.add(producer.name) + self._clients[producer.name] = {'producer': [], 'consumer': []} + self._clients[producer.name]['producer'].append(signal) + if consumer.name not in self.clients: + self.clients.add(producer.name) + self._clients[producer.name] = {'producer': [], 'consumer': []} + self._clients[producer.name]['consumer'].append(signal) + signal.consumers = consumer.name + try: + signal.producer = producer.name + except MultipleProducersError as mpe: + LOGGER.debug(mpe.message) + + def create_groups(self): + """Create groups of signals going from each producer + + Returns: + signal_groups (dict): Signal groups + """ + signal_groups = {} + for signal in self.signals.values(): + # Producer is always a set, to handle pass-through signals + for producer in signal.producer - set(signal_groups.keys()): + signal_groups[producer] = [] + for producer in signal.producer: + signal_groups[producer].append(signal) + return signal_groups + + def create_selective_groups(self, a_names, b_names): + """Create groups for the a_list communicating with the b_names + + Returns: + signal_groups (dict): Signal groups + """ + signal_groups = {name: {'consumer': [], 'producer': []} for name in a_names} + for signal in self.signals.values(): + for producer in set(signal.producer): + if producer in a_names and signal.consumers & b_names: + signal_groups[producer]['producer'].append(signal) + for consumer in signal.consumers: + if consumer in a_names and set(signal.producer) & a_names: + signal_groups[consumer]['consumer'].append(signal) + return signal_groups + + @staticmethod + def to_yaml(spec, output): + """Writes spec to yaml file + + Args: + spec (dict): data for the yaml + output (Path): file to write to + """ + with open(output, 'w', encoding="utf-8") as yaml_file: + yaml = YAML() + yaml.dump(spec, yaml_file) diff --git a/pybuild/interface/csp_api.py b/pybuild/interface/csp_api.py new file mode 100644 index 0000000..7987475 --- /dev/null +++ b/pybuild/interface/csp_api.py @@ -0,0 +1,490 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for CSP API abstraction.""" + +import enum +from ruamel.yaml import YAML +from abc import abstractmethod +from pybuild.interface.base import BaseApplication, Signal +from pybuild.lib import logger + +LOGGER = logger.create_logger("service") + + +class MissingApi(Exception): + """Exception to raise when api is missing""" + def __init__(self, api, map_file): + self.message = f"Api {api} missing from {map_file}" + + +class BadYamlFormat(Exception): + """Exception to raise when in/out signal is not defined.""" + def __init__(self, api, signal_name): + self.message = f"Signal {signal_name} for {api} should be set as insignal or outsignal." + + +class CspApi(BaseApplication): + """Abstraction for HAL and SFW""" + position = enum.Enum( + 'Position', + names=[ + "property_name", + "property_type", + "variable_type", + "offset", + "factor", + "default", + "length", + "min", + "max", + "enum", + "init", + "description", + "unit", + "endpoint", + "api", + "variant", + "strategy", + "debug", + "dependability" + ] + ) + + def __init__(self, base_application, read_strategy='Always'): + """Create the interface object + + Args: + base_application (BaseApplication): Primary object of an interface + Usually a raster, but can be an application or a model too. + """ + self.name = "" + self.translations = {} + self.api_side = False + # we only care when generating models for csp. + self.filter = None + self.signal_names = { + "api": {"insignals": set(), "outsignals": set()}, + "app": {"insignals": set(), "outsignals": set()}, + } + self.base_application = base_application + self.map_file = self.get_map_file() + self.api_map = self.get_map() + self.translations_files = [] + self.signal_primitives_list = [] + self.default_read_strategy = read_strategy + + def get_signal_properties(self, signal): + """Get signal properties for signal + + Calls self.base_application to get signal properties + + Args: + signal (Signal): Signal to get properties for + """ + self.base_application.get_signal_properties(signal) + + def _get_signals(self): + """Read signals""" + self.parse_definition(self.translations_files) + + @property + def insignals(self): + return self.get_signals(self.hal_name, 'insignals') + + @property + def outsignals(self): + return self.get_signals(self.hal_name, 'outsignals') + + def get_signals(self, api, signal_type='insignals'): + """Get signals to and from an api abstraction + + self.api_side configures if we look at the api side. + If it is set to False, we look at the application side. + + Args: + api (str): Name of the api + signal_type (str): insignals or outsignals + Returns: + signals (list): Signals in the interface + """ + if self.api_side: + signal_names = self.signal_names['api'][signal_type] + else: + signal_names = self.signal_names['app'][signal_type] + + signals = [] + for signal_name, specs in self.translations.items(): + for spec in specs: + signal = None + if api is not None: + if spec['api'] == api: + if self.api_side: + if spec['property'] in signal_names: + signal = Signal(spec['property'], self) + else: + if signal_name in signal_names: + signal = Signal(signal_name, self) + else: + if self.api_side: + if spec['property'] in signal_names: + signal = Signal(spec['property'], self) + else: + if signal_name in signal_names: + signal = Signal(signal_name, self) + if signal is not None: + signals.append(signal) + return signals + + def clear_signal_names(self): + """Clear signal names + + Clears defined signal names (but not signal properties). + """ + self.signal_names = { + "api": {"insignals": set(), "outsignals": set()}, + "app": {"insignals": set(), "outsignals": set()}, + } + + def parse_definition(self, definition): + """Parses all definition files + + Args: + definition (list(Path)): Definition files + """ + for translation in definition: + raw = self.read_translation(translation) + self.extract_endpoint_definitions(raw) + + @staticmethod + def get_api_name(api_name): + """Return the api name + + Args: + api_name (str): Name of the api + + Returns: + (str): Name of the api + """ + return api_name + + def verify_api(self, api_name): + """Verify that the api is in the map + + Args: + api_name (str): Name of the api + """ + if api_name not in self.api_map: + raise MissingApi(api_name, self.map_file) + + def add_signals(self, signals, signal_type='insignals', properties=None): + """Add signal names and properties to already set ones + + Args: + signals (list(Signals)): Signals to use + signal_type (str): 'insignals' or 'outsignals' + properties (list(str)): signal definition properties, default = [] + """ + opposite = {'insignals': 'outsignals', 'outsignals': 'insignals'} + api_type = opposite[signal_type] + properties = [] if properties is None else properties + for signal in signals: + LOGGER.debug("Adding signal: %s", signal) + temp_set = set() + for translation in self.translations.get(signal.name, []): + temp_list = list(translation) + api_name = translation[self.position.api.value] + variant_name = translation[self.position.variant.value] + endpoint = translation[self.position.endpoint.value] + api_signal = translation[self.position.property_name.value] + self.check_signal_property(api_name, variant_name, endpoint, + api_signal, signal_type) + self.signal_names['api'][api_type].add(api_signal) + for enum_property in properties: + LOGGER.debug("Modifying property: %s", enum_property) + value = signal.properties[enum_property["source"]] + if value == "-": + value = enum_property["default"] + temp_list[ + self.position[enum_property["destination"]].value + ] = value + temp_set.add(tuple(temp_list)) + self.translations[signal.name] = temp_set + self.signal_names['app'][signal_type].add(signal.name) + self.check_endpoints() + LOGGER.debug('Registered signal names: %s', self.signal_names) + + def check_signal_property(self, api, variant, endpoint, property_name, signal_type): + """Check if we have only one signal written for the same property. + + Args: + api (str): interface name + variant (str): variant value. "properties" or "methods" for service + "hals" for hal + endpoint (str): signal endpoint + property_name (str): signal property + signal_type (str): 'insignals' or 'outsignals' + """ + primitive_value = "" + for value in [api, variant, endpoint, property_name]: + if value: + if primitive_value == "": + primitive_value = value + else: + primitive_value = primitive_value + '.' + value + if primitive_value == "": + raise Exception("The primitive does not contain any value!") + directional_primitive = f"{primitive_value}.{signal_type}" + self.check_property(directional_primitive, signal_type) + + def check_property(self, property_spec, signal_type): + """Check if we have only one signal written for the same property. + + Args: + property_spec (str): property specification + signal_type (str): 'insignals' or 'outsignals' + """ + if property_spec in self.signal_primitives_list: + error_msg = (f"You can't write {property_spec} as " + f"{signal_type} since this primitive has been used." + " Run model_yaml_verification to identify exact models.") + raise Exception(error_msg) + self.signal_primitives_list.append(property_spec) + + @abstractmethod + def check_endpoints(self): + """Should be implemented by subclasses.""" + + @staticmethod + def read_translation(translation_file): + """Read specification of the format: + + service: + interface: + properties: + - endpoint_name: + - signal: name + property: name + - signal: name + property: name + hal: + hal_name: + - primitive_endpoint: + - insignal: name + hal_name: + - struct_endpoint: + - insignal: name1 + property: member1 + - insignal: name2 + property: member2 + ecm: + - signal: name + signals: + tvrl: + - signal: name + property: can_name + offset: offset + factor: scaling + + Args: + translation_file (Path): file with specs + + Returns: + yaml_data (dict): Loaded YAML data as dict, empty if not found + """ + if not translation_file.is_file(): + LOGGER.warning("No file found for %s", translation_file) + return {} + with open(translation_file, encoding="utf-8") as translation: + yaml = YAML(typ='safe', pure=True) + raw = yaml.load(translation) + return raw + + def parse_api_definitions(self, api_definitions): + """Parses group definitions. + + Args: + api_definitions (dict): endpoints in parsed yaml file. + """ + for api_from_spec, definition in api_definitions.items(): + for variant, variant_endpoints in self.extract_definition(definition).items(): + for endpoints in variant_endpoints: + for endpoint, signals in endpoints.items(): + self.parse_property_definitions({api_from_spec: signals}, endpoint, variant) + + def parse_property_definitions(self, endpoint_definitions, endpoint, variant): + """Parse signal definitions. + + Args: + endpoint_definitions (dict): parsed yaml file. + endpoint (str): Name of the endpoint to use + """ + def _get_property_name(specification): + """ Handle cases when there are no propery name. + + If there is no property name, the "group" is set to the signal. + This should be used when the property is not a struct in the interface api. + + Args: + specification (dict): signal specification + Returns: + property_name (str): name of the potential internal property + """ + property_name = specification.get('property', '') + if not property_name: + return None + return property_name + + enumerations = self.base_application.enumerations + + for api, specifications in endpoint_definitions.items(): + self.verify_api(api) + for specification in specifications: + in_out_signal = [key for key in specification.keys() if 'signal' in key] + base_signal = None + signal_name = None + if "in" in in_out_signal[0]: + for signal in self.base_application.insignals: + if signal.name == specification["insignal"]: + base_signal = signal + signal_name = signal.name + elif "out" in in_out_signal[0]: + for signal in self.base_application.outsignals: + if signal.name == specification["outsignal"]: + base_signal = signal + signal_name = signal.name + else: + raise BadYamlFormat(api, specification[in_out_signal[0]]) + if base_signal is None: + continue + base_properties = self.base_application.get_signal_properties( + base_signal + ) + + if base_properties["type"] in enumerations: + underlying_data_type = enumerations[base_properties['type']]['underlying_data_type'] + interface_type = underlying_data_type + if 'init' not in specification: + if enumerations[base_properties['type']]['default_value'] is not None: + init_value = enumerations[base_properties['type']]['default_value'] + else: + LOGGER.warning('Initializing enumeration %s to "zero".', base_properties['type']) + init_value = [ + k for k, v in enumerations[base_properties['type']]['members'].items() if v == 0 + ][0] + else: + init_value = specification.get("init", 0) + else: + interface_type = base_properties["type"] + init_value = specification.get("init", 0) + + if "out" in in_out_signal[0] and "strategy" in specification: + LOGGER.warning('Cannot set read strategy for outsignal %s, using "Always".', signal_name) + strategy = "Always" + else: + strategy = specification.get("strategy", self.default_read_strategy) + if strategy not in self.read_strategies: + LOGGER.warning('Invalid strategy %s, using "Always" instead.', strategy) + strategy = self.default_read_strategy + + if signal_name not in self.translations: + self.translations[signal_name] = set() + self.translations[signal_name].add( + ( + "enum_0", # Enum starts at position 1. + _get_property_name(specification), + interface_type, + specification.get("type"), + specification.get("offset"), + specification.get("factor"), + specification.get("default"), + specification.get("length"), + specification.get("min"), + specification.get("max"), + specification.get("enum"), + init_value, + specification.get("description"), + specification.get("unit"), + endpoint, + api, + variant, + strategy, + specification.get("debug", False), + specification.get("dependability", False) + ) + ) + + def spec_to_dict(self, signal_spec, signal_name): + """Convert signal specification to dict + + Args: + signal_spec (dict): signal specification + signal_name (str): signal name + Returns: + (dict): signal specification as dict + """ + return { + 'variable': signal_name, + 'variable_type': signal_spec[self.position.variable_type.value], + 'property': signal_spec[self.position.property_name.value], + 'property_type': signal_spec[self.position.property_type.value], + "default": signal_spec[self.position.default.value], + "length": signal_spec[self.position.length.value], + 'offset': signal_spec[self.position.offset.value], + 'factor': signal_spec[self.position.factor.value], + 'range': { + 'min': signal_spec[self.position.min.value], + 'max': signal_spec[self.position.max.value] + }, + 'init': signal_spec[self.position.init.value], + 'description': signal_spec[self.position.description.value], + 'unit': signal_spec[self.position.unit.value], + 'endpoint': signal_spec[self.position.endpoint.value], + 'api': self.get_api_name(signal_spec[self.position.api.value]), + 'variant': signal_spec[self.position.variant.value], + 'strategy': signal_spec[self.position.strategy.value], + 'debug': signal_spec[self.position.debug.value], + 'dependability': signal_spec[self.position.dependability.value] + } + + def to_dict(self, client="app"): + """Method to generate dict to be saved as yaml + + Returns: + spec (dict): Signalling specification + """ + spec = {"consumer": [], "producer": []} + direction = { + "app": ["consumer", "producer"], + "api": ["producer", "consumer"]} + for signal_name, signal_spec in self._generator(self.signal_names["app"]["insignals"]): + spec[direction[client][0]].append( + self.spec_to_dict(signal_spec, signal_name) + ) + for signal_name, signal_spec in self._generator(self.signal_names["app"]["outsignals"]): + spec[direction[client][1]].append( + self.spec_to_dict(signal_spec, signal_name) + ) + return spec + + def _generator(self, signal_names, unique_names=False): + """Iterate over signals for allowed services + + If unique_names is True, the iterator does not yield the same signal twice + if unique_names is False, it yields each allowed signal spec with the signal name + + Args: + signal_names (list): allowed signals + Yields: + name (str): Name of the signal + specification (dict): signal specification for allowed service + """ + for signal_name, specifications in ( + (name, spec) for name, spec in sorted( + self.translations.items()) + if name in signal_names): + for specification in specifications: + if unique_names: + yield signal_name, specification + break + yield signal_name, specification diff --git a/pybuild/interface/device_proxy.py b/pybuild/interface/device_proxy.py new file mode 100644 index 0000000..70e824e --- /dev/null +++ b/pybuild/interface/device_proxy.py @@ -0,0 +1,677 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Python module used for reading device proxy arxml:s""" +from ruamel.yaml import YAML +import enum +from pybuild.interface.base import BaseApplication, Signal +from pybuild.lib import logger + +LOGGER = logger.create_logger("device_proxy") + + +class MissingDevice(Exception): + """Exception to raise when device is missing""" + def __init__(self, dp): + self.message = f"Device proxy {dp} missing from deviceDomains.json" + + +class BadYamlFormat(Exception): + """Exception to raise when in/out signal is not defined.""" + def __init__(self, message): + self.message = message + + +class DPAL(BaseApplication): + """Device Proxy abstraction layer""" + + dp_position = enum.Enum( + "Position", + names=[ + "domain", + "property", + "variable_type", + "property_interface_type", + "property_manifest_type", + "offset", + "factor", + "default", + "length", + "min", + "max", + "enum", + "init", + "description", + "unit", + "group", + "strategy", + "debug", + "dependability", + "port_name" + ], + ) + + def __repr__(self): + """String representation of DPAL""" + return ( + f"" + ) + + def __init__(self, base_application): + """Create the interface object + + Args: + base_application (BaseApplication): Primary object of an interface + Usually a raster, but can be an application or a model too. + """ + self.name = "" + self.dp_translations = {} + # We do not care about domain when looking from a project perspective, + # we only care when generating manifests for csp. + self.domain_filter = None + self.signal_names = { + "dp": {"insignals": set(), "outsignals": set()}, + "other": {"insignals": set(), "outsignals": set()}, + } + self.e2e_sts_signals = set() + self.base_application = base_application + self.translations_files = [] + self.device_domain = base_application.get_domain_mapping() + self.signal_primitives_list = [] + + def clear_signal_names(self): + """Clear signal names + + Clears defined signal names (but not signal properties). + """ + self.signal_names = { + "dp": {"insignals": set(), "outsignals": set()}, + "other": {"insignals": set(), "outsignals": set()}, + } + + def add_signals(self, signals, signal_type="insignal", properties=[]): + """Add signal names and properties + + Args: + signals (list(Signals)): Signals to use + signal_type (str): 'insignals' or 'outsignals' + properties (list(str)): signal definition properties, default = [] + """ + opposite = {"insignals": "outsignals", "outsignals": "insignals"} + dp_type = opposite[signal_type] + for signal in signals: + LOGGER.debug("Adding signal: %s", signal) + temp_set = set() + for translation in self.dp_translations.get(signal.name, []): + temp_list = list(translation) + domain = translation[self.dp_position.domain.value] + group = translation[self.dp_position.group.value] + dp_signal = translation[self.dp_position.property.value] + self.check_signal_property(domain, group, dp_signal, signal_type) + self.signal_names["dp"][dp_type].add(dp_signal) + for enum_property in properties: + LOGGER.debug("Modifying property: %s", enum_property) + value = signal.properties[enum_property["source"]] + if value == "-": + value = enum_property["default"] + temp_list[ + self.dp_position[enum_property["destination"]].value + ] = value + temp_set.add(tuple(temp_list)) + self.dp_translations[signal.name] = temp_set + self.signal_names["other"][signal_type].add(signal.name) + for e2e_sts_signal_name in self.e2e_sts_signals: + if e2e_sts_signal_name not in self.signal_names["other"]["insignals"]: + LOGGER.warning("E2E check signal %s not used in any model.", e2e_sts_signal_name) + self.signal_names["other"][signal_type].add(e2e_sts_signal_name) + self.check_groups() + LOGGER.debug("Registered signal names: %s", self.signal_names) + + def check_signal_property(self, domain, group, property_name, signal_type): + """Check if we have only one signal written for the same property. + + Args: + domain (str): signal domain + group (str): signal group + property_name (str): signal property + signal_type (str): 'insignals' or 'outsignals' + """ + primitive_value = "" + for value in [domain, group, property_name]: + if value: + if primitive_value == "": + primitive_value = value + else: + primitive_value = primitive_value + '.' + value + if primitive_value == "": + raise Exception("The primitive does not contain any value!") + directional_primitive = f"{primitive_value}.{signal_type}" + self.check_property(directional_primitive, signal_type) + + def check_property(self, property_spec, signal_type): + """Check if we have only one signal written for the same property. + + Args: + property_spec (str): property specification + signal_type (str): 'insignals' or 'outsignals' + """ + if property_spec in self.signal_primitives_list: + error_msg = (f"You can't write {property_spec} as " + f"{signal_type} since this primitive has been used." + " Run model_yaml_verification to identify exact models.") + raise Exception(error_msg) + self.signal_primitives_list.append(property_spec) + + def check_groups(self): + """Check and crash if signal group contains both produces and consumes signals.""" + groups = {} + for signal_name, signal_specs in self.dp_translations.items(): + if signal_name in self.signal_names["other"]['insignals']: + consumed = True + elif signal_name in self.signal_names["other"]['outsignals']: + consumed = False + else: + continue + for signal_spec in signal_specs: + group = signal_spec[self.dp_position.group.value] + if group is None: + continue + domain = signal_spec[self.dp_position.domain.value] + key = (domain, group) + if key not in groups: + groups[key] = {"consumed": consumed, + "signals": set()} + groups[key]["signals"].add(signal_name) + assert consumed == groups[key]["consumed"], \ + f"Signal group {group} for {domain} contains both consumed and produced signals" + + @staticmethod + def read_translation(translation_file): + """Read specification of the format: + + service: + interface: + properties: + - endpoint_name: + - signal: name + property: name + - signal: name + property: name + hal: + hal_name: + - primitive_endpoint: + - insignal: name + hal_name: + - struct_endpoint: + - insignal: name1 + property: member1 + - insignal: name2 + property: member2 + ecm: + - signal: name + signals: + tvrl: + - signal: name + property: can_name + offset: offset + factor: scaling + + Args: + translation_file (Path): file with specs + + Returns: + yaml_data (dict): Loaded YAML data as dict, empty if not found + """ + if not translation_file.is_file(): + LOGGER.warning("No file found for %s", translation_file) + return {} + with open(translation_file, encoding="utf-8") as translation: + yaml = YAML(typ='safe', pure=True) + raw = yaml.load(translation) + return raw + + def parse_group_definitions(self, signal_groups): + """Parse group definitions. + + Args: + signal_groups (dict): parsed yaml file. + """ + for dp_name, group_definitions in signal_groups.items(): + for group in group_definitions: + port_name = None + if 'portname' in group: + port_name = group.pop('portname') + for group_name, signals in group.items(): + self.parse_signal_definitions({dp_name: signals}, group_name, port_name) + + def parse_signal_definitions(self, signals_definition, group=None, port_name=None): + """Parse signal definitions. + + Args: + signals_definition (dict): parsed yaml file. + group (str): Name of signal group, if signal belongs to a group. + port_name (str): Name of signal port, if there is one. + """ + enumerations = self.base_application.enumerations + for dp_name, dp_specification in signals_definition.items(): + for specification in dp_specification: + in_out_signal = [key for key in specification.keys() if 'signal' in key] + base_signal = None + signal_name = None + if "in" in in_out_signal[0]: + for signal in self.base_application.insignals: + if signal.name == specification["insignal"]: + base_signal = signal + signal_name = signal.name + elif "out" in in_out_signal[0]: + for signal in self.base_application.outsignals: + if signal.name == specification["outsignal"]: + base_signal = signal + signal_name = signal.name + else: + raise BadYamlFormat(f"in/out signal for {dp_name} is missing.") + if base_signal is None: + continue + base_properties = self.base_application.get_signal_properties( + base_signal + ) + if base_properties["type"] in enumerations: + underlying_data_type = enumerations[base_properties['type']]['underlying_data_type'] + interface_type = underlying_data_type + manifest_type = underlying_data_type + if 'init' not in specification: + if enumerations[base_properties['type']]['default_value'] is not None: + init_value = enumerations[base_properties['type']]['default_value'] + else: + LOGGER.warning('Initializing enumeration %s to "zero".', base_properties['type']) + init_value = [ + k for k, v in enumerations[base_properties['type']]['members'].items() if v == 0 + ][0] + else: + init_value = specification.get("init", 0) + else: + interface_type = base_properties["type"] + manifest_type = base_properties["type"] + init_value = specification.get("init", 0) + + if "out" in in_out_signal[0] and "strategy" in specification: + LOGGER.warning('Cannot set read strategy for outsignal %s, using "Always".', signal_name) + strategy = "Always" + else: + strategy = specification.get("strategy", "Always") + if strategy not in self.read_strategies: + LOGGER.warning('Invalid strategy %s, using "Always" instead.', strategy) + strategy = "Always" + + if group is not None and specification.get("portname", None) is not None: + raise BadYamlFormat(f"Port name should be on group level not signal level: {dp_name}") + port_name_tmp = port_name if port_name is not None else specification.get("portname", None) + + is_safe_signal = specification.get("dependability", False) + + if signal_name not in self.dp_translations: + self.dp_translations[signal_name] = set() + domain = self._get_domain(dp_name) + self.dp_translations[signal_name].add( + ( + "enum_0", # read from this tuple using the dp_position enum. Enum starts at 1 though. + domain, + specification["property"], + specification.get("type"), + interface_type, + manifest_type, + specification.get("offset"), + specification.get("factor"), + specification.get("default"), + specification.get("length"), + specification.get("min"), + specification.get("max"), + specification.get("enum"), + init_value, + specification.get("description"), + specification.get("unit"), + group, + strategy, + specification.get("debug", False), + is_safe_signal, + port_name_tmp + ) + ) + + ecu_supplier, _unused = self.base_application.pybuild['build_cfg'].get_ecu_info() + if ecu_supplier in ['HI', 'ZC'] and is_safe_signal and group is not None: + e2e_sts_property = f"{group}E2eSts" + e2e_sts_signal_name = f"sVc{domain}_D_{e2e_sts_property}" + + if signal_name == e2e_sts_signal_name: + raise BadYamlFormat(f"Don't put E2E status signals ({signal_name}) in yaml interface files.") + + if e2e_sts_signal_name not in self.dp_translations: + self.dp_translations[e2e_sts_signal_name] = set() + self.dp_translations[e2e_sts_signal_name].add( + ( + "enum_0", # read from this tuple using the dp_position enum. Enum starts at 1 though. + domain, + e2e_sts_property, + "UInt8", + "UInt8", + "UInt8", + 0, + 1, + None, + None, + 0, + 255, + None, + 255, + f"E2E status code for E2E protected signal (group) {signal_name}.", + None, + group, + strategy, + False, + is_safe_signal, + port_name_tmp + ) + ) + self.e2e_sts_signals.add(e2e_sts_signal_name) + + def parse_definition(self, definition): + """Parses all definition files + + Args: + definition (list(Path)): Definition files + """ + + for translation in definition: + raw = self.read_translation(translation) + self.parse_signal_definitions(raw.get("signals", {})) + self.parse_group_definitions(raw.get("signal_groups", {})) + + def get_signal_properties(self, signal): + """Get signal properties for signal + + Calls self.base_application to get signal properties + + Args: + signal (Signal): Signal to get properties for + """ + self.base_application.get_signal_properties(signal) + + def _get_signals(self): + """Read signals""" + self.parse_definition(self.translations_files) + + def _get_domain(self, device_proxy): + """Get domain for device proxy + + Args: + device_proxy (str): Name of device proxy + Returns: + domain (str): Name of the domain + """ + if device_proxy not in self.device_domain: + raise MissingDevice(device_proxy) + return self.device_domain[device_proxy] + + def _allow_domain(self, domain): + """Check if device proxy is in current domain_filter + + If there is no filter, the device is seen as part of the filter + + Args: + domain (str): Name of the domain + Returns: + filtered (bool): True if device is not filtered away + """ + return self.domain_filter is None or domain in self.domain_filter + + def get_signals(self, signal_type="insignals"): + """Get signals to and from a dp abstraction + + If it is set to False, we look at the application side. + + Args: + signal_type (str): insignals or outsignals + Returns: + signals (list): Signals in the interface + """ + signal_names = self.signal_names["other"][signal_type] + + signals = [] + for name in self._allowed_names(signal_names): + signals.append(Signal(name, self)) + return signals + + @property + def insignals(self): + """ Signals going to the device proxy. """ + return self.get_signals("insignals") + + @property + def outsignals(self): + """ Signals sent from the device proxy. """ + return self.get_signals("outsignals") + + def dp_spec_to_dict(self, signal_spec, signal_name): + """Convert signal specification to dict. + + Args: + signal_spec (tuple): Signal specification + signal_name (str): Signal name + Returns: + signal_spec (dict): Signal specification + """ + return { + "variable": signal_name, + "variable_type": signal_spec[self.dp_position.variable_type.value], + "property_type": signal_spec[self.dp_position.property_interface_type.value], + "domain": signal_spec[self.dp_position.domain.value], + "default": signal_spec[self.dp_position.default.value], + "length": signal_spec[self.dp_position.length.value], + "property": signal_spec[self.dp_position.property.value], + "offset": signal_spec[self.dp_position.offset.value], + "factor": signal_spec[self.dp_position.factor.value], + "range": { + "min": signal_spec[self.dp_position.min.value], + "max": signal_spec[self.dp_position.max.value], + }, + "init": signal_spec[self.dp_position.init.value], + "description": signal_spec[self.dp_position.description.value], + "unit": signal_spec[self.dp_position.unit.value], + "group": signal_spec[self.dp_position.group.value], + "strategy": signal_spec[self.dp_position.strategy.value], + "debug": signal_spec[self.dp_position.debug.value], + "dependability": signal_spec[self.dp_position.dependability.value], + "port_name": signal_spec[self.dp_position.port_name.value] + } + + @classmethod + def dp_spec_for_manifest(cls, signal_spec): + """Convert signal specification to dict for a signal manifest. + + Args: + signal_spec (tuple): Signal specification + Returns: + signal_spec (dict): Signal specification + """ + spec = { + "name": signal_spec[cls.dp_position.property.value], + "type": signal_spec[cls.dp_position.property_manifest_type.value], + } + for key, value in { + "default": cls.dp_position.default.value, + "length": cls.dp_position.length.value, + "enum": cls.dp_position.enum.value, + "description": cls.dp_position.description.value, + "unit": cls.dp_position.unit.value, + }.items(): + if signal_spec[value] is not None: + spec[key] = signal_spec[value] + if ( + signal_spec[cls.dp_position.min.value] is not None + and signal_spec[cls.dp_position.max.value] is not None + and cls.dp_position.enum.value is not None + ): + spec["range"] = { + "min": signal_spec[cls.dp_position.min.value], + "max": signal_spec[cls.dp_position.max.value], + } + return spec + + def to_dict(self): + """Method to generate dict to be saved as yaml + + Returns: + spec (dict): Signalling specification + """ + spec = {"consumer": [], "producer": []} + for signal_name, signal_spec in self._allowed_names_and_specifications( + self.signal_names["other"]["insignals"]): + spec['consumer'].append( + self.dp_spec_to_dict(signal_spec, signal_name) + ) + for signal_name, signal_spec in self._allowed_names_and_specifications( + self.signal_names["other"]["outsignals"]): + spec['producer'].append( + self.dp_spec_to_dict(signal_spec, signal_name) + ) + return spec + + def to_manifest(self, client_name): + """Method to generate dict to be saved as yaml + Args: + client_name (str): Name of the client in signal comm + Returns: + spec (dict): Signal manifest for using a Device proxy + """ + manifest = {"name": client_name} + manifest["consumes"] = self.insignals_dp_manifest(client_name) + manifest["produces"] = self.outsignals_dp_manifest(client_name) + manifest = self.cleanup_dp_manifest(manifest) + if "consumes" not in manifest and "produces" not in manifest: + return None + return {"signal_info": {"version": 0.2, "clients": [manifest]}} + + def _generator(self, signal_names, unique_names=False): + """Iterate over signals for allowed devices + + If unique_names is True, the iterator does not yield the same signal twice + if unique_names is False, it yields each allowed signal spec with the signal name + + Args: + signal_names (list): allowed signals + Yields: + name (str): Name of the signal + specification (dict): signal specification for allowed device + """ + for signal_name, specifications in ( + (name, spec) for name, spec in self.dp_translations.items() + if name in signal_names): + for specification in ( + spec for spec in specifications + if self._allow_domain(spec[self.dp_position.domain.value])): + if unique_names: + yield signal_name, specification + break + yield signal_name, specification + + def _allowed_names(self, signal_names): + """ Iterate over signal names for allowed devices + + Args: + signal_names (list): allowed signals + Yields: + name (str): Signal name + """ + for name, _ in self._generator(signal_names, unique_names=True): + yield name + + def _allowed_specifications(self, signal_names): + """ Iterate over signal specifications for allowed devices + + Args: + signal_names (list): allowed signals + Yields: + specification (dict): Specification for a signal for an allowed device + """ + for _, spec in self._generator(signal_names, unique_names=False): + yield spec + + def _allowed_names_and_specifications(self, signal_names): + """ Iterate over signal specifications for allowed devices + + Args: + signal_names (list): allowed signals + Yields: + name (str): Signal name + specification (dict): Specification for the signal for an allowed device + """ + for name, spec in self._generator(signal_names, unique_names=False): + yield name, spec + + def insignals_dp_manifest(self, client_name): + """ Create consumes part of manifest for reading signals from device proxies + Args: + client_name (str): Name of the client in signal comm + """ + consumes = [{"name": client_name, "signal_groups": []}] + signal_names = self.signal_names["other"]["insignals"] + consumed_groups = set() + for signal_spec in self._allowed_specifications(signal_names): + group = signal_spec[self.dp_position.group.value] + if group is not None: + consumed_groups.add(group) + else: + consumes[0]["signal_groups"].append( + {"name": signal_spec[self.dp_position.property.value]} + ) + for group in consumed_groups: + consumes[0]["signal_groups"].append( + {"name": group} + ) + return consumes + + def outsignals_dp_manifest(self, client_name): + """ Update manifests for writing signals to device proxies + Args: + client_name (str): Name of the client in signal comm + """ + produces = [{"name": client_name, "signals": [], "signal_groups": []}] + signal_names = self.signal_names["other"]["outsignals"] + group_signals = {} + for signal_spec in self._allowed_specifications(signal_names): + group = signal_spec[self.dp_position.group.value] + if group is not None: + if group not in group_signals: + group_signals[group] = [] + group_signals[group].append( + self.dp_spec_for_manifest(signal_spec) + ) + else: + produces[0]["signals"].append( + self.dp_spec_for_manifest(signal_spec) + ) + for group_name, signals in group_signals.items(): + produces[0]["signal_groups"].append( + {"name": group_name, + "signals": list(signals)} + ) + return produces + + @staticmethod + def cleanup_dp_manifest(manifest): + """ Remove empty device proxies. + Args: + manifest (dict): Device proxy configurations + """ + if not manifest["produces"][0]["signal_groups"]: + del manifest["produces"][0]["signal_groups"] + if not manifest["produces"][0]["signals"]: + del manifest["produces"][0]["signals"] + if list(manifest["produces"][0].keys()) == ["name"]: + del manifest["produces"] + if not manifest["consumes"][0]["signal_groups"]: + del manifest["consumes"] + return manifest diff --git a/pybuild/interface/ems.py b/pybuild/interface/ems.py new file mode 100644 index 0000000..a687096 --- /dev/null +++ b/pybuild/interface/ems.py @@ -0,0 +1,67 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for extraction Energy Management System""" +import os + +from pybuild.interface.base import BaseApplication, Signal +from pybuild.lib import logger +from pybuild.signal_interfaces import CsvSignalInterfaces +from pybuild.build_proj_config import BuildProjConfig + +LOGGER = logger.create_logger(__file__) + + +class CsvEMS(BaseApplication, CsvSignalInterfaces): + """Supplier part of the ECM""" + def __init__(self): + self._signals = {} + self.interfaces = {} + self._insignals = None + self._outsignals = None + self.projects = {} + + def parse_definition(self, definition): + """Read the interface files. + + Args: + definition (Path): Path to ProjectCfg.json + """ + self.build_cfg = BuildProjConfig(os.path.normpath(str(definition))) + CsvSignalInterfaces.__init__(self, self.build_cfg, []) + self.projects[self.build_cfg.name] = self.build_cfg + self.config_path = self.build_cfg.get_if_cfg_dir() + self.name = self.build_cfg.name # Set name for CsvSignalInterfaces + self._parse_io_cnfg(self.config_path) + self.name = 'Supplier_' + self.build_cfg.name # set name for BaseApplication + + def _get_signals(self): + """Look through interfaces and create Signal objects""" + self._insignals = set() + self._outsignals = set() + for interface_name, data in self.interfaces.items(): + for signal_name, signal_data in data.items(): + if signal_data['IOType'] == '-': + # Signal is inactive + continue + if signal_name in self._signals: + signal = self._signals[signal_name] + else: + signal = Signal(signal_name, self) + self._signals.update({signal_name: signal}) + if 'output' in interface_name.lower(): + # outport from ECM. Inport in EMS (from SPM) + self._insignals.add(signal_name) + signal.consumers = interface_name + else: + signal.producers = interface_name + self._outsignals.add(signal_name) + + def get_signal_properties(self, signal): + """Find properties for a signal from interface files""" + for interface_name, interface_data in self.interfaces.items(): + if signal.name in interface_data.keys(): + properties = interface_data[signal.name] + properties['interface'] = interface_name + return properties + return {} diff --git a/pybuild/interface/export_global_vars.py b/pybuild/interface/export_global_vars.py new file mode 100644 index 0000000..27f65b4 --- /dev/null +++ b/pybuild/interface/export_global_vars.py @@ -0,0 +1,98 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module to export information of global variables from pybuild projects.""" + +import argparse +import os +import sys +from typing import Dict, Tuple + +from ruamel.yaml import YAML + +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from pybuild.unit_configs import UnitConfigs + + +def get_global_variables(project_config_path: str) -> Dict: + """Get global variables connected to PyBuild project. + + Args: + project_config_path (str): Path to ProjectCfg.json file. + Returns: + (Dict): Dict containing project name and its global variables (name, type). + """ + project_name, project_unit_config = _get_project_data(project_config_path) + + variable_types = ["outports", "local_vars", "calib_consts", "nvm"] + variables = [] + for variable_type in variable_types: + if variable_type not in project_unit_config: + continue + + variables_info = [ + {"name": variable, "type": _get_variable_type(variable_info)} + for variable, variable_info in project_unit_config[variable_type].items() + ] + variables.extend(variables_info) + return {"name": project_name, "variables": variables} + + +def _get_variable_type(variable_info: Dict) -> str: + """Get variable type from variable info. + + Args: + variable_info (Dict): Dictionary with the variable info. + + Returns: + str: Variable type. + """ + unit_name = list(variable_info.keys())[0] # Getting any unit name, since variable type should be the same + return variable_info[unit_name]["type"] + + +def _get_project_data(project_config_path: str) -> Tuple[str, Dict]: + """Gets data for a pybuild project. + + Args: + project_config_path (str): Path to ProjectCfg.json file. + Returns: + project_name (str): Name of PyBuild project. + project_unit_config (dict): Dict mapping variable types to variables and their data. + """ + build_cfg = BuildProjConfig(os.path.normpath(project_config_path)) + feature_cfg = FeatureConfigs(build_cfg) + unit_cfg = UnitConfigs(build_cfg, feature_cfg) + project_unit_config = unit_cfg.get_per_cfg_unit_cfg() + return build_cfg.name, project_unit_config + + +def _export_yaml(data: Dict, file_path: str) -> None: + """Exports data from dictionary to a yaml file. + + Args: + data (Dict): Dictionary with data. + file_path (str): Path of the file to export data. + """ + with open(file_path, "w", encoding="utf-8") as yaml_file: + yaml = YAML() + yaml.default_flow_style = False + yaml.dump(data, yaml_file) + + +def _main(): + args = _parse_args() + global_variables = get_global_variables(args.project_config) + _export_yaml(global_variables, args.output_file) + + +def _parse_args(): + parser = argparse.ArgumentParser(description="Export global variables.") + parser.add_argument("--project-config", help="Project root configuration file.", required=True) + parser.add_argument("--output-file", help="Output file to export global variables.", required=True) + return parser.parse_args() + + +if __name__ == "__main__": + sys.exit(_main()) diff --git a/pybuild/interface/generate_adapters.py b/pybuild/interface/generate_adapters.py new file mode 100644 index 0000000..aa67058 --- /dev/null +++ b/pybuild/interface/generate_adapters.py @@ -0,0 +1,125 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Python module used for calculating interfaces for CSP""" +from pathlib import Path +from os import path +from pybuild.interface.hal import HALA +from pybuild.interface.device_proxy import DPAL +from pybuild.interface.service import ServiceFramework +from pybuild.interface import simulink +from pybuild.lib import logger +from pybuild.interface import generation_utils +from pybuild.lib.helper_functions import deep_json_update + +LOGGER = logger.create_logger("CSP adapters") + + +def parse_args(): + """Parse arguments + + Returns: + Namespace: the parsed arguments + """ + parser = generation_utils.base_parser() + parser.add_argument( + "--dp-interface", + help="Add dp interface to adapter specification", + action="store_true" + ) + parser.add_argument( + "--hal-interface", + help="Add dp interface to adapter specification", + action="store_true" + ) + parser.add_argument( + "--service-interface", + help="Add sfw interface to adapter specification", + action="store_true" + ) + parser.add_argument( + "output", + help="Output file with interface specifications", + type=Path + ) + parser.add_argument( + "--update-config", + help="Update project config file with path to adapter specifications", + action="store_true" + ) + return parser.parse_args() + + +def main(): + """ Main function for stand alone execution. + Mostly useful for testing and generation of dummy hal specifications + """ + args = parse_args() + app = generation_utils.process_app(args.config) + adapters(args, app) + + +def update_project_config(args): + """ Update project config file with relative location to adapter specification file, linux styled path. + + Args: + args (Namespace): Arguments from command line + """ + config_dir = Path(args.config).resolve().parents[0] + output_dir = Path(args.output).resolve().parents[0] + rel_dir = Path(path.relpath(output_dir, config_dir)) + rel_path = rel_dir / Path(args.output).name + rel_path_linux = rel_path.as_posix() + deep_json_update( + args.config, + {'ProjectInfo': {'adapterSpec': rel_path_linux}} + ) + + +def adapters(args, app): + """ Generate specification for adapter generation. + + Args: + args (Namespace): Arguments from command line + app (Application): Application to generate specification for + """ + + if args.dp_interface: + dp = DPAL(app) + dp_interface = generation_utils.get_interface(app, dp) + else: + dp_interface = {} + + if args.hal_interface: + hala = HALA(app) + hal_interface = generation_utils.get_interface(app, hala) + else: + hal_interface = {} + + if args.service_interface: + sfw = ServiceFramework(app) + sfw_interface = generation_utils.get_interface(app, sfw) + method_interface = generation_utils.get_method_interface(app) + else: + sfw_interface = {} + method_interface = {} + + interface_data_types = app.pybuild['user_defined_types'].get_interface_data_types() + + adapters = simulink.get_interface( + interface_data_types, + dp_interface, + hal_interface, + sfw_interface, + method_interface + ) + + generation_utils.write_to_file(adapters, args.output, is_yaml=True) + + if args.update_config: + update_project_config(args) + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/generate_hi_interface.py b/pybuild/interface/generate_hi_interface.py new file mode 100644 index 0000000..96b5558 --- /dev/null +++ b/pybuild/interface/generate_hi_interface.py @@ -0,0 +1,74 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Python module used for calculating interfaces for CSP HI""" +from pathlib import Path +from pybuild.interface import generation_utils +from pybuild.interface.device_proxy import DPAL +from pybuild.lib.helper_functions import recursive_default_dict, to_normal_dict + +OP_READ = 'read' +OP_WRITE = 'write' + + +def generate_hi_interface(args, hi_interface): + """Generate HI YAML interface file. + + Args: + args (Namespace): Arguments from command line. + hi_interface (dict): HI interface dict based on HIApplication and generation_utils.get_interface. + Returns: + result (dict): Aggregated signal information as a dict. + """ + + io_translation = { + 'consumer': OP_READ, + 'producer': OP_WRITE + } + result = recursive_default_dict() + for raster_data in hi_interface.values(): + for direction, signals in raster_data.items(): + hi_direction = io_translation[direction] + for signal in signals: + domain = signal['domain'] + group = signal['group'] + name = signal['variable'] + property_name = signal['property'] + if group is None: + port_name = signal['port_name'] or property_name + result[hi_direction]['signals'][domain][port_name]['data'][property_name] = name + else: + port_name = signal['port_name'] or group + result[hi_direction]['signal_groups'][domain][port_name][group]['data'][property_name] = name + generation_utils.write_to_file(to_normal_dict(result), args.output, is_yaml=True) + + +def parse_args(): + """Parse arguments. + + Returns: + Namespace: the parsed arguments. + """ + parser = generation_utils.base_parser() + parser.add_argument( + "output", + help="Output file with interface specifications.", + type=Path + ) + return parser.parse_args() + + +def main(): + """ Main function for stand alone execution. + Mostly useful for testing and generation of dummy hal specifications. + """ + args = parse_args() + app = generation_utils.process_app(args.config) + hi_app = DPAL(app) + interface = generation_utils.get_interface(app, hi_app) + generate_hi_interface(args, interface) + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/generate_service.py b/pybuild/interface/generate_service.py new file mode 100644 index 0000000..0d52ce6 --- /dev/null +++ b/pybuild/interface/generate_service.py @@ -0,0 +1,60 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Python module used for calculating interfaces for CSP""" +from pathlib import Path +from pybuild.interface.service import get_service +from pybuild.lib import logger +from pybuild.interface import generation_utils + +LOGGER = logger.create_logger("CSP service") + + +def parse_args(): + """Parse command line arguments + + Returns: + Namespace: Arguments from command line + """ + parser = generation_utils.base_parser() + parser.add_argument( + "--client-name", + help="Name of the context object in CSP. Defaults to project name." + ) + parser.add_argument( + "output", + help="Output directory for service models", + type=Path + ) + return parser.parse_args() + + +def main(): + """ Main function for stand alone execution. + Mostly useful for testing and generation of dummy hal specifications + """ + args = parse_args() + app = generation_utils.process_app(args.config) + client_name = generation_utils.get_client_name(args, app) + service(args, app, client_name) + + +def service(args, app, client_name): + """ Generate specifications for pt-scheduler wrappers. + + Args: + args (Namespace): Arguments from command line + app (Application): Application to generate specifications for + client_name (str): Signal client name + """ + model_internal = get_service(app, client_name, 'internal') + model_external = get_service(app, client_name, 'external') + model_observer = get_service(app, client_name, 'observer') + generation_utils.write_to_file(model_internal, Path(args.output, 'model', 'internal.yaml'), is_yaml=True) + generation_utils.write_to_file(model_external, Path(args.output, 'model', 'external.yaml'), is_yaml=True) + generation_utils.write_to_file(model_observer, Path(args.output, 'model', 'observer.yaml'), is_yaml=True) + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/generate_wrappers.py b/pybuild/interface/generate_wrappers.py new file mode 100644 index 0000000..116afdd --- /dev/null +++ b/pybuild/interface/generate_wrappers.py @@ -0,0 +1,134 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Python module used for calculating interfaces for CSP""" +from pathlib import Path +from pybuild.interface.hal import HALA, get_hal_list +from pybuild.interface.device_proxy import DPAL +from pybuild.interface.service import ServiceFramework, get_service_list +from pybuild.lib import logger +from pybuild.interface import generation_utils + +LOGGER = logger.create_logger("CSP wrappers") + + +def get_manifest(app, domain, client_name): + """Get signal manifest for application + + The model yaml files are parsed for the models included in the application. + If there are no signals to interact with, + this function returns None to indicate that there should not be a manifest. + + Args: + app (Application): Pybuild project + domain (str): Domain that the signals should not be part of + client_name (str): Client name in the signal database + Returns: + spec (dict/None): signal manifest, None if no manifest should be written + """ + rasters = app.get_rasters() + LOGGER.debug("Rasters: %s", rasters) + translation_files = app.get_translation_files() + + dpal = DPAL(app) + dpal.domain_filter = [domain] + dpal.parse_definition(translation_files) + dpal.clear_signal_names() + dpal.add_signals(app.insignals, "insignals") + dpal.add_signals(app.outsignals, "outsignals") + return dpal.to_manifest(client_name) + + +def parse_args(): + """Parse command line arguments + + Returns: + Namespace: Arguments from command line + """ + parser = generation_utils.base_parser() + parser.add_argument( + "--client-name", + help="Name of the context object in CSP. Defaults to project name." + ) + parser.add_argument( + "--dp-interface", + help="Output file with DP interface specifications", + type=Path + ) + parser.add_argument( + "--dp-manifest-dir", + help="Output directory for signal manifests", + type=Path + ) + parser.add_argument( + "--hal-interface", + help="Output file with HAL interface specifications", + type=Path, + ) + parser.add_argument( + "--service-interface", + help="Output file with service interface specifications", + type=Path + ) + return parser.parse_args() + + +def main(): + """ Main function for stand alone execution. + Mostly useful for testing and generation of dummy hal specifications + """ + args = parse_args() + app = generation_utils.process_app(args.config) + client_name = generation_utils.get_client_name(args, app) + wrappers(args, app, client_name) + + +def wrappers(args, app, client_name): + """ Generate specifications for pt-scheduler wrappers. + + Args: + args (Namespace): Arguments from command line + app (Application): Application to generate specifications for + client_name (str): Signal client name + """ + if args.hal_interface: + hala = HALA(app) + interface = generation_utils.get_interface(app, hala) + interface["relocatable_language"] = "C" + generation_utils.write_to_file(interface, args.hal_interface, is_yaml=True) + hals = get_hal_list(app) + cmake = Path(args.hal_interface.parent, 'hal.cmake') + generation_utils.write_to_file(hals, cmake) + if args.dp_interface: + dp = DPAL(app) + interface = generation_utils.get_interface(app, dp) + interface["relocatable_language"] = "C" + generation_utils.write_to_file(interface, args.dp_interface, is_yaml=True) + if args.service_interface: + service = ServiceFramework(app) + interface = generation_utils.get_interface(app, service) + interface["relocatable_language"] = "C" + generation_utils.write_to_file(interface, args.service_interface, is_yaml=True) + proxies = get_service_list(app) + cmake = Path(args.service_interface.parent, 'service-proxies.cmake') + generation_utils.write_to_file(proxies, cmake) + if args.dp_manifest_dir: + if not args.dp_manifest_dir.is_dir(): + args.dp_manifest_dir.mkdir() + + # Enable changing client name in generation + for domain in app.get_domain_names(): + manifest = get_manifest(app, domain, client_name) + if manifest is None: + # Manifests without produced or consumed signals are not allowed + # Therefore get_manifests returned None to tell us to skip this domain + continue + domain_file = Path( + args.dp_manifest_dir, + f"{domain}_{app.name}.yaml") + generation_utils.write_to_file(manifest, domain_file, is_yaml=True) + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/generation_utils.py b/pybuild/interface/generation_utils.py new file mode 100644 index 0000000..ab90c2a --- /dev/null +++ b/pybuild/interface/generation_utils.py @@ -0,0 +1,144 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module with generation utils.""" + +import argparse +from ruamel.yaml import YAML +from pathlib import Path +from pybuild.interface.application import Application, get_internal_domain +from pybuild.interface.base import filter_signals +from pybuild.lib import logger + +LOGGER = logger.create_logger("CSP interface generation utils") + + +def base_parser(): + """ Base parser that adds config argument. + + Returns: + parser (ArgumentParser): Base parser + """ + parser = argparse.ArgumentParser() + parser.add_argument("config", help="The project configuration file", type=Path) + return parser + + +def get_client_name(args, app): + """ Get client name for app. + + Args: + app (Application): Parsed project configuration + Returns: + name (str): Name of the project + """ + return args.client_name if args.client_name else app.name + + +def process_app(config): + """ Get an app specification for the current project + + Entrypoint for external scripts. + + Args: + config (pathlib.Path): Path to the ProjectCfg.json + Returns: + app (Application): pybuild project + """ + app = Application() + app.parse_definition(config) + return app + + +def get_interface(app, interface_type): + """Get interface(hal/dp/zc/service) to application + + Args: + app (Application): Pybuild project + interface_type (BaseApplication): A type of interface + Returns: + spec (obj): obj for hal/dp/zc/service class + """ + spec = {} + rasters = app.get_rasters() + LOGGER.debug("Rasters: %s", rasters) + translation_files = app.get_translation_files() + interface_type.parse_definition(translation_files) + internal = get_internal_domain(rasters) + properties_from_json = [ + {"destination": "min", "source": "min", "default": "-"}, + {"destination": "max", "source": "max", "default": "-"}, + {"destination": "variable_type", "source": "type"}, + {"destination": "offset", "source": "offset", "default": "-"}, + {"destination": "factor", "source": "lsb", "default": 1}, + {"destination": "description", "source": "description"}, + {"destination": "unit", "source": "unit", "default": "-"}, + ] + # TODO We read all yaml files at once, should we "add_signals" for all rasters at once? + # For example, service.check_endpoints will miss endpoint mismatches that reside in different rasters. + for raster in rasters: + interface_type.name = raster.name + interface_type.clear_signal_names() + interface_type.add_signals( + filter_signals(raster.insignals, internal), "insignals", properties_from_json) + interface_type.add_signals(raster.outsignals, "outsignals", properties_from_json) + LOGGER.debug("Current communication interface: %s", interface_type) + spec[raster.name] = interface_type.to_dict() + return spec + + +def get_method_interface(app): + """ Get method interface + Args: + app (Application): Application + Returns: + spec (dict): Specification for csp methods + """ + spec = {} + + for method in app.get_methods(): + method_spec = {} + method_spec['name'] = method.name + method_spec['primitive'] = method.get_primitive(method.name) + method_spec['namespace'] = method.namespace + if method.description: + method_spec['description'] = method.description + inports = {} + outports = {} + for signal in method.signals: + signal_spec = { + 'primitive': method.get_primitive(signal.name), + 'type': signal.properties['type'], + 'variable_type': signal.properties['type'], + 'variable': signal.name, + 'range': signal.properties['range'], + 'init': 0, + 'description': '', + 'unit': '' + } + if signal in method.outsignals: + outports[signal.name] = signal_spec + else: + inports[signal.name] = signal_spec + + ports = {'in': inports, 'out': outports} + method_spec['ports'] = ports + spec[method.name] = method_spec + return spec + + +def write_to_file(content, output, is_yaml=False): + """ Write to cmake. + + Args: + content (str): cmake + output (Path): File to write. + yaml (bool): Dump yaml + """ + output.parent.mkdir(parents=True, exist_ok=True) + with open(output, "w", encoding="utf-8") as file_handler: + if is_yaml: + yaml = YAML() + yaml.dump(content, file_handler) + else: + file_handler.write(content) diff --git a/pybuild/interface/hal.py b/pybuild/interface/hal.py new file mode 100644 index 0000000..27b0d4f --- /dev/null +++ b/pybuild/interface/hal.py @@ -0,0 +1,194 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Python module used for abstracting Hardware Abstraction Layer specifications""" +import re +from pathlib import Path +from ruamel.yaml import YAML +from pybuild.interface.csp_api import CspApi +from pybuild.lib import logger + +LOGGER = logger.create_logger('base') + + +def get_hal_list(app): + """Get translated hal name from yaml file + + Args: + app (Application): Pybuild project + Returns: + cmake (str): a string contains translated hal name + """ + translation_files = app.get_translation_files() + hala = HALA(app) + hala.parse_definition(translation_files) + hal_translations = hala.get_map() + + hals = set() + for definitions in hala.translations.values(): + for definition in definitions: + hal_abbreviation = definition[hala.position.api.value] + real_hal_name = get_real_hal_name(hal_abbreviation, hal_translations) + hals.add((hal_abbreviation, real_hal_name)) + + cmake = "" + for hal_abbreviation, real_hal_name in hals: + lib = re.sub('-', '_', f'hal_{hal_abbreviation}' + '_libhal_' + real_hal_name).upper() + include = re.sub('-', '_', f'hal_{hal_abbreviation}' + '_include_dir').upper() + cmake += f"LIST(APPEND extra_libraries ${{{lib}}})\n" + cmake += f"LIST(APPEND EXTRA_INCLUDE_DIRS ${{{include}}})\n" + return cmake + + +def strip_hal_name(hal_name): + """Strip hal name + + Args: + hal_name (str): hal name + Returns: + (str): stripped hal name + """ + return hal_name.replace('_hal', '') + + +def verify_name(hal_name, api_map): + """Verify hal name + + Args: + hal_name (str): hal name + api_map (dict): hal translation map + """ + if strip_hal_name(hal_name) not in api_map: + raise HalTranslationException( + f"{hal_name} does not exist in the hal translation file." + ) + + +def get_real_hal_name(hal_name, translation_map): + """Get real hal name from translation map file. + + Args: + hal_name (str): hal abreviation + + Returns: + real_hal_name (str): real name of a hal + """ + verify_name(hal_name, translation_map) + return translation_map.get(strip_hal_name(hal_name)) + + +class UnknownAccessorError(Exception): + """Error when setting a producer and there already exists one""" + def __init__(self, hal, signal, accessor): + """Set error message + + Args: + hal (HAL): Hal where the problem is + signal (Signal): Signal with the problem + accessor (str): Unknown accessor type + """ + super().__init__() + self.message = f"Accessor of type {accessor} for {signal.name} in {hal.name} is not handled" + + +class HalTranslationException(Exception): + """Class for hal translation exceptions""" + + +class HALA(CspApi): + """Hardware abstraction layer abstraction""" + + def __repr__(self): + """String representation of HALA""" + return (f"") + + def get_map(self): + """Get hal translation map + + Returns: + (dict): hal translation map + """ + path = self.get_map_file() + if path.is_file(): + return self._get_hal_translation(path) + return {} + + @staticmethod + def get_map_file(): + """Get hal translation map file + + Returns: + (Path): hal translation map file + """ + return Path("Projects", "CSP", "hal_list.yaml") + + def get_api_name(self, api_name): + real_hal_name = get_real_hal_name( + api_name, + self.api_map + ) + return real_hal_name + + def verify_api(self, api_name): + verify_name(api_name, self.api_map) + + @staticmethod + def _get_hal_translation(path): + """Get translated hal names + + Args: + path (Path): path to the hal translation list. + Returns: + hal_translation_content (dict): translated hal names + """ + hal_translation_content = None + if path and path.is_file(): + with path.open("r") as file_handler: + yaml = YAML(typ="safe", pure=True) + hal_translation_content = yaml.load(file_handler) + + if not hal_translation_content: + if hal_translation_content is None: + raise HalTranslationException( + "No hal translation file given." + ) + if isinstance(hal_translation_content, dict): + raise HalTranslationException( + "Hal translation file are empty." + ) + raise HalTranslationException("Bad hal translation format.") + return hal_translation_content + + def check_endpoints(self): + pass + + def extract_endpoint_definitions(self, raw): + """Extract endpoint definitions from raw data + + Args: + (dict): endpoint definitions + """ + self.parse_api_definitions(raw.get("hal", {})) + + @staticmethod + def extract_definition(definition): + """Extract definition from hal + + Args: + definition (dict): hal definition + + Returns: + (dict): hal definition + """ + if isinstance(definition, list): + specifications = { + 'hals': definition + } + else: + specifications = { + 'properties': definition.get('properties', []), + 'methods': definition.get('methods', []) + } + return specifications diff --git a/pybuild/interface/model_yaml_verification.py b/pybuild/interface/model_yaml_verification.py new file mode 100644 index 0000000..eb13fd3 --- /dev/null +++ b/pybuild/interface/model_yaml_verification.py @@ -0,0 +1,342 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for verifying the model yaml files.""" + +import argparse +import logging +from pathlib import Path +from voluptuous import All, MultipleInvalid, Optional, Required, Schema +from ruamel.yaml import YAML +from pybuild.interface.application import Application +from pybuild.interface.base import BaseApplication + + +class ModelYmlVerification(BaseApplication): + """Class for verifying the model yaml files.""" + + def __init__(self, base_application): + self.base_application = base_application + self.raw = {} + self.app_insignals = self.get_insignals_name() + self.app_outsignals = self.get_outsignals_name() + self.signal_properties = {} + self.model_name = None + self.error_printed = False + + def read_translation(self, translation_file): + """Read specification of the yaml file. + + Args: + translation_file (Path): file with specs. + """ + + if not translation_file.is_file(): + return {} + with open(translation_file, encoding="utf-8") as translation: + try: + yaml = YAML(typ='safe', pure=True) + self.raw = yaml.load(translation) + except yaml.YAMLError as e: + self.raw = {} + if hasattr(e, 'problem_mark'): + mark = e.problem_mark + self.error("Error while reading model file, verification of this file cannot continue until this " + f"is fixed:\nFile: {translation_file}\nLine: {mark.line + 1}\nColumn: {mark.column + 1}") + else: + self.error("Error while reading model file, verification of this file cannot continue until this " + f"is fixed:\nFile: {translation_file}") + + def validate_signal_schema(self, signal_spec, signal_direction, is_hal, is_service): + """Validate if signal have a correct schema in model yaml file. + + Args: + signal_spec (dict): signal specification. + signal_direction (str): insignal or outsignal. + is_hal (Bool): signal comming from hal + is_service (Bool): signal comming from service + """ + if is_hal: + signal_schema = Schema({Required('insignal'): All(str), Optional('property'): All(str)}) + elif is_service: + signal_schema = Schema({Required(signal_direction): All(str), Optional('property'): All(str)}) + else: + signal_schema = Schema({Required(signal_direction): All(str), Required('property'): All(str)}) + try: + signal_schema(signal_spec) + except MultipleInvalid as e: + self.error(f"{e} in {self.model_name}") + + def validate_group_schema(self, group_spec): + """Validate if device proxy signal group and hal endpoint + have correct schema. + + Args: + group_spec (dict): dp signal group or hal endpoint. + """ + group_schema = Schema({Required(str): [{Required(str): list}]}) + try: + group_schema(group_spec) + except MultipleInvalid as e: + self.error(self.model_name + ' ' + str(e)) + + def validate_service_schema(self, service_spec): + """Validate if service schema in model yaml file. + + Args: + service_spec (dict): service in model yaml file. + """ + service_schema = Schema( + { + Required(str): { + Optional('properties'): [{Required(str): list}], + Optional('methods'): [{Required(str): list}] + } + } + ) + try: + service_schema(service_spec) + except MultipleInvalid as e: + self.error(self.model_name + ' ' + str(e)) + + def validate_schema(self): + """Validate interface schema in model yaml file. + + Interface could be hal, dp(signal/signal group) and serivece. + """ + schema = Schema({ + Optional('hal'): dict, Optional('signal_groups'): dict, + Optional('service'): dict, Optional('signals'): dict}) + try: + schema(self.raw) + except MultipleInvalid as e: + self.error(self.model_name + ' ' + str(e)) + + def parse_hal_definition(self, hal): + """Parse hal definition. + + Args: + hal (dict): hal specification in model yaml file. + """ + self.parse_group_definitions(hal, is_hal=True) + + def parse_service_definitions(self, service): + """Parse service. + + Args: + service (dict): service in model yaml file. + """ + if service: + self.validate_service_schema(service) + for service_name, definition in service.items(): + for endpoints in definition.get('properties', []): + for endpoint, signals in endpoints.items(): + self.verify_signals({service_name: signals}, is_service=True, endpoint=endpoint) + for endpoints in definition.get('methods', []): + for endpoint, signals in endpoints.items(): + self.verify_signals({service_name: signals}, is_service=True, endpoint=endpoint) + + def parse_group_definitions(self, signal_groups, is_hal=False): + """Parse signal groups. + + Args: + signal_groups (dict): Hal/dp signal group in yaml file. + is_hal (Bool): hal signal + """ + if signal_groups: + self.validate_group_schema(signal_groups) + for interface, group_definitions in signal_groups.items(): + for group in group_definitions: + for group_name, signals in group.items(): + self.verify_signals({interface: signals}, is_hal, group=group_name) + + def verify_signals(self, signals_definition, is_hal=False, is_service=False, endpoint=None, group=None): + """verify signal in-signal and out-signal in model yaml file. + + Args: + signals_definition (dict): parsed signals in model yaml file. + is_hal (Bool): hal signal. + is_service (Bool): service signal. + endpoint (str): service endpoint. + group(str): hal group. + """ + for interface, specifications in signals_definition.items(): + for specification in specifications: + in_out_signal = [key for key in specification.keys() if 'signal' in key] + signal_name = specification[in_out_signal[0]] + self.validate_signal_schema(specification, in_out_signal[0], is_hal, is_service) + if in_out_signal == []: + self.error(f"signal is not defined for {interface} in {self.model_name}!") + if 'in' not in in_out_signal[0] and 'out' not in in_out_signal[0]: + self.error(f"in and out signal must be added to signal {specification['signal']}") + elif 'in' in in_out_signal[0] and specification[in_out_signal[0]] not in self.app_insignals: + self.error( + f"{specification['insignal']} is not defined as an insignal in json file") + elif "out" in in_out_signal[0] and specification[in_out_signal[0]] not in self.app_outsignals: + self.error( + f"{specification['outsignal']} is not defined as an outsignal in json file") + else: + if is_service: + if specification.get('property') is None: + self.verify_primitive(f"{interface}.{endpoint}.{signal_name}", in_out_signal[0]) + else: + self.verify_primitive( + f"{interface}.{endpoint}.{specification['property']}.{signal_name}", + in_out_signal[0]) + elif is_hal: + if specification.get('property') is None: + self.verify_primitive(f"{interface}.{group}.{signal_name}", in_out_signal[0]) + else: + self.verify_primitive(f"{interface}.{group}.{specification['property']}.{signal_name}", + in_out_signal[0]) + else: + self.verify_primitive(f"{interface}.{specification['property']}.{signal_name}", + in_out_signal[0]) + + def check_duplicate_signals(self, property_spec, in_out): + """Check if each signal appears only once for each model. + It is ok for two insignals with the same name to be mapped to the same primitive + if they are in different models. + It is not ok for a outsignal to map to the same interface twice, but it is ok to map to + different interfaces (with same or different property name). + + Args: + property_spec (str): property specification. + in_out (str): whether it is an in- or outsignal. + """ + signal_name = property_spec.split('.')[-1] + interface_name = property_spec.split('.')[0] + for model, spec in self.signal_properties.items(): + for primitive in spec: + if signal_name in primitive.split('.'): + if property_spec not in primitive: + if "in" in in_out: + self.error( + f"You can't connect a signal {signal_name} in {self.model_name} model to two " + f"different primitives. It's already connected in {model} model") + else: + if interface_name in primitive.split('.'): + self.error( + f"You can't connect a signal {signal_name} in {self.model_name} model " + f"to the same interface ({interface_name}) twice. " + f"It's already connected as {primitive} in model {model}.") + + else: + if model == self.model_name: + self.error(f"You can't connect signal {signal_name} in {self.model_name} model twice.") + elif "out" in in_out: + self.error( + f"You can't connect signal {signal_name} in {self.model_name} model to the same " + f"primitive as in another model. It is already defined in {model}") + + def check_property(self, property_spec): + """Check if we have only one signal written for the same property. + + Args: + property_spec (str): property specification. + """ + signal_name = property_spec.split('.')[-1] + for model, spec in self.signal_properties.items(): + for primitive in spec: + if ('.'.join(property_spec.split('.')[:-1]) == '.'.join(primitive.split('.')[:-1]) + and signal_name != primitive.split('.')[-1]): + self.error( + f"You can't connect another signal to the existing property {property_spec} in " + f"{self.model_name} model, because it is already defined in {model} model.") + + def verify_primitive(self, property_spec, in_out): + """Runs the necessary tests. + + Args: + property_spec (str): property specification. + in_out (str): whether it is an in- or outsignal. + """ + self.check_duplicate_signals(property_spec, in_out) + self.check_property(property_spec) + self.signal_properties[self.model_name].append(property_spec) + + def get_insignals_name(self): + """Base application in-signals. + """ + app_insignals = [] + for signal in self.base_application.insignals: + app_insignals.append(signal.name) + return app_insignals + + def get_outsignals_name(self): + """Base application out-signals. + """ + app_outsignals = [] + for signal in self.base_application.outsignals: + app_outsignals.append(signal.name) + return app_outsignals + + def parse_definition(self, definition): + """Parses all definition files + + Args: + definition (list(Path)): model yaml files. + """ + for translation in definition: + path = Path(translation) + self.model_name = path.name.replace(".yaml", "") + self.signal_properties[self.model_name] = [] + self.read_translation(translation) + self.validate_schema() + self.verify_signals(self.raw.get("signals", {})) + self.parse_group_definitions(self.raw.get("signal_groups", {})) + self.parse_hal_definition(self.raw.get("hal", {})) + self.parse_service_definitions(self.raw.get("service", {})) + + def error(self, msg): + """ Prints an error message to the terminal. + + Args: + msg (string): The message to be printed. + """ + self.error_printed = True + logging.error(f"{msg}\n") + + def print_success_msg(self): + """ Prints a success message if no error messages have been printed. + """ + if not self.error_printed: + print('Yaml verification done without any errors.') + + +def get_app(project_config): + """ Get an app specification for the current project. + + Args: + config (pathlib.Path): Path to the ProjectCfg.json. + Returns: + app (Application): pybuild project. + """ + app = Application() + app.parse_definition(project_config) + return app + + +def parse_args(): + """Parse command line arguments. + + Returns: + (Namespace): parsed command line arguments. + """ + parser = argparse.ArgumentParser() + parser.add_argument("config", help="The SPA2 project config file", type=Path) + return parser.parse_args() + + +def main(): + """Main function for model yaml verification.""" + args = parse_args() + app = get_app(args.config) + model_yamls = app.get_translation_files() + model_yaml_ver = ModelYmlVerification(app) + model_yaml_ver.parse_definition(model_yamls) + model_yaml_ver.print_success_msg() + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/service.py b/pybuild/interface/service.py new file mode 100644 index 0000000..3d3d1af --- /dev/null +++ b/pybuild/interface/service.py @@ -0,0 +1,296 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for handling the Service abstraction.""" + + +import re + +from pybuild.interface.base import filter_signals +from pybuild.interface.csp_api import CspApi +from pybuild.interface.application import get_internal_domain +from pybuild.lib import logger + +LOGGER = logger.create_logger("service") + + +def get_service(app, client_name, interface): + """Get service implementation specification""" + rasters = app.get_rasters() + LOGGER.debug("Rasters: %s", rasters) + translation_files = app.get_translation_files() + + sfw = ServiceFramework(app) + sfw.filter = f"{client_name}_internal" + sfw.name = f"{client_name}_{interface}" + sfw.parse_definition(translation_files) + internal = get_internal_domain(rasters) + properties_from_json = [ + {"destination": "min", "source": "min", "default": "-"}, + {"destination": "max", "source": "max", "default": "-"}, + {"destination": "variable_type", "source": "type"}, + {"destination": "offset", "source": "offset", "default": "-"}, + {"destination": "factor", "source": "lsb", "default": 1}, + {"destination": "description", "source": "description"}, + {"destination": "unit", "source": "unit", "default": "-"}, + ] + for raster in rasters: + external_signals = filter_signals(raster.insignals, internal) + sfw.add_signals( + external_signals, + "insignals", + properties_from_json, + ) + sfw.add_signals(raster.outsignals, "outsignals", properties_from_json) + return sfw.to_model(interface) + + +def get_service_list(app): + """Get service list from app + + Args: + app (Application): Pybuild project + + Returns: + (str): a string containing the translated service list + """ + translation_map = app.get_service_mapping() + cmake = '' + for proxy, service in translation_map.items(): + lib = re.sub('-', '_', service + '_lib' + proxy + '_service_proxy').upper() + include = re.sub('-', '_', service + '_include_dir').upper() + cmake += f"LIST(APPEND extra_libraries ${{{lib}}})\n" + cmake += f"LIST(APPEND EXTRA_INCLUDE_DIRS ${{{include}}})\n" + return cmake + + +class ServiceFramework(CspApi): + """Service Framework abstraction layer""" + + def __repr__(self): + """String representation of SWFL""" + return ( + f"" + ) + + def get_map_file(self): + """Get service translation map file + + Returns: + (Path): service translation map file + """ + return self.base_application.get_services_file() + + def get_map(self): + """Get service translation map + + Returns: + (dict): service translation map + """ + return self.base_application.get_service_mapping() + + def check_endpoints(self): + """Check and crash if signal endpoint contains both produces and consumes signals.""" + endpoints = {} + for signal_name, signal_specs in self.translations.items(): + if signal_name in self.signal_names["app"]['insignals']: + consumed = True + elif signal_name in self.signal_names["app"]['outsignals']: + consumed = False + else: + continue + for signal_spec in signal_specs: + endpoint = signal_spec[self.position.endpoint.value] + api = signal_spec[self.position.api.value] + key = (api, endpoint) + if key not in endpoints: + endpoints[key] = { + "consumed": consumed, + "signals": set() + } + endpoints[key]["signals"].add(signal_name) + assert consumed == endpoints[key]["consumed"], \ + f"Signal endpoint {endpoint} for {api} contains both consumed and produced signals" + + def extract_endpoint_definitions(self, raw): + """Extract endpoint definitions from yaml file. + + Args: + raw (dict): Raw yaml file + Returns: + (dict): Endpoint definitions + """ + self.parse_api_definitions(raw.get("service", {})) + + @staticmethod + def extract_definition(definition): + """Extract definition from yaml file. + Returns the properties and methods for a service. + + Args: + definition (dict): Definition from yaml file + Returns: + (dict): Specifications for a service + """ + specifications = {} + specifications['properties'] = definition.get('properties', []) + specifications['methods'] = definition.get('methods', []) + return specifications + + def to_model(self, client): + """Method to generate dict to be saved as yaml + Args: + client (str): Name of the client in signal comm + Returns: + spec (dict): Signal model for using a service + """ + properties, types = self.properties_service_model(client) + descriptions = { + 'internal': { + 'brief': "Internal interface for associated application.", + 'full': "This interface should only be used by the associated application." + }, + 'external': { + 'brief': "External interface.", + 'full': "This interface should be used by modules wanting to interact with the associated application." + }, + 'observer': { + 'brief': "Read-only interface.", + 'full': "This interface can be used by anyone wanting information from the associated application." + }, + } + model = {"name": self.name, + "version": "${SERVICE_VERSION}", + "description": descriptions[client], + "properties": properties, + "types": types} + return model + + def properties_service_model(self, client): + """Generate properties and types for a service + + Args: + client (str): Name of the client in signal comm + + Returns: + (list): List of properties + (list): List of types + """ + properties = {} + types = {} + accessors = {} + if client == 'internal': + accessors['insignals'] = 'r-' + accessors['outsignals'] = '-w' + elif client == 'external': + accessors['insignals'] = '-w' + accessors['outsignals'] = 'r-' + else: + accessors['insignals'] = 'r-' + accessors['outsignals'] = 'r-' + + properties_in, types_in = self._properties_service_model( + self.signal_names["app"]["insignals"], + accessors['insignals']) + properties_out, types_out = self._properties_service_model( + self.signal_names["app"]["outsignals"], + accessors['outsignals']) + + properties = properties_in + properties_out + types = types_in + types_out + return properties, types + + def _specifications(self, signal_names): + """ Iterate over signal specifications for allowed services + + Args: + signal_names (list): allowed signals + Yields: + specification (dict): Specification for a signal for an allowed service + """ + for _, spec in self._generator(signal_names, unique_names=False): + yield spec + + def _properties_service_model(self, signal_names, accessors): + """ Placeholder + """ + properties = [] + endpoint_members = {} + endpoint_types = {} + for signal_spec in self._specifications(signal_names): + interface = signal_spec[self.position.api.value] + if self.skip_interface(interface): + continue + endpoint = signal_spec[self.position.endpoint.value] + primitive = signal_spec[self.position.property_name.value] + if endpoint not in endpoint_members and primitive is not None: + endpoint_members[endpoint] = [] + if primitive is not None: + if endpoint not in endpoint_types: + endpoint_types[endpoint] = { + 'name': endpoint, + 'kind': 'struct', + 'description': { + 'brief': endpoint, + "full": "Generated from project without custom description" + }, + 'members': [] + } + endpoint_members[endpoint].append({ + 'name': primitive, + 'type': primitive, + }) + endpoint_types[endpoint]['members'].append({ + 'name': primitive, + 'type': signal_spec[self.position.property_type.value], + }) + else: + primitive_type = signal_spec[self.position.property_type.value] + primitive_desc = signal_spec[self.position.description.value] + primitive_unit = signal_spec[self.position.unit.value] + properties.append( + { + 'name': endpoint, + 'type': primitive_type, + 'unit': primitive_unit, + 'accessors': accessors, + 'description': { + 'brief': endpoint, + 'full': primitive_desc, + } + } + ) + for endpoint_name in sorted(endpoint_members): + properties.append( + { + 'name': endpoint_name, + 'type': endpoint_name, + 'unit': 'struct', + 'accessors': accessors, + 'description': { + 'brief': endpoint_name, + "full": "Generated from project without custom description"}, + } + ) + return_types = [] + for endpoint_name, endpoint_type in endpoint_types.items(): + return_types.append(endpoint_type) + return properties, return_types + + def skip_interface(self, interface): + """ Filter services not in list. + + Args: + service (str): interface + Returns: + skip (bool): Skip this interface + """ + if self.filter is None: + LOGGER.debug('No interface filter. Allowing everyone.') + return False + if interface in self.filter: + LOGGER.debug('%s is in %s', interface, self.filter) + return False + return True diff --git a/pybuild/interface/simulink.py b/pybuild/interface/simulink.py new file mode 100644 index 0000000..48348c4 --- /dev/null +++ b/pybuild/interface/simulink.py @@ -0,0 +1,249 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module to handle the Simulink interface.""" + + +from pybuild.lib import logger + +LOGGER = logger.create_logger("simulink") + + +def get_interface(interface_data_types, dp_interface, hal_interface, sfw_interface, method_interface): + """ Get interface combined for dp, hal and sfw + + Args: + interface_data_types (dict): User defined interface data types + dp_interface (dict): DP interface + hal_interface (dict): HAL interface + sfw_interface (dict): SFW interface + method_interface (dict): Method interface + Returns: + output ([dict]): Combined interface + """ + output = [] + output = add_dp(output, interface_data_types, split_interface(dp_interface)) + output = add_api(output, interface_data_types, split_interface(hal_interface)) + output = add_api(output, interface_data_types, split_interface(sfw_interface)) + output = add_methods(output, interface_data_types, method_interface) + + # Cannot have a completely empty adapters file, CSP will break + if not output: + if dp_interface: + output = ensure_raster(output, list(dp_interface.keys())[0] + '_Nothing__Always') + elif hal_interface: + output = ensure_raster(output, list(hal_interface.keys())[0] + '_Nothing_Always') + elif sfw_interface: + output = ensure_raster(output, list(sfw_interface.keys())[0] + '_Nothing_Always') + return output + + +def split_interface(interface): + """Takes a raster interface and splits it based on read strategies. + + Args: + interface (dict): DP/HAL/SFW raster interface. + Returns: + strategy_split_interface (dict): DP/HAL/SFW interface divided by read strategy. + """ + strategy_split_interface = {} + for raster, raster_data in interface.items(): + for port_type, signals in raster_data.items(): + for signal_spec in signals: + interface_name = signal_spec.get('api') or signal_spec.get('domain').replace('_', '') + new_raster = '_'.join([raster, interface_name, signal_spec['strategy']]) + if new_raster not in strategy_split_interface: + strategy_split_interface[new_raster] = {p: [] for p in raster_data} + strategy_split_interface[new_raster][port_type].append(signal_spec) + return strategy_split_interface + + +def ensure_raster(output, raster): + """ Ensure raster exists in the output + + Args: + output ([dict]): Combined interface + raster (str): Name of raster + Returns: + output ([dict]): Combined interface + """ + for adapter in output: + if adapter['name'] == raster: + return output + output.append( + { + "name": raster, + "ports": { + "in": {}, + "out": {} + } + } + ) + return output + + +def get_adapter(interface, raster): + """ Get adapter + + Args: + interface (dict): Combined interface + raster (str): Name of raster + Returns: + adapter (dict): Adapter for the raster already in the interface + """ + for adapter in interface: + if adapter['name'] == raster: + return adapter + raise KeyError(raster) + + +def add_dp(output, interface_data_types, interface): + """ Adds the DP interface to the combined interface + + Args: + output ([dict]): Combined interface + interface_data_types (dict): User defined interface data types + interface (dict): DP interface + Returns + output (dict): Combined interface + """ + ports = { + "consumer": "in", + "producer": "out" + } + for raster, raster_data in interface.items(): + if not isinstance(raster_data, dict): + LOGGER.debug('Ignoring metadata: %s', raster_data) + continue + output = ensure_raster(output, raster) + adapter = get_adapter(output, raster) + for port_type, signals in raster_data.items(): + for signal in signals: + data_type = signal['variable_type'] + primitive = ['signals'] + primitive.append(signal['domain']) + if signal['group'] is not None: + primitive.append(signal['group']) + primitive.append(signal['property']) + adapter['ports'][ports[port_type]][signal['variable']] = { + 'primitive': '.'.join(primitive), + 'type': data_type + } + if 'enums' in interface_data_types and data_type in interface_data_types['enums']: + csp_enum_definition = add_csp_enum_def(data_type, interface_data_types['enums'][data_type]) + if 'types' not in adapter: + adapter['types'] = [] + if csp_enum_definition not in adapter['types']: + adapter['types'].append(csp_enum_definition) + return output + + +def add_api(output, interface_data_types, interface): + """ Adds the HAL/GenericApi/SFW interface to the combined interface + + Args: + output ([dict]): Combined interface + interface_data_types (dict): User defined interface data types + interface (dict): HAL interface + Returns + output (dict): Combined interface + """ + ports = { + "consumer": "in", + "producer": "out" + } + for raster, raster_data in interface.items(): + if not isinstance(raster_data, dict): + LOGGER.debug('Ignoring metadata: %s', raster_data) + continue + output = ensure_raster(output, raster) + adapter = get_adapter(output, raster) + for port_type, signals in raster_data.items(): + for signal in signals: + data_type = signal['variable_type'] + primitive = [signal['api'].lower()] + primitive.append(signal['endpoint'].lower()) + if signal['property'] is not None: + primitive.append(signal['property'].lower()) + adapter['ports'][ports[port_type]][signal['variable']] = { + 'primitive': '.'.join(primitive), + 'type': data_type + } + if 'enums' in interface_data_types and data_type in interface_data_types['enums']: + csp_enum_definition = add_csp_enum_def(data_type, interface_data_types['enums'][data_type]) + if 'types' not in adapter: + adapter['types'] = [] + if csp_enum_definition not in adapter['types']: + adapter['types'].append(csp_enum_definition) + return output + + +def add_methods(output, interface_data_types, methods): + """ Adds the CSP method call interfaces to the combined interface. + + Args: + output ([dict]): Combined interface + interface_data_types (dict): Dict with enum definitions + methods (dict): Methods used by the application + Returns: + output (dict): Combined interface + """ + + if methods == {}: + return output + output = ensure_raster(output, 'csp_methods') + adapter = get_adapter(output, 'csp_methods') + if 'methods' not in adapter: + adapter['methods'] = [] + for method_data in methods.values(): + method_spec = {} + method_spec['name'] = method_data['name'] + method_spec['primitive_method'] = method_data['primitive'] + method_spec['namespace'] = method_data['namespace'] + if 'description' in method_data: + method_spec['description'] = method_data['description'] + for direction in ['in', 'out']: + parameters = method_data['ports'][direction] + if len(parameters) > 0: + method_spec[direction] = [] + for param_name, param_data in parameters.items(): + param_spec = {} + param_spec['name'] = param_name + param_spec['primitive_name'] = param_data['primitive'] + data_type = param_data['type'] + param_spec['type'] = data_type + method_spec[direction].append(param_spec) + if data_type in interface_data_types.get('enums', {}): + csp_enum_definition = add_csp_enum_def(data_type, interface_data_types['enums'][data_type]) + if 'types' not in adapter: + adapter['types'] = [] + if csp_enum_definition not in adapter['types']: + adapter['types'].append(csp_enum_definition) + adapter['methods'].append(method_spec) + return output + + +def add_csp_enum_def(enum_name, interface_enum_definition): + """ Returns a CSP style enumeration definition, given an interface style enum definition. + + Args: + enum_name (str): Name of the enumeration + interface_enum_definition (dict): Enumeration from interface data types + Returns: + csp_enum_definition (dict): Combined interface + """ + default = {} + enumerators = [] + for enum_member_definition in interface_enum_definition: + if 'default' in enum_member_definition: + default = {enum_member_definition['in']: enum_member_definition['out']} + else: + enumerators.append({enum_member_definition['in']: enum_member_definition['out']}) + + csp_enum_definition = { + 'name': enum_name, + 'kind': 'enum', + 'enumerators': enumerators, + 'default': default + } + return csp_enum_definition diff --git a/pybuild/interface/update_call_sources.py b/pybuild/interface/update_call_sources.py new file mode 100644 index 0000000..6c25722 --- /dev/null +++ b/pybuild/interface/update_call_sources.py @@ -0,0 +1,173 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module that handles the update of call sources.""" + + +import argparse +import re +from ruamel.yaml import YAML +from pathlib import Path + + +def parse_args(): + """ Parse arguments + + Returns: + Namespace: the parsed arguments + """ + parser = argparse.ArgumentParser() + parser.add_argument("interface", help="Interface specification dict", type=Path) + parser.add_argument("src_dir", help="Path to source file directory", type=Path) + parser.add_argument( + "-p", + "--project-config", + type=Path, + default=None, + help="Path to project config json file", + ) + return parser.parse_args() + + +def main(): + """ Main function for stand alone execution.""" + args = parse_args() + method_config = read_project_config(args.project_config) + with open(args.interface, encoding="utf-8") as interface_file: + yaml = YAML(typ='safe', pure=True) + adapter_spec = yaml.load(interface_file) + update_call_sources(args.src_dir, adapter_spec, method_config) + + +def read_project_config(project_config_path): + """ Reads project config file and extract method specific settings if they are present. + + Args: + project_config_path (Path): path to the ProjectCfg.json file + Returns: + method_config (dict): dictionary of method related configs. + """ + project_info = {} + if project_config_path is not None: + with project_config_path.open() as config_file: + yaml = YAML(typ='safe', pure=True) + config = yaml.load(config_file) + project_info = config["ProjectInfo"] + method_config = { + "adapter_declarations_change": project_info.get("adapterDeclarations", None) + } + method_config["method_call_wrapper"] = { + "pre": project_info.get("methodPreCallWrapper", ""), + "post": project_info.get("methodPostCallWrapper", "") + } + for key, value in method_config["method_call_wrapper"].items(): + if value != "": + method_config["method_call_wrapper"][key] = value + "\n" + + return method_config + + +def is_method_adapter(adapter): + """ Check if adapter has methods in it + + Args: + adapter (dict): adapter specification + Returns: + methods_in_adapter (bool): true if adapter contains methods, + false otherwise + """ + methods_in_adapter = "methods" in adapter and len(adapter["methods"]) > 0 + return methods_in_adapter + + +def update_call_sources(src_dir, adapter_spec, method_config): + """ Update the source files for specified method calls with + adapter function calls that trigger the methods. + + Args: + src_dir (Path): path to folder for method call sources + adapter_spec (list): adapter specifications with methods + method_config (dict): project specific method configs + """ + + method_adapters = [a for a in adapter_spec if is_method_adapter(a)] + for adapter in method_adapters: + for method in adapter["methods"]: + method_src = src_dir / (method["name"] + ".c") + with method_src.open("r+") as src_file: + old_src = src_file.read() + new_src = generate_src_code(adapter, method, old_src, method_config) + method_src.unlink() + with open(method_src.with_suffix(".cpp"), "w", encoding="utf-8") as dst_file: + dst_file.write(new_src) + method_header = src_dir / (method["name"] + ".h") + with method_header.open("r+") as header_file: + old_header = header_file.read() + new_header = generate_header_code(method_config, old_header) + header_file.seek(0) + header_file.write(new_header) + header_file.truncate() + + +def generate_header_code(method_config, old_header): + """ Change header code to include project specific adapter wrapper. + + Args: + method_config (dict): project specific method settings + old_header (string): header source code + Returns: + new_header (string): modified header source code + + """ + adapter_pattern = r'(?<=#include ")adapter_wrapper.hh' + if method_config["adapter_declarations_change"]: + new_header = re.sub( + adapter_pattern, method_config["adapter_declarations_change"], old_header + ) + return new_header + return old_header + + +def generate_src_code(adapter, method, old_src, method_config): + """ Generate the method call source code to trigger the method call + + Args: + adapter (dict): adapter specification + method (dict): method specification + old_src (string): method call source code with mock call + method_config (dict): project specific method settings + Returns: + new_src (string): method call source code with adapter function call + that triggers method + + """ + call_pattern = ( + r" \/\* CSP method call\n" + r"(.*)ADAPTER->METHOD(.*)" + r" CSP method call end\*\/\n" + ) + dummy_pattern = ( + r" \/\* C dummy call\*\/" r".*" r" \/\* C dummy call end\*\/\n" + ) + comment = ( + r"\/\* Used for running spm without csp, such as silver\n" + r" This code should be replaced when using csp. \*\/\n" + ) + name = method["name"] + adapter_name = [adapter["name"].title()] + namespace = [] + if method["namespace"] != "": + namespace = [method["namespace"]] + adapter = "::".join(namespace + adapter_name) + "->" + name + pre_call = method_config["method_call_wrapper"]["pre"] + post_call = method_config["method_call_wrapper"]["post"] + sans_comment = re.sub(comment, "", old_src) + sans_dummy_call = re.sub(dummy_pattern, "", sans_comment, flags=re.DOTALL) + new_src = re.sub( + call_pattern, pre_call + r"\1" + adapter + r"\2" + post_call, sans_dummy_call, flags=re.DOTALL + ) + return new_src + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/update_model_yaml.py b/pybuild/interface/update_model_yaml.py new file mode 100644 index 0000000..ec70b42 --- /dev/null +++ b/pybuild/interface/update_model_yaml.py @@ -0,0 +1,179 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for handling the update of model yaml files.""" + + +import argparse +from pathlib import Path +from ruamel.yaml import YAML +from pybuild.interface.application import Application +from pybuild.interface.base import BaseApplication + + +class BadYamlFormat(Exception): + """Exception to raise when signal is not in/out signal.""" + def __init__(self, signal): + self.message = f"{signal} is not in-signal or out-signal." + + +class UpdateYmlFormat(BaseApplication): + """Class to handle the update of model yaml files.""" + + def __init__(self, base_application): + self.base_application = base_application + self.raw = {} + self.app_insignals = self.get_insignals_name() + self.app_outsignals = self.get_outsignals_name() + + def read_translation(self, translation_file): + """Read specification of the yaml file. + + Args: + translation_file (Path): file with specs. + """ + if not translation_file.is_file(): + return {} + with open(translation_file, encoding="utf-8") as translation: + yaml = YAML(typ='safe', pure=True) + self.raw = yaml.load(translation) + + def parse_groups(self, signal_groups): + """Parse signal groups. + + Args: + signal_groups (dict): Hal/dp signal group in yaml file. + """ + for interface_type, group_definitions in signal_groups.items(): + for group in group_definitions: + for signals in group.values(): + self.check_signals({interface_type: signals}) + + def parse_hal_definitions(self, hal): + """Parse hal. + + Args: + hal (dict): hal in yaml file. + """ + self.parse_groups(hal) + + def parse_service_definitions(self, service): + """Parse service. + + Args: + service (dict): service in yaml file. + """ + for interface, definition in service.items(): + for apis in definition['properties']: + for signals in apis.values(): + self.check_signals({interface: signals}) + + def check_signals(self, signals_definition): + """check signal direction(in-signal or out-signal). + + Args: + signals_definition (dict): parsed yaml file. + """ + for specifications in signals_definition.values(): + for specification in specifications: + in_out_signal = [key for key in specification.keys() if 'signal' in key] + if in_out_signal == []: + raise ValueError(f"signal is not defined for property: {specification['property']} !") + if "in" in in_out_signal[0]: + if specification[in_out_signal[0]] not in self.app_insignals: + if specification[in_out_signal[0]] in self.app_outsignals: + specification["outsignal"] = specification[in_out_signal[0]] + else: + raise BadYamlFormat(specification[in_out_signal[0]]) + if "out" in in_out_signal[0]: + if specification[in_out_signal[0]] not in self.app_outsignals: + if specification[in_out_signal[0]] in self.app_insignals: + specification["insignal"] = specification[in_out_signal[0]] + else: + raise BadYamlFormat(specification[in_out_signal[0]]) + if in_out_signal[0] == "signal": + if specification["signal"] in self.app_insignals: + specification["insignal"] = specification["signal"] + del specification["signal"] + elif specification["signal"] in self.app_outsignals: + specification["outsignal"] = specification["signal"] + del specification["signal"] + else: + raise BadYamlFormat(specification[in_out_signal[0]]) + + def get_insignals_name(self): + """Base application in-signals. + """ + app_insignals = [] + for signal in self.base_application.insignals: + app_insignals.append(signal.name) + return app_insignals + + def get_outsignals_name(self): + """Base application out-signals. + """ + app_outsignals = [] + for signal in self.base_application.outsignals: + app_outsignals.append(signal.name) + return app_outsignals + + def parse_definition(self, definition): + """Parses all definition files + + Args: + definition (list(Path)): Definition files + """ + for translation in definition: + self.read_translation(translation) + self.check_signals(self.raw.get("signals", {})) + self.parse_groups(self.raw.get("signal_groups", {})) + self.parse_hal_definitions(self.raw.get("hal", {})) + self.parse_service_definitions(self.raw.get("service", {})) + self.write_to_file(translation) + + def write_to_file(self, translation): + """Write in/out signals to file + Args: + spec (dict): Specification + output (Path): File to write + """ + with open(translation, "w", encoding="utf-8") as new_file: + yaml = YAML() + yaml.dump(self.raw, new_file) + + +def get_app(config): + """ Get an app specification for the current project + + Args: + config (pathlib.Path): Path to the ProjectCfg.json. + Returns: + app (Application): pybuild project. + """ + app = Application() + app.parse_definition(config) + return app + + +def parse_args(): + """Parse command line arguments + + Returns: + (Namespace): Parsed command line arguments + """ + parser = argparse.ArgumentParser() + parser.add_argument("config", help="The SPA2 project config file", type=Path) + return parser.parse_args() + + +def main(): + """Main function for update model yaml.""" + args = parse_args() + app = get_app(args.config) + translation_files = app.get_translation_files() + uymlf = UpdateYmlFormat(app) + uymlf.parse_definition(translation_files) + + +if __name__ == "__main__": + main() diff --git a/pybuild/interface/zone_controller.py b/pybuild/interface/zone_controller.py new file mode 100644 index 0000000..b82b4c7 --- /dev/null +++ b/pybuild/interface/zone_controller.py @@ -0,0 +1,350 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Python module used for handling zone controller specifications""" +from ruamel.yaml import YAML +from pybuild.lib import logger +from pybuild.interface.base import BaseApplication + +LOGGER = logger.create_logger("base") + + +class BadYamlFormat(Exception): + """Exception to raise when in/out signal is not defined.""" + def __init__(self, message): + self.message = message + + +class ZCAL(BaseApplication): + """Zone controller abstraction layer""" + + def __repr__(self): + """String representation of ZCAL""" + return ( + f"" + ) + + def __init__(self, base_application): + """Create the interface object + + Currently, there is no verification that the signal is used. + + TODO: Check if the signal is a set or a get somewhere. Maybe in here. + + Args: + base_application (BaseApplication): Primary object of an interface + Usually a raster, but can be an application or a model too. + """ + self.name = "" + self.zc_translations = {} + self.composition_spec = {} + self.signal_names = {} + self.e2e_sts_signals = set() + self.update_bit_signals = set() + self.clear_signal_names() + self.interface_enums = set() + self.base_application = base_application + self.translations_files = [] + self.device_domain = base_application.get_domain_mapping() + self.signal_primitives_list = set() + + @staticmethod + def read_translation_files(translation_files, keys=None): + """ Searches translation files (yaml) for given keys at top level. Raises an + error if conflicting configurations are found among the files. Return a dict + containing the aggregated data found in the translation files for the keys + provided in the function call. + + Args: + translation_files (list): List of paths to files to search. + keys (list): List of keys to search among translation files for (all present keys by default). + + Returns: + specs (dict): Dictionary containing provided keys with the aggregated data + stored under those keys in translation files. + """ + + specs = {} + for translation_file in translation_files: + with open(translation_file, encoding="utf-8") as translation: + yaml = YAML(typ='safe', pure=True) + raw = yaml.load(translation) + used_keys = raw.keys() if keys is None else keys + for key in used_keys: + new_elements = raw.get(key, None) + if isinstance(new_elements, list): + specs[key] = specs.get(key, []) + new_elements + elif isinstance(new_elements, dict): + specs[key] = specs.get(key, {}) + if {**specs[key], **new_elements} != {**new_elements, **specs[key]}: + LOGGER.error( + "Conflicting configuration found for key '%s' among translation files: %s", + key, + translation_files, + ) + specs[key].update(new_elements) + return specs + + def add_signals(self, signals, signal_type="insignal", *args): + """Add signal names and properties + + Args: + signals (list(Signals)): Signals to use + signal_type (str): 'insignals' or 'outsignals' + """ + + type_in_zc = "insignals" if signal_type == "outsignals" else "outsignals" + for signal in signals: + if signal.name not in self.zc_translations: + continue + LOGGER.debug("Adding signal: %s", signal) + for translation in self.zc_translations[signal.name]: + signal_property = translation["property"] + struct_name = translation["struct_name"] + self.check_signal_property(struct_name, signal_property, type_in_zc) + self.signal_names["zc"][type_in_zc].add(signal_property) + self.signal_names["other"][signal_type].add(signal.name) + for e2e_sts_signal_name in self.e2e_sts_signals: + if e2e_sts_signal_name not in self.signal_names["other"]["insignals"]: + LOGGER.warning("E2E check signal %s not used in any model.", e2e_sts_signal_name) + else: + self.signal_names["other"][signal_type].add(e2e_sts_signal_name) + for update_bit_signal_name in self.update_bit_signals: + if update_bit_signal_name not in self.signal_names["other"]["insignals"]: + LOGGER.warning("Update bit signal %s not used in any model.", update_bit_signal_name) + else: + self.signal_names["other"][signal_type].add(update_bit_signal_name) + LOGGER.debug("Registered signal names: %s", self.signal_names) + + def check_signal_property(self, struct_name, property_name, signal_type): + """Check if we have only one signal written for the same property. + + Args: + struct_name (str): signal struct name + property_name (str): signal property + signal_type (str): insignal or outsignal + """ + signal_primitive_spec = ".".join([struct_name, property_name, signal_type]) + if signal_primitive_spec in self.signal_primitives_list: + error_msg = (f"You can't write {property_name} in {struct_name} as" + f" {signal_type} since this primitive has been used." + " Run model_yaml_verification to identify exact models.") + raise Exception(error_msg) + self.signal_primitives_list.add(signal_primitive_spec) + + def parse_definition(self, definition): + """Parses all translation files and populates class interface data. + + Args: + definition (list(Path)): Definition files + """ + + raw = self.read_translation_files(definition) + self.composition_spec = { + key: raw[key] for key in ("port_interfaces", "data_types", "calls") if key in raw + } + ports_info = {} + for port_name, port in raw.get("ports", {}).items(): + signal_struct = port.get("element", {}) + if signal_struct: + self.populate_signal_translations(signal_struct) + ports_info[port_name] = { + **self.get_port_info(signal_struct), + "interface": port.get("interface") + } + else: + raise Exception(f"Port {port_name} has no element.") + self.composition_spec["ports"] = ports_info + + @staticmethod + def get_port_info(signal_struct): + """Extract port information from signal elements in port. Raises exception + if signal elements are not exclusively sent in one direction. + + Args: + signal_struct (dict): Signal dict containing list of signal elements + Returns: + port_info (dict): Dict containing port direction and if any elements + should have an update bit associated with them. + """ + struct_name = list(signal_struct.keys())[0] + signal_elements = signal_struct[struct_name] + update_elements = set() + direction = None + for element in signal_elements: + if "insignal" in element: + temp_dir = "IN" + elif "outsignal" in element: + temp_dir = "OUT" + else: + raise BadYamlFormat(f"in/out signal for element in { struct_name } is missing.") + if direction is not None and direction != temp_dir: + raise BadYamlFormat(f"Signal { struct_name } has both in and out elements.") + direction = temp_dir + if element.get("updateBit", False): + update_elements.add(struct_name) + port_info = {"direction": direction} + if update_elements: + port_info["enable_update"] = list(update_elements) + return port_info + + def populate_signal_translations(self, struct_specifications): + """Populate class translations data. + + Args: + struct_specifications (dict): Dict with signal structs to/from a port. + """ + enumerations = self.base_application.enumerations + + struct_name = list(struct_specifications.keys())[0] + signal_definitions = struct_specifications[struct_name] + for signal_definition in signal_definitions: + if "insignal" in signal_definition: + signal_name = signal_definition["insignal"] + base_signals = self.base_application.insignals + elif "outsignal" in signal_definition: + signal_name = signal_definition["outsignal"] + base_signals = self.base_application.outsignals + else: + raise BadYamlFormat(f"in/out signal for { signal_name } is missing.") + base_properties = None + for base_signal in base_signals: + if signal_name == base_signal.name: + matching_base_signal = base_signal + base_properties = self.base_application.get_signal_properties( + matching_base_signal + ) + if base_properties is None: + raise BadYamlFormat(f"in/out signal for { signal_name } is missing.") + + if base_properties["type"] in enumerations: + if 'init' in signal_definition: + init_value = signal_definition["init"] + else: + if enumerations[base_properties['type']]['default_value'] is not None: + init_value = enumerations[base_properties['type']]['default_value'] + else: + LOGGER.warning('Initializing enumeration %s to "zero".', base_properties['type']) + init_value = [ + k for k, v in enumerations[base_properties['type']]['members'].items() if v == 0 + ][0] + else: + init_value = signal_definition.get("init", 0) + + update_bit = signal_definition.get("updateBit", False) + e2e_status = signal_definition.get("e2eStatus", False) + group = signal_definition.get("group", struct_name) + + translation = { + "range": { + "min": base_properties.get("min", "-"), + "max": base_properties.get("max", "-") + }, + "offset": base_properties.get("offset", "-"), + "factor": base_properties.get("factor", "-"), + "property": signal_definition["property"], + "init": init_value, + "struct_name": struct_name, + "variable_type": base_properties.get("type"), + "description": base_properties.get("description"), + "unit": base_properties.get("unit"), + "debug": base_properties.get("debug", False), + "dependability": e2e_status, + "update_bit": update_bit + } + + if signal_name not in self.zc_translations: + self.zc_translations[signal_name] = [] + self.zc_translations[signal_name].append(translation) + if update_bit: + update_bit_property = f"{struct_name}UpdateBit" + update_signal_name = f"yVc{group}_B_{update_bit_property}" + if signal_name == update_signal_name: + error_msg = f"Don't put updateBit status signals ({update_signal_name}) in yaml interface files." + raise BadYamlFormat(error_msg) + self.zc_translations[update_signal_name] = [ + { + "property": update_bit_property, + "variable_type": "Bool", + "property_interface_type": "Bool", + "offset": "-", + "factor": "-", + "range": { + "min": "-", + "max": "-", + }, + "init": 1, + "struct_name": struct_name, + "description": f"Update bit signal for signal {struct_name}.", + "unit": None, + "dependability": False, + "update_bit": True + } + ] + self.update_bit_signals.add(update_signal_name) + + if e2e_status: + if "outsignal" in signal_definition: + error_msg = "E2e status not expected for outsignals" + raise BadYamlFormat(error_msg) + + e2e_sts_property = f"{struct_name}E2eSts" + e2e_sts_signal_name = f"sVc{group}_D_{e2e_sts_property}" + + if signal_name == e2e_sts_signal_name: + error_msg = f"Don't put E2E status signals ({e2e_sts_signal_name}) in yaml interface files." + raise BadYamlFormat(error_msg) + if e2e_sts_signal_name not in self.zc_translations: + self.zc_translations[e2e_sts_signal_name] = [ + { + "property": e2e_sts_property, + "variable_type": "UInt8", + "property_interface_type": "UInt8", + "offset": 0, + "factor": 1, + "range": { + "min": 0, + "max": 255 + }, + "init": 255, + "struct_name": struct_name, + "description": f"E2E status code for E2E protected signal(s) {signal_name}.", + "unit": None, + "debug": False, + "dependability": True, + "update_bit": False + } + ] + self.e2e_sts_signals.add(e2e_sts_signal_name) + else: + translation = self.zc_translations[e2e_sts_signal_name][0] + translation["description"] = translation["description"][:-1] + f", {signal_name}." + + def clear_signal_names(self): + """Clear signal names + + Clears defined signal names (but not signal properties). + """ + self.signal_names = { + "zc": {"insignals": set(), "outsignals": set()}, + "other": {"insignals": set(), "outsignals": set()} + } + + def to_dict(self): + """Method to generate dict to be saved as yaml + + Returns: + spec (dict): Signalling specification + """ + spec = {"consumer": [], "producer": []} + + signal_roles = ["consumer", "producer"] + signal_types = ["insignals", "outsignals"] + for signal_role, signal_type in zip(signal_roles, signal_types): + for signal_name in self.signal_names["other"][signal_type]: + for signal_spec in self.zc_translations[signal_name]: + spec[signal_role].append({**signal_spec, "variable": signal_name}) + + return spec diff --git a/pybuild/lib/__init__.py b/pybuild/lib/__init__.py new file mode 100644 index 0000000..9429aad --- /dev/null +++ b/pybuild/lib/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""pybuild.lib.""" diff --git a/pybuild/lib/helper_functions.py b/pybuild/lib/helper_functions.py new file mode 100644 index 0000000..24ccd03 --- /dev/null +++ b/pybuild/lib/helper_functions.py @@ -0,0 +1,127 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for various helper functions.""" +import json +import collections +from pathlib import Path +from subprocess import getoutput + + +def get_repo_root(): + """ Return absolute path to repository where script is executed, regardless + of the current script's location. + + Returns: + path (str): Absolute, canonical path to the top-level repository. + if not a git repository, returns current working dir + + """ + try: + root = Path(getoutput('git rev-parse --show-toplevel')).resolve() + except (FileNotFoundError, OSError): + root = Path.cwd().resolve() + return str(root) + + +def create_dir(path: Path): + """If the directory for a given directory path does not exist, create it. + Including parent directories. + + Args: + path (Path): Path to directory. + Returns: + path (Path): Path to directory. + """ + if not path.is_dir(): + path.mkdir(parents=True) + return path + + +def merge_dicts(dict1, dict2, handle_collision=lambda a, b: a, merge_recursively=False): + """Merge two dicts. + + Args: + dict1 (dict): dict to merge + dict2 (dict): dict to merge + handle_collision (function(arg1, arg2)): function to resolve key collisions, + default keeps original value in dict1 + merge_recursively (bool): if set to True it merges nested dicts recursively with handle_collision + resolving collisions with non-dict types. + Returns: + dict: the result of the two merged dicts + """ + result = dict1.copy() + for key, value in dict2.items(): + if key not in result: + result.update({key: value}) + elif isinstance(result[key], dict) and \ + isinstance(value, dict) and \ + merge_recursively: + result[key] = merge_dicts(result[key], value, handle_collision, merge_recursively) + else: + result[key] = handle_collision(result[key], value) + return result + + +def deep_dict_update(base, add): + """Recursively update a dict that may contain sub-dicts. + + Args: + base (dict): The base dict will be updated with the contents + of the add dict + add (dict): This dict will be added to the base dict + + Returns: + dict: the updated base dict is returned + + """ + for key, value in add.items(): + if key not in base: + base[key] = value + elif isinstance(value, dict): + deep_dict_update(base[key], value) + return base + + +def deep_json_update(json_file, dict_to_merge): + """ Recursively update a json file with the content of a dict. + + Args: + json_file (path): json file. + dict_to_merge (dict): Dictionary that will be merged into json file, overwriting values and adding keys. + """ + with open(json_file, 'r', encoding="utf-8") as fle: + json_dict = json.load(fle) + merged_dict = merge_dicts( + json_dict, + dict_to_merge, + handle_collision=lambda a, b: b, + merge_recursively=True + ) + with open(json_file, 'w', encoding="utf-8") as fle: + json.dump(merged_dict, fle, indent=2) + + +def recursive_default_dict(): + """Returns recursively defined default dict. This allows people to insert + arbitrarily complex nested data into the dict without getting KeyErrors. + + Returns: + defaultdict(self): A new defaultdict instance, recursively defined. + """ + return collections.defaultdict(recursive_default_dict) + + +def to_normal_dict(weird_dict): + """Converts nested dict to normal, suitable for YAML/JSON dumping. + + Args: + weird_dict (dict): Any dict-like item that can be converted to a dict. + Returns: + dict(nested): An identical nested dict structure, but using real dicts. + """ + for key, value in weird_dict.items(): + if isinstance(value, dict): + weird_dict[key] = to_normal_dict(value) + return dict(weird_dict) diff --git a/pybuild/lib/logger.py b/pybuild/lib/logger.py new file mode 100644 index 0000000..d7807c8 --- /dev/null +++ b/pybuild/lib/logger.py @@ -0,0 +1,55 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for logging.""" +import os +import sys +import logging + +LEVEL_NOTSET = 'NOTSET' +LEVEL_DEBUG = 'DEBUG' +LEVEL_INFO = 'INFO' +LEVEL_WARNING = 'WARNING' +LEVEL_ERROR = 'ERROR' +LEVEL_CRITICAL = 'CRITICAL' + +LEVELS = { + LEVEL_NOTSET: logging.NOTSET, + LEVEL_DEBUG: logging.DEBUG, + LEVEL_INFO: logging.INFO, + LEVEL_WARNING: logging.WARNING, + LEVEL_ERROR: logging.ERROR, + LEVEL_CRITICAL: logging.CRITICAL +} + + +def parse_log_level(log_level_name): + """Convert textual log_level_name to numerical ones defined in logging module.""" + level = log_level_name.upper() + if level not in LEVELS: + print(f'Log level "{log_level_name}" invalid, valid list: {", ".join(LEVELS.keys())}', file=sys.stderr) + level = LEVEL_DEBUG + return LEVELS[level] + + +def create_logger(name, handler=None, log_format=None): + """Create a logger. + + If the handler already have a log format, it will be replaced. + + Args: + name (str): Name of the logger + handler (obj): Handler for the logger. Default used if not supplied. + log_format (str): Format for the handler. Default used if not supplied.' + Returns: + logger (obj): A logger with a handler and log format + """ + new_logger = logging.getLogger(name) + new_logger.setLevel(parse_log_level(os.getenv('LOG_LEVEL', LEVEL_INFO))) + if handler is None: + handler = logging.StreamHandler(sys.stdout) + if log_format is None: + log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' + handler.setFormatter(logging.Formatter(log_format)) + new_logger.addHandler(handler) + return new_logger diff --git a/pybuild/matlab_scripts/CodeGen/BuildAutomationPyBuild.m b/pybuild/matlab_scripts/CodeGen/BuildAutomationPyBuild.m new file mode 100644 index 0000000..72f14c4 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/BuildAutomationPyBuild.m @@ -0,0 +1,78 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Author: Henrik Wahlqvist +% Date: 31-01-2019 +% Purpose: This is for automatically generating c-files from MATLAB models. +% This program can also be used as daily PyBuild code generation. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function BuildAutomationPyBuild(mode, exitOnFailure, modelList) + try + addpath(genpath([pwd '/Projects'])); + addpath(genpath([pwd '/matlab-scripts'])); + + initFile = 'Init_PyBuild(false);'; + disp(['Running init file: ' initFile]) + evalin('base', initFile); + + %Update all models unless a list is provided: + if ~exist('modelList', 'var') + disp('Updating all models...'); + modelList = gatherAllModels(); + end + + updateModels(mode, pwd, modelList); + disp('Done.'); + + catch err + disp(getReport(err)) + if exitOnFailure + quit force; + end + end + if exitOnFailure + exit; + end + bdclose Vcc_Lib; +end + +function models = gatherAllModels() +% Function for gathering all models in the repo. + startdir = pwd; + models = {}; + modelsFolder = [startdir '/Models/']; + env_ssp = getenv('SSP'); + if isempty(env_ssp) + disp('ALL models') + ssps = dir([modelsFolder '*']); + else + ssp_dir = [modelsFolder env_ssp '*'] + disp(['All models in ' ssp_dir]) + ssps = dir(ssp_dir); + end + + for i=1:length(ssps) + if ~ssps(i).isdir + continue; + end + ssp = ssps(i).name; + currSspFolder = [modelsFolder ssp '/']; + cd(currSspFolder) + modelsInSsp = dir('Vc*'); + for j=1:length(modelsInSsp) + % Make sure it is a directory + if ~modelsInSsp(j).isdir + continue; + end + model = modelsInSsp(j).name; + % Make sure the directory contains an .mdl file + if isfile([model '/' model '.mdl']) + models = [models ['Models/' ssp '/' model '/' model '.mdl']]; + end + end + cd(startdir); + end +end diff --git a/pybuild/matlab_scripts/CodeGen/Generate_A2L.m b/pybuild/matlab_scripts/CodeGen/Generate_A2L.m new file mode 100644 index 0000000..9624521 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/Generate_A2L.m @@ -0,0 +1,125 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function Generate_A2L(CodegenFunction, A2lStylesheetName, model_ending) + if nargin < 3 + model_ending = '_Tmp'; + end + fprintf('\n\nGeneration of %s started\n\n', [CodegenFunction '.a2l']); + workspace = getenv('WORKSPACE'); + tl_config_dir = fullfile([workspace, '/ConfigDocuments/TL4_3_settings']); + if exist(tl_config_dir, 'dir') + TargetInfoDir = fullfile([tl_config_dir '/TargetInfo']); + TargetConfigDir = fullfile([tl_config_dir '/TargetConfig']); + else + TargetInfoDir = fullfile([getenv('TL_ROOT') '/Matlab/TL/ApplicationBuilder/BoardPackages/HostPC64/MSVC']); + TargetConfigDir = fullfile([getenv('TL_ROOT') '/Matlab/TL/TargetConfiguration/x86_64/MSVC']); + end + + ApplicationName = [CodegenFunction model_ending]; + BuildName = ['Build' CodegenFunction model_ending]; + + dsdd_manage_build('Create',... + 'Name', BuildName,... + 'Application', ApplicationName,... + 'TargetInfoDir', TargetInfoDir,... + 'TargetConfigDir', TargetConfigDir); + + enumDataTypesObj = dsdd('CreateEnumDataTypes', ['/' ApplicationName '/' BuildName]); + enumNames = GetUsedEnumerations(CodegenFunction); + for idx = 1:length(enumNames) + enumName = enumNames{idx}; + underlyingDataType = CalculateUnderlyingDataType(CodegenFunction, enumName); + [hDDTypedef, ~, ~] = tlEnumDataType('CreateDDTypedef',... + 'SLEnumType', enumName,... + 'TypedefGroup', ['/' ApplicationName '/' BuildName '/EnumDataTypes'],... + 'CreateTemplate', 'off'); + dsdd('SetUnderlyingEnumDataType', hDDTypedef, underlyingDataType); + dsdd('SetTag', hDDTypedef, [enumName '_tag']); + end + + dsdd_export_a2l_file(... + 'Application', ApplicationName,... + 'Build', BuildName,... + 'TargetInfoDir', TargetInfoDir,... + 'TargetConfigDir', TargetConfigDir,... + 'StyleSheet', A2lStylesheetName,... + 'File', [CodegenFunction '.a2l'],... + 'ProjectFrame', 'off',... + 'OverwriteCalProperties', 'on',... + 'MergeA2lModules', 'on',... + 'asap2version', '1.40',... + 'UseLookupStructures', 'off',... + 'ExternalVariables', 'on',... + 'UseUnderlyingEnumDataTypeInfo', 'on'); + + % Delete created enums, these can cause problems for upcoming code generation calls on models + % using the same enumerations. + dsdd('Delete', enumDataTypesObj); + + fprintf('\n\nGeneration of %s finished\n\n', [CodegenFunction '.a2l']); +end + +function enumerations = GetUsedEnumerations(modelName) +%GETUSEDENUMERATIONS Get all enumeration names used in a given model. + unsupportedByTLAPI = {'TL_DummyTrigger', 'TL_Enable', 'TL_Function', 'TL_SimFrame'}; + tlBlocksTmp = find_system(modelName, 'FindAll', 'on', 'LookUnderMasks', 'All', 'RegExp', 'on', 'MaskType', 'TL_*'); + maskTypesTmp = get_param(tlBlocksTmp, 'MaskType'); + supportedTlBlocks = tlBlocksTmp(ismember(maskTypesTmp, unsupportedByTLAPI)==0); + [allDataTypes, invalidIndices, ~] = tl_get(supportedTlBlocks, 'output.type'); + validTlBlocks = supportedTlBlocks(~invalidIndices); + validDataTypes = allDataTypes(~invalidIndices); + enumBlocks = validTlBlocks(strcmp(validDataTypes, 'IMPLICIT_ENUM')); + unitsTmp = tl_get(enumBlocks, 'output.unit'); + if ~iscell(unitsTmp) + unitsTmp = {unitsTmp}; + end + if ~isempty(unitsTmp) + units = unitsTmp(cellfun(@(x) ~isempty(x), unitsTmp)); + enumerations = unique(erase(units, ['-', ',', '$'])); + else + enumerations = {}; + end +end + +function underlyingDataType = CalculateUnderlyingDataType(modelName, enumName) +%CALCULATEUNDERLYINGDATATYPE Calculate best fitting data type given a name of an enumeration. +% This is done by find min and max values, than choosing a fitting data type, as small as possible. + enumMemberNames = enumeration(enumName); + if isempty(enumMemberNames) + error([... + 'Cannot get enum name %s from model %s.',... + 'Enum name should match the unit in applicable blocks, e.g. -,$EnumName.'... + ], enumName, modelName); + end + % int32 is super class of Simulink.IntEnumType + enumMemberValues = int32(enumMemberNames); + minValue = min(enumMemberValues); + maxValue = max(enumMemberValues); + + % TODO Consider forcing signed like CS (or ARXML, from database?) does, seems to be int8 specifically + underlyingDataType = ''; + if minValue >= 0 + if maxValue <= 255 + underlyingDataType = 'UInt8'; + elseif maxValue <= 65535 + underlyingDataType = 'UInt16'; + end + elseif minValue >= -128 + if maxValue <= 127 + underlyingDataType = 'Int8'; + elseif maxValue <= 32767 + underlyingDataType = 'Int16'; + end + elseif minValue >= -32768 + if maxValue <= 32767 + underlyingDataType = 'Int16'; + end + end + + if isempty(underlyingDataType) + error(... + 'Unhandled enum size, name: %s, min: %s, max: %s. Valid types are uint8/16 and int8/16',... + enumName, minValue, maxValue); + end +end diff --git a/pybuild/matlab_scripts/CodeGen/generateTLUnit.m b/pybuild/matlab_scripts/CodeGen/generateTLUnit.m new file mode 100644 index 0000000..f28d599 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/generateTLUnit.m @@ -0,0 +1,239 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function res = generateTLUnit(RootFolder, model, SSP) +%Generates c and config files for a unit based on a TL-model + %TODO: Why does this generate TLSim and sfunctions? + commonFolder = [RootFolder '/Models/Common/pybuild_src']; + % TODO: When we deploy pybuild we should replace Common/pybuild_src with Common + % TODO: Write a matlab config reader to get these values + baseFolder = [RootFolder '/Models/' SSP '/' model]; + srcFolder = [baseFolder '/pybuild_src']; + srcFolderTmp = [srcFolder '/Tmp']; + cfgFolder = [baseFolder '/pybuild_cfg']; + tmpMdlFolder = [baseFolder '/tmpMdl']; + + %run par file again, just to be sure the set values are used + global Vc; + oldVc = Vc; + par_f_path = [model '_par.m']; + run(par_f_path); + if ~isequal(oldVc, Vc) + warning('Vc has been updated.') + end + + %create folders if they are missing + folders = {srcFolder srcFolderTmp cfgFolder tmpMdlFolder commonFolder}; + for i=1:length(folders) + folder = folders{i}; + % isdir check needed, rmdir may fail due to permissions + if ~isdir(folder) + mkdir(folder); + end + fprintf('Created folder %s\n', folder); + end + + % Add matlab_src and c_src folders to the path if they exist + matlabSrcFldr = [baseFolder '/matlab_src']; + if isdir(matlabSrcFldr) + addpath(matlabSrcFldr) + end + cSrcFldr = [baseFolder '/c_src']; + if isdir(cSrcFldr) + addpath(cSrcFldr) + fprintf('\nCopy c_src files to src folder\n'); + copyfile([cSrcFldr '/*.*'], srcFolder); + end + + % Load libraries +% block_libraries = dir(include_folder, '**\*.slx'); +% for i=1:length(block_libraries) +% block_library = block_libraries(i); +% load_system(block_library.name); +% end + + + %diary([baseFolder '/' model '.log']); + fp= fopen([baseFolder '/' model '.log'], 'w'); + unitCfg = [cfgFolder '/config_' model '.json']; + fprintf('\nStart generation of temporary unitCfg %s for model %s\n', unitCfg, model); + info = parseModelInfo(RootFolder, model, cfgFolder); + struct2JSON(info, unitCfg); + fprintf('\nFinished generation of temporary unitCfg for model %s\n', model); + + % Do this in better way to control where the model is stored + fprintf('\nStart temp model generation for model %s\n', model); + load_system(model) + tmpMdl = [model '_OPortMvd']; + save_system(model, [tmpMdlFolder '/' tmpMdl '.mdl']); + subsystem = regexprep(model, '([A-Za-z0-9]+)(__\w+){0,1}','$1'); + moveDefOutports([tmpMdl '/' subsystem '/Subsystem/' subsystem]); + configSet = getActiveConfigSet(tmpMdl); + % Set sample times to a constant, to avoid problems when the ts + % variable for the model isn't set (happens as this script is run + % over all models, not only the ones currently in the project) + set_param(configSet, 'SolverType', 'Fixed-step'); + set_param(configSet, 'FixedStep', '0.01'); + fnc_g = find_system(tmpMdl, 'FindAll', 'on', 'LookUnderMasks', 'all', ... + 'SearchDepth', '1', ... + 'MaskType', 'Function-Call Generator'); + set_param(fnc_g, 'sample_time', '0.01'); + fprintf('\nFinished temp model generation for model %s\n', model); + + %Generate code + currDir = pwd; + cd(srcFolderTmp); + MILSystem=find_system(get_param(tmpMdl, 'handle'), 'lookundermasks', 'on', 'tag', 'MIL Subsystem'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% TL has a name length limitation on define file names (10 chars). + %%% Define special IDs for debug models such that their + %%% tl_defines_-files get unique names and don't overwrite each other. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + CurrentFunctionName = model; + CodeGenConfigPath = [RootFolder '/ConfigDocuments/matlab_script_config/CodeGen_config.json']; + if isfile(CodeGenConfigPath) + CodeGenConfig = loadjson(CodeGenConfigPath); + ProblemModels = CodeGenConfig.problem_models_id_map; + else + warning('Found no config file: %s.', CodeGenConfigPath) + ProblemModels = struct(); + end + + if isfield(ProblemModels, CurrentFunctionName) + ModelID = ProblemModels.(CurrentFunctionName); + warning('There are multiple models with the same ID (character 3-12 of the model name)') + ModelsString = join(fieldnames(ProblemModels), ', '); + disp(['This is one of: ' ModelsString{1}]) + else + ModelID = CurrentFunctionName(3:min(end,12)); + end + set_tlsystemID(MILSystem, ModelID); + + % Default code generation settings + tl_set(... + tmpMdl, ... + 'codeopt.cleancode', 1, ... + 'codeopt.sections', 1, ... + 'codeopt.optimization', 1, ... + 'codeopt.sfbitfields', 1, ... + 'codeopt.globalbitfields', 0, ... + 'codeopt.optimizedbooltype', 1, ... + 'codeopt.functionsfor64bitops', 0, ... + 'codeopt.limidentlength', 1, ... + 'codeopt.noinitstozero', 0, ... + 'codeopt.sharefunctions', 1 ... + ); + + % Custom code generation settings + CCodeStyleSheetPath = [RootFolder '/ConfigDocuments/TL4_3_settings/CodeConfig/cconfig.xml']; + if exist(CCodeStyleSheetPath, 'file') + fprintf('\nUsing custom C code style sheet %s\n', CCodeStyleSheetPath); + tl_set(tmpMdl, 'codeopt.outputstylefile', CCodeStyleSheetPath); + end + + fprintf('\nStart code generation of %s\n', tmpMdl); + warning('off', 'all') + ds_error_set('BatchMode', 'on'); + ds_error_display('PrintMessage','off'); + ds_error_set('DefaultExcludedMessages', [17291 17001 17218 20281 19611 15229 15365 19001 15550]); + tl_generate_code('Model', tmpMdl, 'SimMode', 'none') + warning('on', 'all') + ds_error_set('BatchMode', 'off'); + % print to stdout so the errors are displayed in the diary + msgs = ds_error_get('AllMessages'); + for i=1:length(msgs) + msg = msgs(i); + fprintf(fp, '%s(%d) = %s\n',msg.type,msg.number,msg.msg); + end + if tl_error_check + close_system(tmpMdl, 1); + close_system(model, 0); + error('Errors detected'); + end + + + fprintf('\nFinished code generation of %s\n', tmpMdl) + % print all messages + chdir(srcFolder); + A2lStylesheetName = [RootFolder '/ConfigDocuments/a2l_export_nd.xsl']; + Generate_A2L(tmpMdl, A2lStylesheetName, ''); + close_system(tmpMdl, 1); + process_generated_code(commonFolder, srcFolderTmp, srcFolder, subsystem, tmpMdl, model) + fprintf('\nStart updating unitCfg %s based on generated code', unitCfg); + updateCodeSwConfig(RootFolder, [baseFolder '/' model '.mdl']) + fprintf('\nFinished updating unitCfg %s based on generated code', unitCfg); + fclose(fp); + close_system(model, 0); + chdir(currDir); +end + +function process_generated_code(commonFolder, srcFolderTmp, srcFolder, subsystem, tmpMdl, model) + force_movefile = 'f'; + force_rmdir = 's'; + subsystem = regexprep(model, '([A-Za-z0-9]+)(__\w+){0,1}','$1'); + generated_files = dir([srcFolderTmp '/TLProj/' subsystem '/*.*']); + for generated_file = generated_files' + file_path = [generated_file.folder '/' generated_file.name]; + if isdir(file_path) + disp([file_path ' is a directory. Skipping.']) + elseif isfile([commonFolder '/' generated_file.name]) + disp([file_path ' is a common file. Skipping.']) + elseif strcmp(generated_file.name, 'a2lexport.log') + disp([file_path ' is a log file. Skipping.']) + else + post_process_source_file(file_path) + if is_common_name(generated_file) + disp(['Moving from ' file_path ' to ' commonFolder]) + movefile(file_path, commonFolder, force_movefile); + else + disp(['Moving from ' file_path ' to ' srcFolder]) + movefile(file_path, srcFolder, force_movefile); + end + end + end + fprintf('\nMoved src code to %s\n', srcFolder); + %TODO: remove the A2L-generation log & dd files + rmdir(srcFolderTmp, force_rmdir); + movefile([srcFolder '/' tmpMdl '.a2l'], [srcFolder '/' model '.a2l'], force_movefile); +end + +function post_process_source_file(file_path) + disp('Starting source file post-process') + file_contents = fileread(file_path); + post_process_functions = {@remove_unsupported_comments}; + for function_index = 1:length(post_process_functions) + file_contents = post_process_functions{function_index}(file_contents); + end + disp(['Updating file contents of file: "' file_path '"']) + write_file(file_path, file_contents) +end + +function updated_file_content = remove_unsupported_comments(file_content) + disp('Replacing C++ style comments "//" with C style comments "/**/" for Green Hills compatibility') + file_lines = splitlines(file_content); + expression = '//(.*)$'; + replace_with = '/*$1*/'; + updated_file_lines = regexprep(file_lines, expression, replace_with); + updated_file_content = strjoin(updated_file_lines, newline); +end + +function write_file(file_path, file_content) + file_id = fopen(file_path, 'w'); + fprintf(file_id, '%s\n', file_content); + fclose(file_id); +end + +function common = is_common_name(generated_file) + % common = is_common(generated_file) + % + % Check if the file should be located in the common folder + common = false; + % TODO: Find more common files and add to this function + if strncmp(generated_file.name, 'Tab', 3) + common = true; + elseif strcmp(generated_file.name, 'tl_basetypes.h') + common = true; + elseif strcmp(generated_file.name, 'tl_types.h') + common = true; + end +end diff --git a/pybuild/matlab_scripts/CodeGen/getAsilClassification.m b/pybuild/matlab_scripts/CodeGen/getAsilClassification.m new file mode 100644 index 0000000..dc0ad28 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/getAsilClassification.m @@ -0,0 +1,28 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function level = getAsilClassification(rootFolder, model) +% Function which defines the ASIL level given a model. +% Specific ASIL levels must be specified in a configuration file. +% rootFolder: The root folder of the project. +% model: Model name. + + % Struct which defines the ASIL level for dependability models. + % These models will be converted to use TL ASIL classes, in order + % to allocate them to the correct memory area. + codeGenConfigPath = [rootFolder '/ConfigDocuments/matlab_script_config/CodeGen_config.json']; + if isfile(codeGenConfigPath) + CodeGenConfig = loadjson(codeGenConfigPath); + depMdls = CodeGenConfig.dependability_model_asil_class; + else + warning('Found no config file: %s.', codeGenConfigPath) + depMdls = struct(); + end + + model_wo_suffix = regexprep(model, '(\w+)__.*', '$1'); + if isfield(depMdls, model_wo_suffix) + level = depMdls.(model_wo_suffix); + else + level = 'QM'; + end +end diff --git a/pybuild/matlab_scripts/CodeGen/modelConfiguredForTL.m b/pybuild/matlab_scripts/CodeGen/modelConfiguredForTL.m new file mode 100644 index 0000000..e26ec20 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/modelConfiguredForTL.m @@ -0,0 +1,28 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function TF = modelConfiguredForTL(rootFolder, modelFolder, modelName) +% Function that checks if model is configured for TargetLink +% rootFolder: The root folder of the project +% modelName: Name of model +% ssp: project name + + curr_dir = pwd; + + cd([rootFolder '/' modelFolder]); + run(['./' modelName '_par.m']); + load_system(modelName); + + TLDefineBlock = find_system(modelName, 'SearchDepth', 1, ... + 'Name', 'TargetLink Main Dialog'); + + if isempty(TLDefineBlock) + TF = false; + else + TF = true; + end + + % Close system without saving + close_system(modelName, 0) + cd(curr_dir); +end diff --git a/pybuild/matlab_scripts/CodeGen/moveDefOutports.m b/pybuild/matlab_scripts/CodeGen/moveDefOutports.m new file mode 100644 index 0000000..c27aba4 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/moveDefOutports.m @@ -0,0 +1,88 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function Outport = moveDefOutports(top_system) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Replace the top level TL-outports with simulink outports, and +%% define a new TL-outport in the innermost level outport +%% so that the port will be removed if it is within +%% preprocessor directive +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %TODO: Check if only ports att the top system shall be considered + tlOutports = find_system(top_system, 'FindAll', 'on', 'LookUnderMasks', 'all', ... + 'SearchDepth', 1,'MaskType', 'TL_Outport'); + for i=1:length(tlOutports) + moveDefOutport(tlOutports(i)) + end + +end + +function Outport = moveDefOutport(outport) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Unenhance the TL-outport, and +%% define a new TL-outport in the lowest level outport -> +%% that the port will be removed if the port is within +%% preprocessor directive +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %% remove outport and add terminator + lowLevelOutport = getDefOutport(outport); + if lowLevelOutport == -1 + return + end + srcBlkCodeSw = getCodeSwitches(lowLevelOutport); + if ~strcmp(srcBlkCodeSw, 'all') + ll_parent = get_param(lowLevelOutport, 'Parent'); + ll_name = get_param(lowLevelOutport, 'Name'); + ll_pn_str = get_param(lowLevelOutport, 'Port'); + ll_pn = str2double(ll_pn_str); + llp_phs = get_param(ll_parent, 'PortHandles'); + llp_ph = llp_phs.Outport(ll_pn); + ll_line = get_param(llp_ph, 'Line'); + ll_line_name = get_param(ll_line, 'Name'); + dst_phs = get_param(ll_line, 'DstPortHandle'); + + % Replace inner simulink-port with new encapsulated TL-port from + % Vcc_Lib + new_blk_tmp = replace_block(ll_parent, 'SearchDepth' ,1, 'Name', ll_name, ... + 'Vcc_Lib/Signals and systems/EncapsulatedOut', 'noprompt'); + new_blk = new_blk_tmp{1}; + set_param(new_blk, 'LinkStatus', 'none'); + + % Replace inner TL-port with original TL-port + new_port_tmp = replace_block([new_blk '/EncapsulatedSubsystem'], 'SearchDepth' ,1, 'Name', 'Out', getPath(outport), 'noprompt'); + new_port = new_port_tmp{1}; + + % Reconnect lines + tmp_lines = find_system(new_blk, 'FindAll', 'on', 'Type', 'Line'); + for line = tmp_lines' + line_parent = get_param(line, 'Parent'); + line_points = get_param(line, 'Points'); + delete_line(line); + add_line(line_parent, line_points); + end + + % Replace unconnected lines with ground block + for tmp_dst = dst_phs' + tmp_parent = get_param(ll_parent, 'Parent'); + tmp_lines = find_system(tmp_parent, 'FindAll', 'on', 'SearchDepth', 1, ... + 'Type', 'line', 'SrcPortHandle', -1); + if ~isempty(tmp_lines) + tmp_line_dsts = get_param(tmp_lines, 'DstPortHandle'); + delete_line(tmp_lines); + for line_dst = tmp_line_dsts + tmp_pos = get_param(line_dst, 'Position'); + tmp_pos = repmat(tmp_pos, 1, 2) + [-30 -10 -10 10]; + h = add_block('simulink/Sources/Ground', [tmp_parent '/Ground'], ... + 'MakeNameUnique', 'on', 'Position', tmp_pos); + tmp_ph = get_param(h, 'PortHandles'); + add_line(tmp_parent, tmp_ph.Outport(1), line_dst); + end + end + end + + % Un-enhance old outer TL-port to simulink-port + dummy = tl_unenhance_block(outport, struct('bSaveTLData',0)); + end +end diff --git a/pybuild/matlab_scripts/CodeGen/parseCalMeasData.m b/pybuild/matlab_scripts/CodeGen/parseCalMeasData.m new file mode 100644 index 0000000..dd35906 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseCalMeasData.m @@ -0,0 +1,406 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function [ allVariables ] = parseCalMeasData( system ) +% parseCalMeasData Parse calibration measurement data +% +% See also parseModelInfo + + allVariables=struct; + evalin('base', [system '_par']); + allVariables.local_vars=struct; + allVariables.calib_consts=struct; + + tmp=sortSystemByClass(system); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Measurable variables + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + blocksTmp=tmp.CVC_DISP; + % find all TL_Outports (should not be included in measurement variables + % as they should be included in the outports key + outports = find_system(topLevelSystem(system), 'FindAll', 'on', ... + 'LookUnderMasks', 'all', 'MaskType', 'TL_Outport'); + blocks = setdiff(blocksTmp, outports); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'local_vars', 'output'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Cal variables + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + blocks=tmp.CVC_CAL; + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'output'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Prelookups + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + blocks=find_system(get_param(system,'handle'), 'lookundermasks', 'on', 'masktype', 'TL_IndexSearch'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'input'); + + blocks=find_system(get_param(system,'handle'), 'lookundermasks', 'on', 'masktype', 'TL_PreLookup'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'input'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Lookups + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + blocks=find_system(get_param(system,'handle'), 'lookundermasks', 'on', 'regexp', 'on', 'masktype', 'TL_Interpolation.*'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'table'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Stateflow + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + stateflow=find_system(get_param(system, 'handle'), 'FindAll', 'on', ... + 'lookundermasks', 'on', 'masktype', 'Stateflow'); + for i=1:length(stateflow) + allVariables = Create_Struct_SFlow(system, allVariables, stateflow(i)); + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % CustomCode blocks + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + customCode=find_system(get_param(system, 'handle'), 'FindAll', 'on', ... + 'lookundermasks', 'on', 'masktype', 'TL_CustomCode'); + for i=1:length(customCode) + allVariables = createStructCustCode(system, allVariables, customCode(i)); + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % TCM specific blocks + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Lookup1D + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + blocks = find_system(get_param(system, 'handle'), 'lookundermasks', 'on', ... + 'masktype','TL_Lookup1D'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'input'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'table'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Lookup2D + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + blocks = find_system(get_param(system,'handle'),'lookundermasks','on','masktype','TL_Lookup2D'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'row'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'col'); + allVariables = Create_Standard_Struct(system, allVariables, blocks, 'calib_consts', 'table'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +end + +function allVariables = Create_Standard_Struct(systemIn, allVariables, ... + blocks, structName, field) + + if ~isempty(blocks) + TLFields={'type', 'unit', 'description', 'max', 'min', 'lsb', ... + 'offset', 'class'}; + system = regexprep(systemIn,'(\w+?)(__.*){0,1}','$1'); + for block = blocks' + class=tl_getfast(block, [field '.class']); + if ~isempty(class) && ~strcmp(class, 'default') + name=tl_getfast(block, [field '.name']); + res = regexp(name, '(\$[SD])', 'match', 'once'); + if ~isempty(res) + o = sprintf('Warning %s in block
    %s', ... + res, getPath(block), getName(block)); + disp(o) + %hilite_system(block) + else + variableName=Get_Full_Name(block, name, system); + if sum(isstrprop(variableName, 'wspace')) > 0 + o = sprintf('Illegal characters in the name property in block %s', ... + getPath(block), getName(block)); + disp(o) + error('aborting') + end + %VariableName = VariableName(isstrprop(VariableName, 'wspace') == 0); + if ~isempty(variableName) + for tlField = TLFields + tmp_tlField = tlField{1}; + if ismember(get_param(block, 'masktype'), ... + {'TL_RelationalOperator', 'TL_LogicalOperator'}) && ... + ismember(tmp_tlField , {'max', 'min', 'lsb', 'offset'}) + allVariables.(structName).(variableName).(tmp_tlField) = '-'; + elseif ismember(get_param(block, 'masktype'), {'TL_BitwiseOperator'}) ... + && ismember(tmp_tlField , {'max', 'min', 'lsb', 'offset', 'unit'}) + allVariables.(structName).(variableName).(tmp_tlField) = '-'; + else + Value=tl_getfast(block, [field '.' tmp_tlField]); + if iscell(Value) + Value = Value{1}; + end + if strcmp(Value, 'IMPLICIT_ENUM') + Value = getEnumName(block); + end + allVariables.(structName).(variableName).(tmp_tlField) = checkValue(Value); + end + end + allVariables.(structName).(variableName).handle = getPath(block); + consumerBlks = getConsumerBlocks(block); + if isempty(consumerBlks) + allVariables.(structName).(variableName).configs = getCodeSwitches(block); + else + codeSwTmp = {}; + for j=1:length(consumerBlks) + consBlk = consumerBlks(j); + codeSwTmp{j} = getCodeSwitches(consBlk); + end + allVariables.(structName).(variableName).configs = removeConfigDuplicates(codeSwTmp); + end + if ismember(get_param(block, 'masktype'), {'TL_IndexSearch', 'TL_Interpolation'}) ... + && ~strcmp(field,'output') + InputValue=evalin('base', tl_getfast(block, [field '.value'])); + VarSize=size(InputValue); + allVariables.(structName).(variableName).width = VarSize; + elseif strcmp(get_param(block, 'masktype'), 'TL_Constant') && strcmp(field,'output') + ConstantValue=evalin('base', tl_getfast(block, [field '.value'])); + VarSize=size(ConstantValue); + if VarSize(2) == 1 + allVariables.(structName).(variableName).width = 1; + else + allVariables.(structName).(variableName).width = VarSize; + end + elseif strcmp(get_param(block, 'masktype'), 'TL_IndexSearch') && strcmp(field, 'output') + if tl_getfast(block, 'outputmode') == 2 + VarSize = [1,2]; + else + VarSize = 1; + end + allVariables.(structName).(variableName).width = VarSize; + else + allVariables.(structName).(variableName).width = 1; + end + allVariables.(structName).(variableName) = modifyEnumStructField(allVariables.(structName).(variableName)); + if length(variableName) > 63 + % Can't store the full name as a struct key as matlab only supports key lengths < 64 + o = sprintf('Warning variable name %s is longer than 63 chars, consider shortening it.', variableName); + disp(o) + allVariables.(structName).(variableName).unshortenedName = variableName; + end + end + end + end + end + end +end + +function allVariables = Create_Struct_SFlow(system, allVariables, sFlow) + configs = getCodeSwitches(sFlow); + % Handle stateflow outports + tmp_SFObj = get_param(sFlow, 'Object'); + chartObj = tmp_SFObj.find('-isa', 'Stateflow.Chart'); + sfDataArr = chartObj.find('-isa', 'Stateflow.Data'); + idArr = arrayfun(@(x) x.Id, sfDataArr); + sfHandles = tl_get_sfobjects(sFlow, {'SF Output', 'SF Local'}); + for i=1:length(sfHandles) + SfHandle = sfHandles(i); + idx = idArr == SfHandle; + sfData = sfDataArr(idx); + tlClass = tl_get(SfHandle, 'class'); + if checkClass(tlClass, sFlow, sfData) + continue % do nothing, if NVM, default class, or name error. NVM is handled elsewhere + end + tlName = tl_get(SfHandle, 'name'); + res = regexp(tlName, '(\$[SDCB])', 'tokens'); + if isempty(res) + allVariables = copyFields(system, allVariables, sFlow, SfHandle, configs, sfData.port); + else + err_msg = res{1}{1}; + if isnan(sfData.port) + port = ''; + else + port = [':' num2str(sfData.port)]; + end + o = sprintf('Warning %s in %s - %s (%s%s)', ... + err_msg, getPath(sFlow), get_param(sFlow, 'name'), sfData.name, sfData.scope, port); + disp(o) + end + end +end + +function allVariables = createStructCustCode(system, allVariables, custCodeBlk) + custFields={'type', 'unit', 'description', 'max', 'min', 'lsb', ... + 'offset', 'class'}; + parTypes = {'state', 'work', 'param', 'input', 'output'}; + structName = {'local_vars', 'local_vars', 'calib_consts', 'local_vars', 'local_vars'}; + numTypes = cellfun(@(x) tl_get(custCodeBlk, ['num' x 's']), parTypes, 'uni', false); + for pti = 1:length(parTypes) + pType = parTypes{pti}; + for idx=1:numTypes{pti} + class = tl_get(custCodeBlk, [pType '(' num2str(idx) ').class']); + if ~ismember(class, {'default', 'STATIC_LOCAL_MACRO'}) + name = tl_get(custCodeBlk, [pType '(' num2str(idx) ').name']); + if ~ismember(pType, {'output'}) && ~isempty(regexp(name, '\$L', 'once')) + error('Can not use $L macro in non output parameters') + end + if ~isempty(regexp(name, '\$S', 'once')) + error('Can not use $S macro in name.') + end + varName = getSignalName(system, custCodeBlk, name, idx); + for fldidx = 1:length(custFields) + fld = custFields{fldidx}; + value = val2str(tl_get(custCodeBlk, [ pType '(' num2str(idx) ').' fld ])); + if strcmp(value, 'IMPLICIT_ENUM') + allVariables.(structName{pti}).(varName).(fld) = getEnumName(custCodeBlk); + else + allVariables.(structName{pti}).(varName).(fld) = value; + end + end + if strcmp(pType, 'param') + inputValue=evalin('base', tl_get(custCodeBlk, [pType '(' num2str(idx) ').value'])); + varSize=size(inputValue); + allVariables.(structName{pti}).(varName).width = varSize; + else + %TODO: Check width parameter? + allVariables.(structName{pti}).(varName).width = 1; + end + allVariables.(structName{pti}).(varName) = modifyEnumStructField(allVariables.(structName{pti}).(varName)); + allVariables.(structName{pti}).(varName).handle = getPath(custCodeBlk); + allVariables.(structName{pti}).(varName).configs = getCodeSwitches(custCodeBlk); + end + end + end +end + +function allVariables = copyFields(system, allVariables, sFlow, sfHandle, configs, outPortNbr) + + sfFields={'type', 'unit', 'description', 'max', 'min', 'lsb', ... + 'offset', 'class'}; + + variableName = getSfSignalName(system, sFlow, sfHandle, outPortNbr); + allVariables.local_vars.(variableName).configs = configs; + + for j=1:length(sfFields) + fieldName = sfFields{j}; + value = tl_get(sfHandle, fieldName); + if strcmp(value, 'IMPLICIT_ENUM') + value = getEnumName(sfHandle); + end + allVariables.local_vars.(variableName).(fieldName) = checkValue(value); + end + + allVariables.local_vars.(variableName) = modifyEnumStructField(allVariables.local_vars.(variableName)); +end + +function value = val2str(val_in) + if ~ischar(val_in) + if isnan(val_in) + value = '-'; + elseif isempty(val_in) + value = '-'; + else + value = num2str(val_in); + end + else + value=val_in; + end +end + +function newStr = stripIllegalChar(value) + % replace all non word characters with space + newStr = regexprep(value, '(?![\w/]).', ' '); +end + +function newVal = checkValue(value) + if ischar(value) + newVal=strtrim(value); + elseif isnan(value) + newVal='-'; + elseif length(value) > 1 + newVal = {}; + for i=1:length(value) + newVal{i} = checkValue(value(i)); + end + else + newVal=value; + end +end + +function nok = checkClass(tlClass, sFlow, sfData) + if regexp(tlClass, '(?:default|CVC_DISP_NVM)') + nok = 1; + return % do nothing, NVM is handled elsewhere + end + if isempty(strfind(tlClass, 'CVC_DISP')) + if isnan(sfData.port) + port = ''; + else + port = [':' num2str(sfData.port)]; + end + o = sprintf('Warning - unknown class %s in %s - %s (%s%s)', ... + getPath(sFlow), tlClass, get_param(sFlow, 'name'), sfData.name, sfData.scope, port); + disp(o) + nok = 0; + return + end + nok = 0; +end + +function name = getSfSignalName(systemIn, block, sfHandle, outPortNbr) +% function to get the name of a in/out-port of a block. + macro = tl_get(sfHandle, 'name'); + system = getTLModelName(systemIn); + nameTmp = macro; + res = regexp(macro, '\$O', 'tokens'); + if ~isempty(res) + tmp_SFObj = get_param(block, 'Object'); + chartObj = tmp_SFObj.find('-isa', 'Stateflow.Chart'); + sfData = chartObj.find('-isa', 'Stateflow.Data'); + idArr = arrayfun(@(x) x.Id, sfData); + idx = idArr == sfHandle; + nameTmp = regexprep(nameTmp,'\$O', sfData(idx).name); + end + res = regexp(macro, '\$L', 'tokens'); + if ~isempty(res) + slPortHandles = get_param(block, 'PortHandles'); + ph = slPortHandles.Outport(outPortNbr); + signal = get_param(get_param(ph, 'line'), 'name'); + if isempty(signal) + %TODO: Consider removing the turning on of the propagated + % signals + if strcmp(get_param(ph, 'ShowPropagatedSignals'), 'off') + set_param(ph, 'ShowPropagatedSignals', 'on') + end + signal = get_param(ph, 'PropagatedSignals'); + if isempty(signal) + error('signal') % fix warning + end + end + nameTmp = regexprep(nameTmp,'\$L', signal); + end + nameTmp = regexprep(nameTmp,'\$B', get_param(block, 'Name')); + nameTmp = regexprep(nameTmp,'\$N', system); + name = regexprep(nameTmp,' ', ''); +end + +function name = getSignalName(systemIn, block, macro, outPortNbr) +% function to get the name of a in/out-port of a block. + res = regexp(macro, '(\$L)', 'tokens'); + system = regexprep(systemIn,'(\w+?)(__.*){0,1}','$1'); + nameTmp = macro; + if ~isempty(res) + slPortHandles = get_param(block, 'PortHandles'); + ph = slPortHandles.Outport(outPortNbr); + signal = get_param(get_param(ph, 'line'), 'name'); + if isempty(signal) + %TODO: Consider removing the turning on of the propagated + % signals + if strcmp(get_param(ph, 'ShowPropagatedSignals'), 'off') + set_param(ph, 'ShowPropagatedSignals', 'on') + end + signal = get_param(ph, 'PropagatedSignals'); + if isempty(signal) + error('signal') % fix warning + end + end + nameTmp = regexprep(nameTmp,'\$L', signal); + end + nameTmp = regexprep(nameTmp,'\$B', get_param(block, 'Name')); + nameTmp = regexprep(nameTmp,'\$N', system); + name = regexprep(nameTmp,' ', ''); +end diff --git a/pybuild/matlab_scripts/CodeGen/parseCoreIdentifiers.m b/pybuild/matlab_scripts/CodeGen/parseCoreIdentifiers.m new file mode 100644 index 0000000..b47fc45 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseCoreIdentifiers.m @@ -0,0 +1,139 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function apiData = parseCoreIdentifiers(model) +% parseCoreIdentifiers Find all Core Identifier blocks in model +% returns a structs with identifier information +% +% See also parseModelInfo + + apiData = struct(); + % Which types of identifier shall be search for + id_names = {'Events', 'IUMPR', 'FIDs', 'Ranking', 'TstId','TstId','Ranking'}; + idFilenames = {'CoreIdNameDefinition_EventIDs.csv', + 'CoreIdNameDefinition_IUMPR.csv', + 'CoreIdNameDefinition_FunctionIDs.csv', + 'CoreIdNameDefinition_Ranking.csv', + 'CoreIdNameDefinition_Mode$06.csv', + 'CoreIdNameDefinition_Mode$06.csv', + 'CoreIdNameDefinition_Ranking.csv'}; + id_names2Filenames = containers.Map(id_names, idFilenames); + % The name of the blocks using the above identifiers + blk_names = {'^Dem_SetEvent.*', '^Dem_RepIUMPR.*', '^FiM_GetFunction.*', ... + '^bdcore_RVLG_SetRV.*', '^bdsrv_S06_SetTestResult.*', ... + '^(Vcc|Dem)_SetDTR', '^(Vcc|Vc)_SetRanking'}; + % Which port of the block is the identifier connected to + blk_port_nbr = [1,1,1,1,1,1,1]; + %which block data shall be stored per block. + info = {'description', 'type', 'unit', 'offset', 'lsb', 'min', 'max', 'class'}; + + for blk_type_idx=1:length(id_names) + % remove name search once all Core blocks are replaced with ones + % with correct mask names! + name_search = find_system(model, 'FindAll', 'on', 'RegExp', 'on', 'LookUnderMasks', 'all', 'blocktype', 'SubSystem', 'Name', blk_names{blk_type_idx}); + msk_search = find_system(model, 'FindAll', 'on', 'RegExp', 'on', 'LookUnderMasks', 'all', 'MaskType', blk_names{blk_type_idx}); + search = union(name_search, msk_search); + if ~isfield(apiData, id_names{blk_type_idx}) + apiData.(id_names{blk_type_idx}) = struct(); + end + for i=1:length(search) + %Find source block for EventID + ports = get_param(search(i), 'PortHandles'); + l_h = get(ports.Inport(blk_port_nbr(blk_type_idx)), 'line'); + blk_h = get_param(l_h,'SrcBlockHandle'); + block_name = get_blk_name(model, blk_h); + if ~isempty(block_name) + %TODO: g�r API_blk till en cell array av structar + api_blk_tmp = [get_param(search(i), 'Parent') '/' get_param(search(i), 'Name')]; + tmpStruct.path = api_blk_tmp; + tmpStruct.config = getCodeSwitches(api_blk_tmp); + if isfield(apiData.(id_names{blk_type_idx}), block_name) + apiData.(id_names{blk_type_idx}).(block_name).API_blk = [apiData.(id_names{blk_type_idx}).(block_name).API_blk ... + tmpStruct]; + else + %APIData.(id_names{blk_type_idx}).(block_name) = struct(); + apiData.(id_names{blk_type_idx}).(block_name).API_blk{1} = tmpStruct; + end + %Get targetlink block data + apiData.(id_names{blk_type_idx}).(block_name).blk_name = get(blk_h, 'name'); + apiData.(id_names{blk_type_idx}).(block_name).subsystem = get(blk_h, 'parent'); + apiData.(id_names{blk_type_idx}).(block_name).API_blk_type = get(search(i), 'MaskType'); + for idx=1:length(info) + if strcmp(info{idx}, 'description') + apiData.(id_names{blk_type_idx}).(block_name).(info{idx}) = getCsvDescription(block_name, id_names2Filenames(id_names{blk_type_idx})); + else + apiData.(id_names{blk_type_idx}).(block_name).(info{idx}) = chkNan(tl_get(blk_h, ['output.' info{idx}])); + end + end + else + disp(['Warning: model ' model ' contains illegal identifier blocks']); + if isfield(apiData.(id_names{blk_type_idx}), 'IllegalBlk') + apiData.(id_names{blk_type_idx}).IllegalBlk.API_blk = [apiData.(id_names{blk_type_idx}).IllegalBlk.API_blk... + {[get_param(search(i), 'Parent') '/' get_param(search(i), 'Name')]}]; + else + apiData.(id_names{blk_type_idx}).IllegalBlk.API_blk = [get_param(search(i), 'Parent') '/' get_param(search(i), 'Name')]; + end + apiData.(id_names{blk_type_idx}).IllegalBlk.API_blk_type = get(search(i), 'MaskType'); + apiData.(id_names{blk_type_idx}).IllegalBlk.description = ['Illegal block ID!: ' get_param(search(i), 'Parent') '/' get_param(search(i), 'Name')]; + end + end + end +end + +function blk_name = get_blk_name(model, block_h) + type = get_param(block_h,'MaskType'); + if ~isempty(strfind(type,'NamedConstant')) + blk_name_tmp = get_param(block_h,'MaskValues'); + blk_name = blk_name_tmp{1}; + elseif ~isempty(strfind(type,'From')) + blk_tag = get_param(block_h,'GotoTag'); + blk_to = find_system(model, 'FindAll', 'on', 'LookUnderMasks', 'all', 'BlockType', 'Goto', 'GotoTag', blk_tag); + ports = get_param(blk_to, 'PortHandles'); + l_h = get(ports.Inport(1), 'line'); + blk_h = get_param(l_h,'SrcBlockHandle'); + blk_name = get_blk_name(model, blk_h); + else + o_name = tl_get(block_h,'output.name'); + if ~isempty(o_name ) + [tok mat] = regexp(model ,'(.+?)_Tmp$', 'tokens'); + if mat > 0 + model_tmp = tok{1}; + else + model_tmp = model; + end + tmp_name = regexprep(o_name, '\$N', model_tmp); + blk_name = regexprep(tmp_name, '\$B', get(block_h,'name')); + else + blk_name = ''; + end + end +end + +function res = chkNan(value) +% Function which replaces NaN or empty fields with '-' + if ~ischar(value) + if isnan(value) + res = '-'; + elseif isempty(value) + res = '-'; + else + res = num2str(value); + end + else + res = value; + end +end + +function description = getCsvDescription(blockName, filename) + % getCsvDescription Get description parametres from CSV files. + txt = readtable(filename); + % Using table column names is unsafe as the first row can become the + % column names. Eg. txt.Var1 can become txt.Models. + % Using columns instead. + blockNameColumn = 2; + descriptionColumn = 3; + description = txt{strcmp(txt{:, blockNameColumn}, blockName), descriptionColumn}; + if isempty(description) + description = 'Description missing'; + end +end diff --git a/pybuild/matlab_scripts/CodeGen/parseDIDs.m b/pybuild/matlab_scripts/CodeGen/parseDIDs.m new file mode 100644 index 0000000..b43baa9 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseDIDs.m @@ -0,0 +1,141 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function DID = parseDIDs(model_in) +% parseDIDs find all DID blocks in model +% returns a cell array with structs with DID information +% +% See also parseModelInfo + DIDs_h = find_system(model_in, 'FindAll', 'on', 'LookUnderMasks', 'all', 'MaskType', 'DID'); + DID = struct(); + if ~isempty(DIDs_h) + model = getTLModelName(model_in); + outp_h = find_system(model_in, 'findall', 'on', 'lookundermasks', 'on', 'MaskType', 'TL_Outport'); + for i=1:length(DIDs_h) + ports = get(DIDs_h(i), 'PortHandles'); + configs = getCodeSwitches(DIDs_h(i)); + l_h = get(ports.Inport, 'line'); + %Check if the signal is a propagated name + %and find the original signal if it is + tmp_sig_name = get(l_h, 'name'); + if isempty(tmp_sig_name) + sp_h = get(l_h, 'SrcPortHandle'); + tmp_sig_name = get(sp_h, 'PropagatedSignals'); + if isempty(tmp_sig_name) + disp(['No signal name for block ' Get_Path(DIDs_h(i)) '']) + continue + end + ln_h_tmp = find_system(model_in, 'findall', 'on', 'lookundermasks', 'on', ... + 'type','line','name', tmp_sig_name); + %Get one of the lines, as all have the same source block + if length(ln_h_tmp) > 1 + ln_h = ln_h_tmp(1); + else + ln_h = ln_h_tmp; + end + else + ln_h = l_h; + end + %find if there is a TL-outport with the signal name and it is + % not a deafult port - if so use that port as the definition for the DID. + found_outp_h = 0; + for j=1:length(outp_h) + oph = get(outp_h(j), 'PortHandles'); + opl_h = get(oph.Inport, 'line'); + sig_outp_name = get(opl_h, 'name'); + if isempty(sig_outp_name) + opp_h = get(opl_h, 'SrcPortHandle'); + sig_outp_name = get(opp_h, 'PropagatedSignals'); + end + if strcmp(tmp_sig_name,sig_outp_name) + found_outp_h = outp_h(j); + break + else + found_outp_h = 0; + end + end + + if found_outp_h ~= 0 + sig_name = sig_outp_name; + blk_name = [get(found_outp_h,'Parent') '/' get(found_outp_h,'Name')]; + sig_disc = tl_get(found_outp_h, 'output.description'); + data_type = tl_get(found_outp_h, 'output.type'); + unit = tl_get(found_outp_h, 'output.unit'); + offset = tl_get(found_outp_h, 'output.offset'); + lsb = tl_get(found_outp_h, 'output.lsb'); + min_v = tl_get(found_outp_h, 'output.min'); + max_v = tl_get(found_outp_h, 'output.max'); + tlclass = tl_get(found_outp_h, 'output.class'); + else + %find TL-output name and expand the macro to a signal name + src_blk_h = get(ln_h,'SrcBlockHandle'); + if strcmp(get_param(src_blk_h, 'MaskType'), 'TL_DataStoreRead') + parent = get(src_blk_h, 'Parent'); + ds_name = tl_get(src_blk_h, 'Datastorename'); + data_str = sprintf('.*?''name'',''%s''', ds_name); + src_blk_h = find_system(parent, 'findall', 'on', 'lookundermasks', 'on', ... + 'RegExp', 'on', 'MaskType', 'TL_DataStoreMemory', ... + 'data', data_str); + end + tl_outp_name = tl_get(src_blk_h, 'output.name'); + if isempty(tl_outp_name) % the upstream block has no tl.outputs (e.g. ports replaced by constants by scripts) + continue + end + % ToDo: add a check that no $B or $S is in the TL-name! + % Remove _Tmp suffix from the model name + [tok mat] = regexp(model ,'(.+?)_Tmp$', 'tokens'); + if mat > 0 + model_tmp = tok{1}; + else + model_tmp = model; + end + tmp_name = regexprep(tl_outp_name, '\$N', model_tmp); + sig_name = regexprep(tmp_name, '\$L', get(ln_h,'name')); + %Store DID info in a struct + blk_name = [get(src_blk_h,'Parent') '/' get(src_blk_h,'Name')]; + data_type = tl_get(src_blk_h, 'output.type'); + sig_disc = tl_get(src_blk_h, 'output.description'); + unit = tl_get(src_blk_h, 'output.unit'); + offset = tl_get(src_blk_h, 'output.offset'); + lsb = tl_get(src_blk_h, 'output.lsb'); + min_v = tl_get(src_blk_h, 'output.min'); + max_v = tl_get(src_blk_h, 'output.max'); + tlclass = tl_get(src_blk_h, 'output.class'); + end + if strcmp('default', tlclass) + disp(['Block creating signal has default class ' Get_Path(DIDs_h(i)) '']) + else + tmpDID = struct(); + tmpDID.handle = blk_name; + tmpDID.name = sig_name; + tmpDID.configs = configs; + tmpDID.description = sig_disc; + tmpDID.type = data_type; + tmpDID.unit = unit; + tmpDID.offset = offset; + tmpDID.lsb = lsb; + tmpDID.min = chkNan(min_v); + tmpDID.max = chkNan(max_v); + tmpDID.class = tlclass; + DID.(tmpDID.name) = tmpDID; + end + end + end +end + +function res = chkNan(value) +% Function which replaces NaN or empty fields with '-' + if ~ischar(value) + if isnan(value) + res = '-'; + elseif isempty(value) + res = '-'; + else + res = num2str(value); + end + else + res = value; + end +end diff --git a/pybuild/matlab_scripts/CodeGen/parseInPorts.m b/pybuild/matlab_scripts/CodeGen/parseInPorts.m new file mode 100644 index 0000000..1ed4bd1 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseInPorts.m @@ -0,0 +1,106 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function inPorts = parseInPorts(root_subsystem) + % parseInPorts Parse which block data shall be stored per block. + % + % See also parseModelInfo + + % TODO: Some models have more tha one inport per variable. Should we + % check for this? + inPorts = struct(); + info = {'description', 'type', 'unit', 'offset', 'lsb', 'min', 'max', 'class', 'width'}; + + normalInPorts = parseTLInPorts(root_subsystem, info); + normalFields = fieldnames(normalInPorts); + for idx = 1:length(normalFields) + inPorts.(normalFields{idx}) = normalInPorts.(normalFields{idx}); + end + + busInPorts = parseTLBusInPorts(root_subsystem, info); + busFields = fieldnames(busInPorts); + for idx = 1:length(busFields) + inPorts.(busFields{idx}) = busInPorts.(busFields{idx}); + end +end + +function inPorts = parseTLInPorts(root_subsystem, info) + in_ports = find_system(root_subsystem, 'FindAll', 'on', 'SearchDepth', 1, 'MaskType', 'TL_Inport'); + inPorts = struct(); + tmpInport = struct(); + for i=1:length(in_ports) + inp = in_ports(i); + consumerBlks = getConsumerBlocks(inp); + codeSwTmp = {}; + for j=1:length(consumerBlks) + consBlk = consumerBlks(j); + codeSwTmp{j} = getCodeSwitches(consBlk); + end + %TODO: Do a better reduction of code switch logics right now only duplicates are removed. + codeSw = removeConfigDuplicates(codeSwTmp); + tmpInport.handle = getPath(inp); + tmpInport.name = strtrim(getName(inp)); + tmpInport.configs = codeSw; + for idx=1:length(info) + tmpValue = tl_get(inp, ['output.' info{idx}]); + tmpInport.(info{idx}) = getProperValue(inp, tmpValue); + end + + tmpInport = modifyEnumStructField(tmpInport); + + if strcmp(tmpInport.name, fields(inPorts)) + printf('Warning: inport %s is already defined', tmpInport.name); + printf(' signal will not be added again to the input signal'); + else + inPorts.(tmpInport.name) = tmpInport; + end + end +end + +function busInPorts = parseTLBusInPorts(root_subsystem, info) + foundBusInPorts = find_system(root_subsystem, 'FindAll', 'on', 'SearchDepth', 1, 'MaskType', 'TL_BusInport'); + busInPorts = struct(); + tmpInport = struct(); + for idx=1:length(foundBusInPorts) + inp = foundBusInPorts(idx); + for idy = 1:tl_get(inp, 'numoutputs') + tmpInport.handle = getPath(inp); + tmpInport.name = tl_get(inp, ['output(' num2str(idy) ').signalname']); + tmpInport.configs = getBusConfig(inp); + for idz=1:length(info) + tmpValue = tl_get(inp, ['output(' num2str(idy) ').' info{idz}]); + tmpInport.(info{idz}) = getProperValue(inp, tmpValue); + end + % TODO Fix later, cannot set width in TL_BusInport:s due to "matrix unified output". + tmpInport.width = 1; + + tmpInport = modifyEnumStructField(tmpInport); + + busParts = split(tmpInport.name, '.'); + if ~ismember(busParts{1}, fields(busInPorts)) + busInPorts.(busParts{1}) = struct(); + busInPorts.(busParts{1}).(busParts{2}) = tmpInport; + elseif ~ismember(busParts{2}, fields(busInPorts.(busParts{1}))) + busInPorts.(busParts{1}).(busParts{2}) = tmpInport; + else + printf('Warning: inport %s is already defined', tmpInport.name); + printf(' signal will not be added again to the input signal'); + end + end + end +end + +function busConfig = getBusConfig(inp) + consumerBlks = getConsumerBlocks(inp); + codeSwTmp = {}; + for idx=1:length(consumerBlks) + consBlk = consumerBlks(idx); + codeSwTmp{idx} = getCodeSwitches(consBlk); + end + %TODO: Do a better reduction of code switch logics right now only duplicates are removed. + busConfig = removeConfigDuplicates(codeSwTmp); + isValidConfig = iscell(busConfig) && length(busConfig) == 1 && strcmp(busConfig{1}, 'all'); + if ~isValidConfig + error('Code switching bus inports is currently not supported. All bus inport destinations must be active.') + end +end diff --git a/pybuild/matlab_scripts/CodeGen/parseIncludeConfigs.m b/pybuild/matlab_scripts/CodeGen/parseIncludeConfigs.m new file mode 100644 index 0000000..04d3b20 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseIncludeConfigs.m @@ -0,0 +1,25 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function includeConfigs = parseIncludeConfigs(model, cfgFolder) + % parseIncludeConfigs Create include section for configs + % + % Look in the config folder for related configs. + % This is used for models with handwritten c-code, + % where the c-code handles nvm-signals, calibration, etc. + % + % See also parseModelInfo + includeConfigs = {}; + if nargin<1 + return + end + + json_files = dir([cfgFolder '/config_*.json']); + for json_file=json_files' + if strcmp(['config_' model '.json'], json_file.name) + continue + end + include_start = length('config_') + 1; + include_end = length('.json'); + includeConfigs{end+1} = json_file.name(include_start:end-include_end); + end diff --git a/pybuild/matlab_scripts/CodeGen/parseModelInfo.m b/pybuild/matlab_scripts/CodeGen/parseModelInfo.m new file mode 100644 index 0000000..501ab49 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseModelInfo.m @@ -0,0 +1,38 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function [ output_args ] = parseModelInfo(rootFolder, model, cfgFolder) + % parseModelInfo Extract unit-config data from model + % + % Parse the model and create a structure that can be used to create + % a config file for the model. + % + % See also parseIncludeConfigs parseOutPorts parseInPorts parseCoreIdentifiers + % parseDIDs parseNVM parsePreProcBlks parseCalMeasData + + tic; + load_system(model) + % Trigger "update model" command. + % This was added as a workaround for an inconsistent model. + % TODO: Check if it is still needed. + % set_param(model, 'SimulationCommand', 'Update'); + % + root_subsystem = topLevelSystem(model); + output_args = struct(); + + % Version below should match the "config_version" of PyBuild, major must match. + % If they don't match, this script (and more?) may require updates. + output_args.version = '0.2.1'; + output_args.includes = parseIncludeConfigs(model, cfgFolder); + output_args.integrity_level = getAsilClassification(rootFolder, model); + output_args.outports = parseOutPorts(root_subsystem); + output_args.inports = parseInPorts(root_subsystem); + output_args.core = parseCoreIdentifiers(model); + output_args.dids = parseDIDs(model); + output_args.nvm = parseNVM(model); + output_args.pre_procs = parsePreProcBlks(model); + tmp=parseCalMeasData(model); + output_args.local_vars = tmp.local_vars; + output_args.calib_consts = tmp.calib_consts; + toc +end diff --git a/pybuild/matlab_scripts/CodeGen/parseNVM.m b/pybuild/matlab_scripts/CodeGen/parseNVM.m new file mode 100644 index 0000000..ba09d5b --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseNVM.m @@ -0,0 +1,82 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function nvm = parseNVM(model) + % parseNVM Parse all the NVM-ram blocks used in the model + % and return a struct with which ram-cells there are, and in + % which configurations they are present + % + % See also parseModelInfo + + %TODO: add looking for NVM class in stateflow!! + + outp_and_data_stores = find_system(model, 'FindAll', 'on', 'LookUnderMasks', 'all', ... + 'RegExp', 'On', 'MaskType', 'TL_DataStoreMemory|TL_Outport'); + unit_delays = find_system(model, 'FindAll', 'on', 'LookUnderMasks', 'all', ... + 'RegExp', 'On', 'MaskType', 'TL_UnitDelay'); + + nvm = struct(); + for i=1:length(outp_and_data_stores) + dstore_h = outp_and_data_stores(i); + class = tl_get(dstore_h,'output.class'); + name = tl_get(dstore_h,'output.name'); + if ~isempty(regexp(class, 'CVC_DISP_NVM(_P){0,1}', 'tokens')) + nvm = getParams(dstore_h, class, name, nvm); + end + end + for i=1:length(unit_delays) + udel_h = unit_delays(i); + class_tmp = tl_get(udel_h, 'output.class'); + state = tl_get(udel_h, 'state.class'); + if ~isempty(regexp(class_tmp, 'CVC_DISP_NVM(_P){0,1}', 'tokens')) + class = class_tmp; + name = tl_get(udel_h, 'output.name'); + elseif ~isempty(state) && ~isempty(regexp(state, 'CVC_DISP_NVM(_P){0,1}', 'tokens')) + class = state; + name = tl_get(udel_h, 'state.name'); + else + class = ''; + end + if ~isempty(class) + nvm = getParams(udel_h, class, name, nvm); + end + end +end + +function nvm = getParams(blk_handle, class, name, nvm) + info = {'description', 'type', 'unit', 'offset', 'lsb', 'min', 'max', 'width'}; + tmpNvm = struct(); + tmpNvm.handle = getPath(blk_handle); + tmpNvm.name = getName(blk_handle, name); + config = getCodeSwitches(blk_handle); + if ismember(tmpNvm.name, fields(nvm)) + % Merge new configs with old + tmpConfigs = nvm.(tmpNvm.name).configs; + tmpConfigs{end+1} = config; + tmpNvm.configs = removeConfigDuplicates(tmpConfigs); + else + % Always require nvm configs to be formatted in or+and+expression syntax + tmpNvm.configs = {config}; + end + tmpNvm.class = class; + for idx=1:length(info) + tmpNvm.(info{idx}) = chkNan(tl_get(blk_handle, ['output.' info{idx}])); + end + % Overwrite potential old nvm block with new configs + nvm.(tmpNvm.name) = tmpNvm; +end + +function res = chkNan(value) +% Function which replaces NaN or empty fields with '-' + if ~ischar(value) + if isnan(value) + res = '-'; + elseif isempty(value) + res = '-'; + else + res = num2str(value); + end + else + res = value; + end +end \ No newline at end of file diff --git a/pybuild/matlab_scripts/CodeGen/parseOutPorts.m b/pybuild/matlab_scripts/CodeGen/parseOutPorts.m new file mode 100644 index 0000000..3154447 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parseOutPorts.m @@ -0,0 +1,120 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function outPorts = parseOutPorts(root_subsystem) + % parseOutPorts Parse which block data shall be stored per block. + % + % See also parseModelInfo + outPorts = struct(); + info = {'description', 'type', 'unit', 'offset', 'lsb', 'min', 'max', 'class', 'width'}; + + normalOutPorts = parseTLOutports(root_subsystem, info); + normalFields = fieldnames(normalOutPorts); + for idx = 1:length(normalFields) + outPorts.(normalFields{idx}) = normalOutPorts.(normalFields{idx}); + end + + busOutPorts = parseTLBusOutports(root_subsystem, info); + busFields = fieldnames(busOutPorts); + for idx = 1:length(busFields) + outPorts.(busFields{idx}) = busOutPorts.(busFields{idx}); + end +end + +function outports = parseTLOutports(root_subsystem, info) + out_ports = find_system(root_subsystem, 'FindAll', 'on', 'LookUnderMasks', 'all', 'MaskType', 'TL_Outport'); + outports = struct(); + tmpOutport = struct(); + for i=1:length(out_ports) + outp = out_ports(i); + def_blk = getDefBlock(outp); + tmpOutport.handle = getPath(outp); + tmpOutport.name = getName(outp); + tmpOutport.configs = getCodeSwitches(def_blk); + for idx=1:length(info) + tmpValue = tl_get(outp, ['output.' info{idx}]); + tmpOutport.(info{idx}) = getProperValue(outp, tmpValue); + end + + tmpOutport = modifyEnumStructField(tmpOutport); + + if strcmp(tmpOutport.name, fields(outports)) + printf('Warning: outport %s is already defined', tmpOutport.name); + printf(' signal will not be added again to the output signal'); + else + outports.(tmpOutport.name) = tmpOutport; + end + end +end + +function busOutPorts = parseTLBusOutports(root_subsystem, info) + foundBusOutPorts = find_system(root_subsystem, 'FindAll', 'on', 'LookUnderMasks', 'all', 'MaskType', 'TL_BusOutport'); + busOutPorts = struct(); + tmpOutport = struct(); + for idx=1:length(foundBusOutPorts) + outp = foundBusOutPorts(idx); + busCreator = getDefBlock(outp); + defBlocks = getBusSrcBlocks(outp, busCreator); + if ismember('BusCreator', get_param(defBlocks, 'BlockType')) + faultyOutport = [get(outp, 'path') '/' get(outp, 'name')]; + error('Nestled bus creators are currently not supported, see %s.', faultyOutport) + end + config = getBusConfig(defBlocks); + for idy = 1:tl_get(outp, 'numoutputs') + tmpOutport.handle = getPath(outp); + tmpOutport.name = tl_get(outp, ['output(' num2str(idy) ').signalname']); + tmpOutport.configs = config; + for idz=1:length(info) + tmpValue = tl_get(outp, ['output(' num2str(idy) ').' info{idz}]); + tmpOutport.(info{idz}) = getProperValue(outp, tmpValue); + end + % TODO Fix later, cannot set width in TL_BusOutport:s due to "matrix unified output". + tmpOutport.width = 1; + + tmpOutport = modifyEnumStructField(tmpOutport); + + busParts = split(tmpOutport.name, '.'); + if ~ismember(busParts{1}, fields(busOutPorts)) + busOutPorts.(busParts{1}) = struct(); + busOutPorts.(busParts{1}).(busParts{2}) = tmpOutport; + elseif ~ismember(busParts{2}, fields(busOutPorts.(busParts{1}))) + busOutPorts.(busParts{1}).(busParts{2}) = tmpOutport; + else + printf('Warning: outport %s is already defined', tmpOutport.name); + printf(' signal will not be added again to the output signal'); + end + end + end +end + +function defBlocks = getBusSrcBlocks(busOutPort, bus_creator) + defBlocks = []; + if ~strcmp(get_param(bus_creator, 'BlockType'), 'BusCreator') + faultyOutport = [get(busOutPort, 'path') '/' get(busOutPort, 'name')]; + error('Source block of a TL_BusOutport must be a bus creator, see %s.', faultyOutport) + end + srcBlocks = getSrcBlocks(bus_creator); + tmpSrcPorts = get(getSrcLines(bus_creator), 'SrcPortHandle'); + + if iscell(tmpSrcPorts) + srcPorts = cell2mat(tmpSrcPorts); + else + srcPorts = tmpSrcPorts; + end + + for idx = 1:length(srcBlocks) + defBlocks(end+1) = getDefBlock(srcBlocks(idx), srcPorts(idx)); + end +end + +function busConfig = getBusConfig(defBlocks) + busConfig = {'all'}; + for idx = 1:length(defBlocks) + defConfig = getCodeSwitches(defBlocks(idx)); + isValidConfig = iscell(defConfig) && length(defConfig) == 1 && strcmp(defConfig{1}, 'all'); + if ~isValidConfig + faultyBlockPath = [get(defBlocks(idx), 'path') '/' get(defBlocks(idx), 'name')]; + error('All members of a bus outport must be active, %s is not.', faultyBlockPath) + end + end +end diff --git a/pybuild/matlab_scripts/CodeGen/parsePreProcBlks.m b/pybuild/matlab_scripts/CodeGen/parsePreProcBlks.m new file mode 100644 index 0000000..a7d465c --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/parsePreProcBlks.m @@ -0,0 +1,23 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function out = parsePreProcBlks(model) + % parsePreProcBlks Find all preprocessor blocks in the model + % + % See also parseModelInfo + preProcessorBlks = find_system(model, 'FindAll', 'on', 'RegExp', 'on', ... + 'LookUnderMasks', 'all', 'MaskType', 'TL_PreProcessorIf'); + blks = {}; + for sbh=preProcessorBlks' + ports = get_param(sbh, 'PortHandles'); + l=get_param(ports.Inport, 'Line'); + blk = get_param(l, 'SrcBlockHandle'); + if strcmp(get_param(blk, 'blocktype'), 'Inport') + tmp=get_param(get_param(blk,'parent'), 'linehandles'); + blk=get_param(tmp.Inport(str2num(get_param(blk, 'port'))), 'srcblockhandle'); + end + if_exp = tl_get(sbh, 'ifexpression'); + blks = [strrep(if_exp,'u1',get_param(blk, 'const_name')); blks]; + end + out = unique(blks); +end diff --git a/pybuild/matlab_scripts/CodeGen/struct2JSON.m b/pybuild/matlab_scripts/CodeGen/struct2JSON.m new file mode 100644 index 0000000..4e87698 --- /dev/null +++ b/pybuild/matlab_scripts/CodeGen/struct2JSON.m @@ -0,0 +1,128 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function res = struct2JSON(struct, outputFileName) + % A function that a strcut and file name as arguments, + % and outputs the matlab struct as a JSON file in UTF-8 encoding + fp = fopen(outputFileName, 'w', 'n', 'UTF-8'); + if fp > 0 + res = recursiveStringGen('', struct, '', 1); + fwrite(fp,res); + fclose(fp); + else + disp(['could not open file ' outputFileName]) + end +end + +function res = recursiveStringGen(elementName, element, str, indentLevel) + %function that outputs a string with a json format from a struct + %Note the NaN value is not according to JSON standard, but the + %python importer seems to handle it anyway + if isstruct(element) + subElementNames = fields(element); + subElemsLen = length(subElementNames); + + if subElemsLen == 0 + str = sprintf('%s{}', str); + else + str = sprintf('%s{\n', str); + for idx=1:subElemsLen + subElementName = subElementNames{idx}; + subElement = element.(subElementName); + if isfield(subElement, 'unshortenedName') + % When element name length is > 63, it can't be stored as a struct key, instead the + % full name is stored as a subelement with the key 'unshortenedName'. + subElementName = subElement.('unshortenedName') + subElement = rmfield(subElement, 'unshortenedName') + end + if ismember(elementName, {'inports', 'outports'}) + % TL_In-/Out-ports have a depth of 1, which TL_BusIn-/Out-ports have a depth of 2. + % Bus ports should be reduced to a depth of 1, where each member is + % field with the new name Bus.Member. + subElementFields = fields(subElement); + if ~ismember('name', subElementFields) + subElements = subElement; + for idy=1:length(subElementFields) + subElementNameNew = [subElementName '.' subElementFields{idy}]; + subElement = subElements.(subElementFields{idy}); + str = [str indent(['"' subElementNameNew '": '], indentLevel)]; + str = recursiveStringGen(subElementNameNew, subElement, str, indentLevel + 1); + if idy ~= length(subElementFields) + str = sprintf('%s,\n', str); + end + end + else + str = [str indent(['"' subElementName '": '], indentLevel)]; + str = recursiveStringGen(subElementName, subElement, str, indentLevel + 1); + end + else + str = [str indent(['"' subElementName '": '], indentLevel)]; + str = recursiveStringGen(subElementName, subElement, str, indentLevel + 1); + end + + if idx ~= subElemsLen + str = sprintf('%s,\n', str); + else + str = sprintf('%s}', str); + end + end + end + res = str; + return + elseif iscell(element) + elemLen = length(element); + if elemLen == 0 + str = sprintf('%s[]', str); + else + str = sprintf('%s[\n', str); + for idx=1:elemLen + str = [str indent('', indentLevel)]; + str = recursiveStringGen('', element{idx}, str, indentLevel + 1); + if idx ~= elemLen + str = sprintf('%s,\n', str); + else + str = sprintf('%s]', str); + end + end + end + res = str; + return + elseif ischar(element) + % replace line feeds with spaces, and " with ' + % as this is not supported inn JSON + elemTmp = strrep(element,'"',''''); + newline = sprintf('\n'); + elemTmp = strrep(elemTmp, newline, ' '); + % replace single \ with \\, as a single \ is interpreted as escape + elemTmp = regexprep(elemTmp, '(? 1 + res_blk = tmpDstBlock; + res_ports = tmpPort; + break; + %% If the block is a inport + elseif strcmp(get_param(tmpDstBlock, 'blocktype'), 'Inport') + tmp=get_param(get_param(tmpDstBlock,'parent'), 'linehandles'); + tmpPort=get_param(tmp.Inport(str2num(get_param(tmpDstBlock,'port'))), 'srcporthandle'); + tmpDstBlock=get_param(tmp.Inport(str2num(get_param(tmpDstBlock,'port'))), 'srcblockhandle'); + %% If the block is a outport + elseif strcmp(get_param(tmpDstBlock, 'blocktype'), 'Outport') + tmpParent=get_param(tmpDstBlock, 'parent'); + % If were about to exit a block with an action port. Stop! + ph=get_param(tmpParent, 'PortHandles'); + if ~isempty(ph.Ifaction) || ~isempty(ph.Enable) + res_blk = tmpDstBlock; + res_ports = tmpPort; + break; + end + tmp=get_param(tmpParent, 'linehandles'); + tmpOutport = tmp.Outport(str2num(get_param(tmpDstBlock, 'port'))); + if tmpOutport < 0 + % Not connected. Stop! + res_blk = tmpDstBlock; + res_ports = tmpPort; + break; + end + tmpPort=get_param(tmpOutport, 'dstporthandle'); + tmpDstBlock=get_param(tmpOutport, 'dstblockhandle'); + %% If the block is a From-block + elseif strcmp(get_param(tmpDstBlock, 'blocktype'), 'Goto') + From=find_system(get_param(tmpDstBlock, 'parent'),'lookundermasks', ... + 'on','searchdepth',1,'Findall','on', 'blocktype', ... + 'From','GotoTag', get_param(tmpDstBlock,'GotoTag')); + if length(From > 0) + tmp=get_param(From, 'linehandles'); + tmpLen = length(tmp); + %hanterar att det finns flera from block!!! + if tmpLen > 1 + tmpPort = []; + tmpDstBlock = []; + for i=1:tmpLen + tmpPort = [tmpPort; get_param(tmp{i}.Outport, 'dstporthandle')]; + tmpDstBlock = [tmpDstBlock; get_param(tmp{i}.Outport, 'dstblockhandle')]; + end + else + tmpPort=get_param(tmp.Outport, 'dstporthandle'); + tmpDstBlock=get_param(tmp.Outport, 'dstblockhandle'); + end + else + disp(['Warning: Goto-block, without from here:' ... + getPath(tmpDstBlock)]) + res_blk = -1; + res_ports = -1; + break; + end + %% If non masked subsystem + elseif checkSubsystem(tmpDstBlock) && ~strcmp(get(tmpPort,'PortType'), 'enable') + % kolla om subsystemet är maskat, eller om inporten är en enable port, + % om så är fallet hantera som ett vanligt block + inport=find_system(tmpDstBlock,'lookundermasks','on', ... + 'searchdepth', 1, 'FindAll', 'on', ... + 'blocktype','Inport', ... + 'port', num2str(get(tmpPort,'PortNumber'))); + tmpPort=get_param(getDstLines(inport), 'dstporthandle'); + tmpDstBlock=getDstBlocks(inport); + else + res_blk = tmpDstBlock; + res_ports = tmpPort; + break; + end + end +end + +function follow = checkSubsystem(block) + % checkSubsystem returns a bool + % true if followLink should continue inside the subsystem + % false if followLink should not continue inside the subsystem + follow = false; + % If the block is not a SubSystem, stop. + if strcmp(get_param(block,'blocktype'), 'SubSystem') + if isempty(get_param(block,'MaskType')) + % If the block is not masked, continue + follow = true; + else + blockFields = fields(get(block)); + if ismember('FollowLinks', blockFields) + % If the block is masked, but has FollowLinks property + % 'on': continue + follow = strcmp(get_param(block,'FollowLinks'), 'on'); + end + end + end +end \ No newline at end of file diff --git a/pybuild/matlab_scripts/helperFunctions/getCodeSwitches.m b/pybuild/matlab_scripts/helperFunctions/getCodeSwitches.m new file mode 100644 index 0000000..fc087bf --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getCodeSwitches.m @@ -0,0 +1,50 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function out = getCodeSwitches(handle, in) + % recursivly find if there are any configuration switches affecting + % the block "handle" + if nargin == 1 + in = {}; + end + parent = get_param(handle, 'Parent'); + if ~isempty(strfind(parent, '/')) + ph = get_param(parent, 'PortHandles'); + if ~isempty(ph.Ifaction) + l=get_param(ph.Ifaction,'Line'); + sbh=get_param(l,'SrcBlockHandle'); + sbp=get_param(l,'SrcPort'); + %hilite_system(sbh); + mt=get_param(sbh,'MaskType'); + if strcmp(mt,'TL_PreProcessorIf') + ports = get_param(sbh, 'PortHandles'); + l=get_param(ports.Inport, 'Line'); + blk = get_param(l, 'SrcBlockHandle'); + if strcmp(get_param(blk, 'BlockType'), 'Inport') + tmp=get_param(get_param(blk, 'Parent'), 'LineHandles'); + blk=get_param(tmp.Inport(str2num(get_param(blk, 'Port'))), 'SrcBlockHandle'); + end + if_exp = tl_get(sbh, 'ifexpression'); + if str2num(sbp)==2 + if_exp = ['!(' if_exp ')']; + end + exp = strrep(if_exp,'u1',get_param(blk, 'const_name')); + in = [in; exp]; + end + elseif ~isempty(ph.Enable) + l=get_param(ph.Enable,'Line'); + sbh=get_param(l,'SrcBlockHandle'); + mt=get_param(sbh,'MaskType'); + if strcmp(mt,'PreProcessorName') + exp = get_param(sbh, 'const_name'); + in = [in; exp]; + end + end + in = getCodeSwitches(parent, in); + end + if length(in) > 0 + out = in; + else + out = {'all'}; + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getConsumerBlocks.m b/pybuild/matlab_scripts/helperFunctions/getConsumerBlocks.m new file mode 100644 index 0000000..265c3a5 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getConsumerBlocks.m @@ -0,0 +1,30 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function dstBlocks = getConsumerBlocks(startBlock, port) +%% Find the blocks where the Input port variable are consumed +%% Returns an array with blockids + + %Only use handles in this function + if ischar(startBlock) + startBlock = get_param(startBlock,'Handle'); + end + dstBlocks = []; + if nargin == 1 + %in = []; + [dstBlks, dstPorts] = followLink(startBlock); + else + [dstBlks, dstPorts] = followLink(startBlock, port); + end + + dstBlksLen = length(dstBlks); + if dstBlksLen > 1 + for i=1:dstBlksLen + res = getConsumerBlocks(dstBlks(i), dstPorts(i)); + dstBlocks = [dstBlocks res]; + end + % only add a dst block if they exists. + elseif dstBlks > 0 + dstBlocks = dstBlks; + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getDefBlock.m b/pybuild/matlab_scripts/helperFunctions/getDefBlock.m new file mode 100644 index 0000000..859fb58 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getDefBlock.m @@ -0,0 +1,40 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function tmpSrcBlock = getDefBlock(varargin) +%% Find the blocks where the input variables are defined + if length(varargin) == 1 + startBlock = varargin{1}; + tmpSrcBlock = getSrcBlocks(startBlock); + tmpPort = get(getSrcLines(startBlock),'srcporthandle'); + elseif length(varargin) == 2 + tmpSrcBlock = varargin{1}; + tmpPort = varargin{2}; + else + error('Wrong number of input arguments') + end + + while 1 + %% If the block is a inport, but not a TL-port + if strcmp(get_param(tmpSrcBlock,'blocktype'),'Inport') && isempty(get_param(tmpSrcBlock,'MaskType')) + tmp=get_param(get_param(tmpSrcBlock,'parent'),'linehandles'); + tmpPort=get_param(tmp.Inport(str2num(get_param(tmpSrcBlock,'port'))),'srcporthandle'); + tmpSrcBlock=get_param(tmp.Inport(str2num(get_param(tmpSrcBlock,'port'))),'srcblockhandle'); + + %% If the block is a From-block + elseif strcmp(get_param(tmpSrcBlock,'blocktype'),'From') + goto=find_system(get_param(tmpSrcBlock,'parent'),'lookundermasks','on','searchdepth',1,'blocktype','Goto','GotoTag',get_param(tmpSrcBlock,'GotoTag')); + tmp=get_param(goto{1},'linehandles'); + tmpPort=get_param(tmp.Inport,'srcporthandle'); + tmpSrcBlock=get_param(tmp.Inport,'srcblockhandle'); + + %% If subsystem + elseif strcmp(get_param(tmpSrcBlock,'blocktype'),'SubSystem') + outport=find_system(tmpSrcBlock,'followlinks', 'on', 'lookundermasks','on','searchdepth',1,'blocktype','Outport','port', num2str(get(tmpPort,'PortNumber'))); + tmpPort=get_param(getSrcLines(outport),'srcporthandle'); + tmpSrcBlock=getSrcBlocks(outport); + else + break + end + end +end \ No newline at end of file diff --git a/pybuild/matlab_scripts/helperFunctions/getDefOutport.m b/pybuild/matlab_scripts/helperFunctions/getDefOutport.m new file mode 100644 index 0000000..f0e8435 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getDefOutport.m @@ -0,0 +1,58 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function outport = getDefOutport(startBlock) +%% Find the blocks where the lowest level outport for the defining block + tmpSrcBlock=getSrcBlocks(startBlock); + tmpPort=get_param(getSrcLines(startBlock), 'srcporthandle'); + outport = -1; + while 1 + %% If multiple links were found + tmpH=getDstBlockHandles(tmpSrcBlock, tmpPort); + if length(tmpH) > 1 + break + + %% If the block is a inport, but not a TL-port + elseif strcmp(get_param(tmpSrcBlock, 'blocktype'), 'Inport') && ... + isempty(get_param(tmpSrcBlock,'MaskType')) + tmp=get_param(get_param(tmpSrcBlock, 'parent'), 'linehandles'); + tmpPort=get_param(tmp.Inport(str2num(get_param(tmpSrcBlock, 'port'))), 'srcporthandle'); + tmpSrcBlock=get_param(tmp.Inport(str2num(get_param(tmpSrcBlock, 'port'))), 'srcblockhandle'); + + %% If the block is a From-block + elseif strcmp(get_param(tmpSrcBlock, 'blocktype'), 'From') + goto=find_system(get_param(tmpSrcBlock,'parent'), 'lookundermasks', ... + 'on','searchdepth',1,'blocktype','Goto','GotoTag', ... + get_param(tmpSrcBlock,'GotoTag')); + tmp=get_param(goto{1},'linehandles'); + tmpPort=get_param(tmp.Inport,'srcporthandle'); + tmpSrcBlock=get_param(tmp.Inport,'srcblockhandle'); + + %% If subsystem + elseif strcmp(get_param(tmpSrcBlock,'blocktype'),'SubSystem') + % Don't move outports inside library blocks + if ~isempty(get_param(tmpSrcBlock, 'MaskType')) &&... + (strncmp(get_param(tmpSrcBlock, 'MaskType'), 'VCC_', 4) ||... + strncmp(get_param(tmpSrcBlock, 'MaskType'), 'TL_', 3)) + break + end + + outport=find_system(tmpSrcBlock,'lookundermasks','on','searchdepth',1, ... + 'blocktype','Outport','port', ... + num2str(get(tmpPort,'PortNumber'))); + tmpPort=get_param(getSrcLines(outport),'srcporthandle'); + tmpSrcBlock=getSrcBlocks(outport); + else + break + end + end +end + +function dstBlocks = getDstBlockHandles(block, port) + dstBlocks=[]; + tmp=get_param(block,'linehandles'); + tmpNum=get_param(port,'PortNumber'); + if isfield(tmp,'Outport') + dstBlocks = get_param(tmp.Outport(tmpNum),'dstblockhandle'); + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getDstBlocks.m b/pybuild/matlab_scripts/helperFunctions/getDstBlocks.m new file mode 100644 index 0000000..e585fab --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getDstBlocks.m @@ -0,0 +1,19 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function dstBlocks = getDstBlocks(block) +%% Find the blocks where the input variables are defined + + dstBlocks=[]; + tmp=get_param(block,'linehandles'); + + if isfield(tmp,'Outport') + for i=1:length(tmp.Outport) + if tmp.Outport(i)<0 + dstBlocks(i)=-1; + else + dstBlocks = [dstBlocks; get_param(tmp.Outport(i),'dstblockhandle')]; + end + end + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getDstLines.m b/pybuild/matlab_scripts/helperFunctions/getDstLines.m new file mode 100644 index 0000000..8f8eff5 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getDstLines.m @@ -0,0 +1,13 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function dstLines = getDstLines(Block) + + tmp=get_param(Block,'linehandles'); + + if isfield(tmp,'Outport') + dstLines=tmp.Outport; + else + dstLines=[]; + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getInterfaceSignals.m b/pybuild/matlab_scripts/helperFunctions/getInterfaceSignals.m new file mode 100644 index 0000000..7d62149 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getInterfaceSignals.m @@ -0,0 +1,37 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function interfaceSignals = getInterfaceSignals(rootFolder) + activeInterfaceFiles = dir([rootFolder '/Projects/*/Config/ActiveInterfaces/*Output.csv']); + disp('Reading active interface files'); + signalNameColumn = 2; + signalMinColumn = 5; + signalMaxColumn = 6; + signalInitValueColumn = 9; + signals = []; + minimums = []; + maximums = []; + values = []; + + for fileIndex = 1:length(activeInterfaceFiles) + interfaceFile = activeInterfaceFiles(fileIndex, :); + filePath = fullfile(interfaceFile.folder, interfaceFile.name); + disp(['Reading:' filePath]) + options = detectImportOptions(filePath); + options.LineEnding = {'\r\n'}; + csvContent = readtable(filePath, options); + signals = [signals; csvContent{:, signalNameColumn}]; + minimums = [minimums; csvContent{:, signalMinColumn}]; + maximums = [maximums; csvContent{:, signalMaxColumn}]; + values = [values; csvContent{:, signalInitValueColumn}]; + % Remove duplicate signals, hopefully, the initial values were the same... + [signals, indices] = unique(signals, 'stable'); + minimums = minimums(indices); + maximums = maximums(indices); + values = values(indices); + end + + replaceNaNs = isnan(values); + values(replaceNaNs) = 0; + interfaceSignals = horzcat(signals, num2cell(minimums), num2cell(maximums), num2cell(values)); +end diff --git a/pybuild/matlab_scripts/helperFunctions/getName.m b/pybuild/matlab_scripts/helperFunctions/getName.m new file mode 100644 index 0000000..00201df --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getName.m @@ -0,0 +1,37 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function macro = getName(handle, macro) + + if nargin == 1 + macro = tl_get(handle, 'output.name'); + end + tmp_system = get_param(handle, 'Parent'); + idx = strfind(tmp_system, '/'); + TLSystem = tmp_system(1:idx(1)-1); + if ~isempty(strfind(macro,'$L')) + %get_param(Handle,'masktype') + if ismember(get_param(handle,'masktype'),{'TL_Outport', 'TL_BusOutport'}) + line=getSrcLines(handle); + lineName=get(line,'name'); + if isempty(lineName) + lineName=get(get(line,'SrcPortHandle'),'PropagatedSignals'); + end + macro=strrep(macro,'$L',lineName); + else + macro=strrep(macro,'$L',get(getDstLines(handle),'name')); + end + end + + if ~isempty(strfind(macro,'$N')) + macro=strrep(macro,'$N',TLSystem); + end + if ~isempty(strfind(macro,'$B')) + macro=strrep(macro,'$B',get_param(handle,'name')); + end + if ~isempty(strfind(macro,'$S')) + parent=get_param(handle,'Parent'); + backslash=strfind(parent,'/'); + macro=strrep(macro,'$S',parent(backslash(end)+1:end)); + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getPath.m b/pybuild/matlab_scripts/helperFunctions/getPath.m new file mode 100644 index 0000000..efe4d50 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getPath.m @@ -0,0 +1,6 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function path = getPath(handle) + path=[get_param(handle,'parent') '/' get_param(handle,'name')]; +end diff --git a/pybuild/matlab_scripts/helperFunctions/getProperValue.m b/pybuild/matlab_scripts/helperFunctions/getProperValue.m new file mode 100644 index 0000000..89fd01e --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getProperValue.m @@ -0,0 +1,21 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function jsonValue = getProperValue(tlPort, tlValue) +%GETPROPERVALUE Get a value fitting for a json file, given a TL property +%value. + if strcmp(tlValue, 'IMPLICIT_ENUM') + tlValue = getEnumName(tlPort); + end + + if ischar(tlValue) + jsonValue = tlValue; + elseif isempty(tlValue) + jsonValue = '-'; + else + jsonValue = tlValue(1); + if isnan(jsonValue) + jsonValue = '-'; + end + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getSrcBlocks.m b/pybuild/matlab_scripts/helperFunctions/getSrcBlocks.m new file mode 100644 index 0000000..e95ab3d --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getSrcBlocks.m @@ -0,0 +1,19 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function srcBlocks = getSrcBlocks(block) + + srcBlocks=[]; + tmp=get_param(block,'linehandles'); + + if isfield(tmp,'Inport') + srcBlocks=zeros(size(tmp.Inport)); + for i=1:length(tmp.Inport) + if tmp.Inport(i)<0 + srcBlocks(i)=-1; + else + srcBlocks(i)=get_param(tmp.Inport(i),'srcblockhandle'); + end + end + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/getSrcLines.m b/pybuild/matlab_scripts/helperFunctions/getSrcLines.m new file mode 100644 index 0000000..5b39796 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/getSrcLines.m @@ -0,0 +1,13 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function srcLines = getSrcLines(block) + + tmp=get_param(block,'linehandles'); + + if isfield(tmp,'Inport') + srcLines=tmp.Inport; + else + srcLines=[]; + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/loadLibraries.m b/pybuild/matlab_scripts/helperFunctions/loadLibraries.m new file mode 100644 index 0000000..87e9b92 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/loadLibraries.m @@ -0,0 +1,11 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function loadLibraries(root_folder) + block_libraries = dir(fullfile(root_folder, '**\*.slx')); + for i=1:length(block_libraries) + block_library = block_libraries(i); + load_system(block_library.name); + end + + diff --git a/pybuild/matlab_scripts/helperFunctions/loadjson.m b/pybuild/matlab_scripts/helperFunctions/loadjson.m new file mode 100644 index 0000000..3e965fd --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/loadjson.m @@ -0,0 +1,6 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function A = loadjson(filename) + A = jsondecode(fileread(filename)); +end diff --git a/pybuild/matlab_scripts/helperFunctions/modifyEnumStructField.m b/pybuild/matlab_scripts/helperFunctions/modifyEnumStructField.m new file mode 100644 index 0000000..101a6a7 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/modifyEnumStructField.m @@ -0,0 +1,21 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function outStruct = modifyEnumStructField(inStruct) + % MODIFYENUMSTRUCTFIELD Update a given struct with data based on type. + % If the given struct contains enumeration data, insert default value. + % If not, remove the default field if present. + % + % NOTE: Used in parse*Ports/parseCalMeasData where "instruct" is + % created outside and then rewritten inside a for-loop. + % Only enum variables should have the default field. + % + % See also parseInPorts, parseOutPorts, parseCalMeasData. + tmpEnum = enumeration(inStruct.type); + if ~isempty(tmpEnum) + inStruct.default = char(tmpEnum.getDefaultValue()); + elseif isfield(inStruct, 'default') + inStruct = rmfield(inStruct, 'default'); + end + outStruct = inStruct; +end diff --git a/pybuild/matlab_scripts/helperFunctions/removeConfigDuplicates.m b/pybuild/matlab_scripts/helperFunctions/removeConfigDuplicates.m new file mode 100644 index 0000000..7dc65a9 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/removeConfigDuplicates.m @@ -0,0 +1,32 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function out = removeConfigDuplicates(config) + %Take a cell array with configs an return + %a config cell array without duplicates + + confs = {}; + lenConfig = length(config); + j=1; + for i=1:lenConfig + if ~checkIfDefined(config{i},confs) + confs{j} = config{i}; + j=j+1; + end + end + out = confs; +end + +function def = checkIfDefined(cellArr, inCellArrArr) +% Check if cell array is defined within an array of cell arrays + def = 0; + for i=1:length(inCellArrArr) + lenCellArr = length(cellArr); + if lenCellArr == length(inCellArrArr{i}) + if sum(strcmp(sort(cellArr),sort(inCellArrArr{i}))) == lenCellArr + def = 1; + return + end + end + end +end \ No newline at end of file diff --git a/pybuild/matlab_scripts/helperFunctions/sortSystemByClass.m b/pybuild/matlab_scripts/helperFunctions/sortSystemByClass.m new file mode 100644 index 0000000..b295898 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/sortSystemByClass.m @@ -0,0 +1,26 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function classSortedBlocks = sortSystemByClass(system) + classes={'CVC_DISP'; 'CVC_CAL'}; + classSortedBlocks=struct; + for i=1:length(classes) + classSortedBlocks.(classes{i}) = []; + end + + %TODO: this parsing is not that nice, as it will find combinations of class + %suffixes, which does not exist. + blksWithType = find_system(system, 'FindAll', 'on', 'lookundermasks', 'on', 'regexp', 'on', ... + 'masktype', 'TL(?!_PreProcessorIf|_MilHandler|_Enable|_SimFrame|_MainDialog|_Function|_StateflowLogger|_StateflowLoggingMain|_ToolSelector|_AddFile|_DummyTrigger|_DataStoreRead|_DataStoreWrite|_CustomCode|SAMPLES_BW_LOGICAL_OPERATOR|SAMPLES_ROUNDING_FUNCTION|SAMPLES_16BIT_DECODER|SAMPLES_16BIT_ENCODER).*', 'data', '.*?''output''\,.*?'); + classWithType= tl_get(blksWithType, 'output.class'); + if ~isempty(classWithType) + for i=1:length(classes) + class = classes{i}; + filter_tmp = regexp(classWithType,['(?:ASIL_[ABCD]/){0,1}' class '(?:_MERGEABLE|_BURAM)?' '(?:_ASIL_[ABCD]){0,1}' '$']); + if ~isempty(filter_tmp) + filter = cellfun(@(c)~isempty(c), filter_tmp); + classSortedBlocks.(classes{i}) = blksWithType(filter); + end + end + end +end diff --git a/pybuild/matlab_scripts/helperFunctions/tl_getfast.m b/pybuild/matlab_scripts/helperFunctions/tl_getfast.m new file mode 100644 index 0000000..5171a3d --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/tl_getfast.m @@ -0,0 +1,89 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function Ans = tl_get(Handles,Field) + +if isempty(Handles) + Ans=[]; + return; +end + +if iscell(Handles) + for i=1:length(Handles) + HTemp(i,1)=get_param(Handles{i},'handle'); + end + Handles=HTemp; +elseif ischar(Handles) + Handles=get_param(Handles,'handle'); +end + +Dot=strfind(Field,'.'); + +if ~isempty(Dot) + Before=Field(1:Dot-1); + After=Field(Dot+1:end); +end + + + +if length(Handles)==1 + Tmp = Read_Block_Data(Handles); + if ~isempty(Dot) + Ans=Tmp.(Before).(After); + else + Ans=Tmp.(Field); + end +else +Ans={}; + for i=1:length(Handles) + Tmp = Read_Block_Data(Handles(i)); + if ~isempty(Dot) + Ans{i,1}=Tmp.(Before).(After); + else + Ans{i,1}=Tmp.(Field); + end + end +end + + +function Data = Read_Block_Data(Handle) + + +BlockType = get_param(Handle, 'MaskType'); +DataStr = get_param(Handle, 'data'); +Data = eval(DataStr, '[]'); +if ~isempty(tl_manage_blockset('GetDataDescription',BlockType)) + Data = tl_supplement_data_struct(Data, BlockType); +end + +switch get_param(Handle,'masktype') + case 'TL_Constant' + Data.output.value=get_param(Handle,'value'); + case 'TL_IndexSearch' + Data.input.value=get_param(Handle,'bpData'); + case 'TL_Prelookup' + Data.input.value=get_param(Handle,'BreakpointsData'); + case 'TL_Interpolation' + Data.table.value=get_param(Handle,'table'); + case 'TL_Interpolation_n-D' + Data.table.value=get_param(Handle,'Table'); +end + + +if strcmp(BlockType,'TL_Rescaler') + Data.output.value=tl_get(Handle,'output.value'); +end + + + +try +Data.output.width=str2double(get_param(Handle,'PortDimensions')); +catch +end + + + + + + + diff --git a/pybuild/matlab_scripts/helperFunctions/topLevelSystem.m b/pybuild/matlab_scripts/helperFunctions/topLevelSystem.m new file mode 100644 index 0000000..b0a6170 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/topLevelSystem.m @@ -0,0 +1,21 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function topLevelSystem = topLevelSystem(model) +%Function which returns a string to the top level target link subsystem +%Takes one argument, which is the model names + tlFncs = find_system(model, 'FindAll', 'on', 'LookUnderMasks', 'all', ... + 'Regexp' ,'on', 'MaskType', 'TL_Function'); + + funcParents = get_param(tlFncs, 'Parent'); + if ~iscell(funcParents) + funcParents = {funcParents}; + end + lenFncs = cellfun(@(p)length(p), funcParents); + if ~isempty(lenFncs) + topLevelIdx = lenFncs == min(lenFncs(:)); + topLevelSystem = funcParents{topLevelIdx}; + else + error('did not find any TL_Function blocks') + end +end \ No newline at end of file diff --git a/pybuild/matlab_scripts/helperFunctions/updateModels.m b/pybuild/matlab_scripts/helperFunctions/updateModels.m new file mode 100644 index 0000000..b34a904 --- /dev/null +++ b/pybuild/matlab_scripts/helperFunctions/updateModels.m @@ -0,0 +1,131 @@ +% Copyright 2024 Volvo Car Corporation +% Licensed under Apache 2.0. + +function errorOccurred = updateModels(mode, rootFolder, modelList) + bdclose('all') + evalin('base', 'global Vc'); + global Vc; + startdir = pwd; + % Load nvmram lists + nvmStructs = [rootFolder '/Projects/*/conf.local/nvm_structs.json']; + NVMData = struct(); + for file=dir(nvmStructs)' + disp(['Loading NVM data from ' file.folder]); + tmp_nvm=loadjson(fullfile(file.folder, file.name)); + for block=tmp_nvm + if ~isempty(block(1).signals) + for var=block(1).signals + NVMData.(var(1).name) = var(1); + end + end + end + end + + tlmodels = false; + for i=1:length(modelList) + [modelFolder, modelName, ~] = fileparts(modelList{i}); + % Check if model is configured to use TargetLink or not. + isTLModel = modelConfiguredForTL(rootFolder, modelFolder, modelName); + % Save if any of the models was a TargetLink model + tlmodels = tlmodels || isTLModel; + end + + % Load par-files, add *Const manually if not already in the list + % This is required since they can contain constants used by other models + modelListPar = modelList; + if all(cellfun(@isempty, regexp(modelList,'Models/Common/\w*Const/\w*Const.mdl','match'))) + commonConstModels = dir('Models/Common/*Const/*Const.mdl'); + for i=1:length(commonConstModels) + modelName = [commonConstModels(i).folder '/' commonConstModels(i).name] + modelListPar = [{strrep(modelName, rootFolder, "")}, modelListPar]; + end + end + + for i=1:length(modelListPar) + [modelFolder, modelName, ~] = fileparts(modelListPar{i}); + end + + for i=1:length(modelListPar) + [modelFolder, modelName, ~] = fileparts(modelListPar{i}); + modelFolder = strip(convertStringsToChars(modelFolder), '\'); + par_f_path = strip(join([modelFolder '\' modelName '_par.m'],''), '\'); + if ~isfile(par_f_path) + error('Invalid par file path: "%s"', par_f_path); + end + + % Set all model sample times to 0.01 + clear tmp; % tmp is used by many par_files, and not always cleaned up + run(par_f_path); + tok = regexp(modelName, '([A-Z]\w*?)([A-Z]\w*?)([A-Z]\w*?){0,1}(?:__.*?){0,1}$','tokens'); + if ~isempty(tok{1}{3}) + Vc.(tok{1}{2}).(tok{1}{3}).ts = 0.01; + else + Vc.(tok{1}{2}).ts = 0.01; + end + disp(['Loaded: ' par_f_path]) + cd(startdir); + end + + % Update the model and generate code + errorOccurred = false; + interfaceSignals = getInterfaceSignals(rootFolder); + for i=1:length(modelList) + cd(startdir); + if ~isfile(modelList{i}) + error('Invalid model path: "%s"', modelList{i}); + end + + [modelFolder, modelName, ~] = fileparts(modelList{i}); + cd([rootFolder '/' modelFolder]); + + % Would like to avoid this duplication, but not sure how. + ssp = strsplit(modelList{i}, '/'); + % SSP is desired in the path "Models///, hence end-2. + ssp = ssp(end-2); + ssp = ssp{1}; + disp(ssp) + + isTLModel = modelConfiguredForTL(rootFolder, modelFolder, modelName); + + fprintf('\nStart generation of unitCfg for model %s\n', modelName); + try + fprintf('\nrootFolder: %s, modelName: %s, ssp: %s\n', rootFolder, modelName, ssp); + + switch mode + case 'update' + disp(['Updating: ' modelName]); + updateModel(rootFolder, modelName, ssp, NVMData, interfaceSignals); + case 'codegen' + disp(['Generating: ' modelName]); + if isTLModel + if ~exist('dsdd_manage_project', 'file') + error('TargetLink not installed. Cannot generate code for models configured with TargetLink'); + end + generateTLUnit(rootFolder, modelName, ssp); + else + generateECUnit(rootFolder, modelName, ssp) + end + otherwise + fprintf('\n Unsupported mode: %s\n', mode); + errorOccurred = true; + break; + end + catch err + fprintf('\nError: %s\n', err.getReport()); + errorOccurred = true; + end + + fprintf('\nFinished generation of unitCfg for model %s\n', modelName); + cd(startdir); + end + + if tlmodels + % Throw away any local changes to DD0 + dsdd('Close', 'save', 0); + end + + % Add final success message if no errors occurred + if ~errorOccurred + fprintf('\n%s\n', 'Matlab task succeeded!'); + end +end diff --git a/pybuild/memory_section.py b/pybuild/memory_section.py new file mode 100644 index 0000000..c40e63e --- /dev/null +++ b/pybuild/memory_section.py @@ -0,0 +1,224 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module containing cvc classes for VCC - defines and includes for memory sections.""" + +import time +from pathlib import Path +from pybuild import build_defs +from pybuild.problem_logger import ProblemLogger + + +class MemorySection(ProblemLogger): + """Handle headers for CVC_* definitions.""" + + calibration_definitions = [ + 'CVC_CAL', + 'CVC_CAL_ASIL_A', + 'CVC_CAL_ASIL_B', + 'CVC_CAL_ASIL_C', + 'CVC_CAL_ASIL_D', + 'CVC_CAL_MERGEABLE_ASIL_A', + 'CVC_CAL_MERGEABLE_ASIL_B', + 'CVC_CAL_MERGEABLE_ASIL_C', + 'CVC_CAL_MERGEABLE_ASIL_D' + ] + measurable_definitions = [ + 'CVC_DISP', + 'CVC_DISP_ASIL_A', + 'CVC_DISP_ASIL_B', + 'CVC_DISP_ASIL_C', + 'CVC_DISP_ASIL_D' + ] + project_defines = { + 'HI': { + 'START': { + 'const': '#define {software_component_name}_START_SEC_CONST_UNSPECIFIED\n', + 'disp': '#define {software_component_name}_START_SEC_VAR_INIT_UNSPECIFIED\n', + 'cal': '#pragma section ".XcpCalibrationSection"\n' + }, + 'STOP': { + 'const': '#define {software_component_name}_STOP_SEC_CONST_UNSPECIFIED\n', + 'disp': '#define {software_component_name}_STOP_SEC_VAR_INIT_UNSPECIFIED\n', + 'cal': '#pragma section\n' + } + }, + 'ZC': { + 'START': { + 'const': '#define {software_component_name}_START_SEC_VCC_CONST\n', + 'disp': '#define {software_component_name}_START_SEC_VCC_DISP\n', + 'cal': '#define {software_component_name}_START_SEC_VCC_CAL\n' + }, + 'STOP': { + 'const': '#define {software_component_name}_STOP_SEC_VCC_CONST\n', + 'disp': '#define {software_component_name}_STOP_SEC_VCC_DISP\n', + 'cal': '#define {software_component_name}_STOP_SEC_VCC_CAL\n' + }, + } + } + + def __init__(self, build_cfg): + super().__init__() + self.build_cfg = build_cfg + self.a2l_cfg_name = self.build_cfg.get_a2l_cfg()['name'] + self.ecu_supplier = self.build_cfg.get_ecu_info()[0] + if self.ecu_supplier == 'HI': + self.include_header_guards = True + self.software_component_name = self.a2l_cfg_name + self.mem_map_include = f'#include "{self.a2l_cfg_name}_MemMap.h"\n' + else: + self.include_header_guards = False + self.software_component_name = self.build_cfg.get_swc_name() + self.mem_map_include = f'#include "{self.software_component_name}_MemMap.h"\n' + self.xcp_enabled = self.build_cfg.get_xcp_enabled() + self.use_volatile_globals = self.build_cfg.get_use_volatile_globals() + + @staticmethod + def _get_mem_map_section(section): + return 'STOP' if section == 'END' else section + + @staticmethod + def _get_header(section_file): + section_file_header_guard = section_file.split('.')[0].upper() + return [ + f'#ifndef {section_file_header_guard}_H\n', + f'#define {section_file_header_guard}_H\n\n' + ] + + @staticmethod + def _get_footer(section_file): + section_file_header_guard = section_file.split('.')[0].upper() + return [f'\n#endif /* {section_file_header_guard}_H */\n'] + + def _get_cal(self, section): + cvc_undefines = [f'#undef {definition}\n' for definition in self.calibration_definitions] + if section == 'START': + volatile_string = 'volatile' if self.use_volatile_globals else '' + cvc_defines = [f'#define {definition} {volatile_string}\n' for definition in self.calibration_definitions] + else: + cvc_defines = [] + section_type = 'cal' if self.xcp_enabled else 'disp' + memory_section_handling = [ + self.project_defines[self.ecu_supplier][self._get_mem_map_section(section)][section_type].format( + software_component_name=self.software_component_name + ) + ] + if self.ecu_supplier != 'HI' or not self.xcp_enabled: + memory_section_handling.append(self.mem_map_include) + return cvc_undefines, cvc_defines, memory_section_handling + + def _get_disp(self, section): + cvc_undefines = [f'#undef {definition}\n' for definition in self.measurable_definitions] + if section == 'START': + volatile_string = 'volatile' if self.use_volatile_globals else '' + cvc_defines = [f'#define {definition} {volatile_string}\n' for definition in self.measurable_definitions] + else: + cvc_defines = [] + memory_section_handling = [ + self.project_defines[self.ecu_supplier][self._get_mem_map_section(section)]['disp'].format( + software_component_name=self.software_component_name + ), + self.mem_map_include + ] + return cvc_undefines, cvc_defines, memory_section_handling + + def _get_code(self, section): + mem_map_section = self._get_mem_map_section(section) + cvc_undefines = [] + cvc_defines = [] + memory_section_handling = [ + f'#define {self.software_component_name}_{mem_map_section}_SEC_CODE\n', + self.mem_map_include + ] + return cvc_undefines, cvc_defines, memory_section_handling + + def _get_const(self, section): + cvc_undefines = [] + cvc_defines = [] + memory_section_handling = [ + self.project_defines[self.ecu_supplier][self._get_mem_map_section(section)]['const'].format( + software_component_name=self.software_component_name + ), + self.mem_map_include + ] + return cvc_undefines, cvc_defines, memory_section_handling + + def _get_rest(self): + cvc_undefines = [] + cvc_defines = [] + memory_section_handling = [ + self.mem_map_include + ] + return cvc_undefines, cvc_defines, memory_section_handling + + def _get_predecl(self): + cvc_undefines = [] + cvc_defines = [] + memory_section_handling = [ + self.mem_map_include + ] + return cvc_undefines, cvc_defines, memory_section_handling + + def generate_cvc_header(self, section, section_file): + """Generate CVC headers. + + Args: + section (str): Name of the CVC section + section_file (str): Name of the header file + Returns: + lines_to_write (list(str)): Lines to write to given section file. + """ + header = self._get_header(section_file) if self.include_header_guards else [] + footer = self._get_footer(section_file) if self.include_header_guards else [] + if '_CAL_' in section_file: + cvc_undefines, cvc_defines, memory_section_handling = self._get_cal(section) + elif '_DISP_' in section_file: + cvc_undefines, cvc_defines, memory_section_handling = self._get_disp(section) + elif not section_file.startswith('PREDECL_'): + if section_file.startswith('CVC_CAL') or section_file.startswith('CVC_DISP'): + self.critical('Should not find CVC_CAL/DISP here. Check logic. File: %s.', section_file) + elif section_file.startswith('CVC_CODE'): + cvc_undefines, cvc_defines, memory_section_handling = self._get_code(section) + elif section_file.startswith('CVC_CONST'): + cvc_undefines, cvc_defines, memory_section_handling = self._get_const(section) + else: + cvc_undefines, cvc_defines, memory_section_handling = self._get_rest() + else: + cvc_undefines, cvc_defines, memory_section_handling = self._get_predecl() + + return header + cvc_undefines + cvc_defines + memory_section_handling + footer + + def generate_required_header_files(self): + """Generate required header files to delivery folder. + + Generate required header files such as memory protection files. + NOTE: Currently, only one ASIL level can be selected for an SWC. + """ + self.info('******************************************************') + self.info('Start generating required header files') + start_time = time.time() + src_dst_dir = self.build_cfg.get_src_code_dst_dir() + for section_dict in build_defs.PREDECL_EXTRA.values(): + for section_file in section_dict.values(): + header = self._get_header(section_file) if self.include_header_guards else [] + footer = self._get_footer(section_file) if self.include_header_guards else [] + with Path(src_dst_dir, section_file).open('w', encoding="utf-8") as header_file_handler: + header_file_handler.writelines(header + footer) + + for asil_dict in build_defs.ASIL_LEVEL_MAP.values(): + for type_dict in asil_dict.values(): + for section_dict in type_dict.values(): + for section, section_file in section_dict.items(): + lines_to_write = self.generate_cvc_header(section, section_file) + with Path(src_dst_dir, section_file).open('w', encoding="utf-8") as header_file_handler: + header_file_handler.writelines(lines_to_write) + + for nvm_dict in build_defs.NVM_LEVEL_MAP.values(): + for section_dict in nvm_dict.values(): + for section_file in section_dict.values(): + header = self._get_header(section_file) if self.include_header_guards else [] + footer = self._get_footer(section_file) if self.include_header_guards else [] + with Path(src_dst_dir, section_file).open('w', encoding="utf-8") as header_file_handler: + header_file_handler.writelines(header + footer) + self.info('Finished generating required header files (in %4.2f s)', time.time() - start_time) diff --git a/pybuild/nvm_def.py b/pybuild/nvm_def.py new file mode 100644 index 0000000..dffa50c --- /dev/null +++ b/pybuild/nvm_def.py @@ -0,0 +1,568 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module for handling of NVM definitions and for generation of c&h-files defining the memory layout of the NVM.""" +import re +import os +import json + +import pybuild.build_defs as bd +from pybuild.types import byte_size, get_bitmask +from pybuild.a2l import A2l +from pybuild.problem_logger import ProblemLogger + + +class NVMDef(ProblemLogger): + """A class that holds the NVM definitions for the build. + + Provides methods for generating NVM structs and header files. + The header files includes defines which reference the + struct elements as variables. + """ + + class WrongTypeException(Exception): + """WrongTypeException.""" + + _allowed_nvm_memory_areas = [ + "NVM_LIST_32", + "NVM_LIST_16", + "NVM_LIST_8", + "NVM_LIST_32_PER", + "NVM_LIST_16_PER", + "NVM_LIST_8_PER", + "NVM_LIST_CRITICAL1", + "NVM_LIST_CRITICAL2", + ] + + _nvm_header_footer = "\n#endif /* VCC_NVM_STRUCT_H */\n" + + def __init__(self, project_config, unit_cfg, nvm_vars): + """Constructor. + + Args: + project_config (BuildProjConfig): current project configuration + unit_cfg (UnitConfigs): unit definitions + nvm_vars (dict): NVM variables from unit configurations (:doc:`UnitConfigs `) + + """ + super().__init__() + self._project_config = project_config + self._nvm_vars = nvm_vars + # get the size of areas and c-file names + self._nvm_defs = project_config.get_nvm_defs() + self._nvm_signals = {} + self._nvm_memory_areas = tuple() + self._mem_area_elem_size = {} + self._area_section = {} + self._mem_area_pragmas = tuple() + self._nvm_header_head = self._get_nvm_header_head(unit_cfg) + + with open( + os.path.join(project_config.get_root_dir(), self._nvm_defs["baseNvmStructs"]), "r", encoding="utf-8" + ) as nvm_json: + self.nvm_definitions = json.load(nvm_json) + for memory_area in self.nvm_definitions: + self._add_memory_area(memory_area) + self._order_nvm_per_area() + for memory_area in self.nvm_definitions: + memory_index = self._get_nvm_areas_index(memory_area["name"]) + self.info("Updating %s with index %s", memory_area["name"], memory_index) + self.nvm_definitions[memory_index]["signals"] = self._get_signal_list(memory_area["signals"]) + + @staticmethod + def _get_nvm_header_head(unit_cfg): + _nvm_header_head = ( + "/*\n" + " * vcc_nvm_struct.h - struct for NVM signals\n" + " */\n\n" + "#ifndef VCC_NVM_STRUCT_H\n" + "#define VCC_NVM_STRUCT_H\n\n" + ) + _nvm_header_head += unit_cfg.base_types_headers + return _nvm_header_head + + def _add_memory_area(self, memory_area): + """Add non-default areas.""" + if memory_area["name"] not in self._allowed_nvm_memory_areas: + msg = f"Memory area: {memory_area['name']} not allowed" + self.critical(msg) + raise NVMDef.WrongTypeException(msg) + + self._nvm_memory_areas = (*self._nvm_memory_areas, memory_area["name"]) + self._mem_area_elem_size.update({memory_area["name"]: byte_size(memory_area["default_datatype"])}) + + if memory_area["persistent"]: + self._area_section.update({memory_area["name"]: "CVC_NVM_P"}) + self._mem_area_pragmas = (*self._mem_area_pragmas, (bd.CVC_NVM_P_START, bd.CVC_NVM_P_END)) + else: + self._area_section.update({memory_area["name"]: "CVC_NVM"}) + self._mem_area_pragmas = (*self._mem_area_pragmas, (bd.CVC_NVM_START, bd.CVC_NVM_END)) + + def _var_to_area(self, var_info): + """Find the NVM area for the variable. + + Args: + var_info (dict): a dict with the variable attributes. + + Returns: + area (str): a string with the area the variable should be + defined in. + + """ + mtch = re.match(r"\D+(\d+)?", var_info["type"]) + if mtch.group(1) is None: + size = "8" + else: + size = mtch.group(1) + if var_info["class"] == "CVC_DISP_NVM": + return "NVM_LIST_" + size + if var_info["class"] == "CVC_DISP_NVM_P": + return "NVM_LIST_" + size + "_PER" + self.critical("%s is not a NVM variable!", var_info["name"]) + return None + + def _order_nvm_per_area(self): + """Order the NVM in the areas, based on the definitions.""" + for var, unit_attrib in self._nvm_vars.items(): + for _, var_attribs in unit_attrib.items(): + area = self._var_to_area(var_attribs) + self._nvm_signals[var] = var_attribs + self._nvm_signals[var]["area"] = area + # only use one units definition + # TODO:Make a nicer solution # + break + + def nvm_area_iterator(self, nvm_area_name): + """Get an iterator for NVM 'area'. + + The iterator yields data_type and and variable name for the + variables defined in the area. + + Args: + nvm_area_name (str): the name of the NVM area + + Returns: + tuple: (data_type, variable name, size) + + """ + for nvm_signal_name, nvm_attributes in self._nvm_signals.items(): + if nvm_attributes["area"] == nvm_area_name: + yield nvm_attributes.get("type"), nvm_signal_name, nvm_attributes.get("width", 1) + + def _a2l_dict(self, use_prefix): + """Return a dict defining all parameters for a2l-generation. + + Args: + use_prefix (bool): Patch the nvm header file definitions with the SWC name as prefix. + """ + res = {} + prefix = f"{self._project_config.get_swc_name()}_" if use_prefix else "" + for var, var_attrib in self._nvm_signals.items(): + res[var] = { + "var": {"var": var, "type": var_attrib["type"], "cvc_type": "CVC_NVM"}, + "a2l_data": { + "bitmask": get_bitmask(var_attrib["type"]), + "description": var_attrib["description"], + "lsb": var_attrib.get("lsb", 1), + "max": var_attrib.get("max"), + "min": var_attrib.get("min"), + "offset": var_attrib.get("offset"), + "unit": var_attrib["unit"], + "symbol": prefix.lower() + var_attrib["area"].lower(), + "symbol_offset": var_attrib.get("struct_off"), + }, + } + width = var_attrib.get("width", 1) + if width: + if isinstance(width, list): + res[var]["array"] = width + elif int(width) > 1: + res[var]["array"] = [width] + return {"vars": res, "function": "VcNvm"} + + @staticmethod + def _compare_size(signal, widths): + """Compare a json signal object with widths array. + + :param signal: signal name + :param widths: array matrix size + :return: bool True if size is the same + + """ + return signal["x_size"] == widths[0] and signal["y_size"] == widths[1] + + @staticmethod + def _clean_values(widths): + """Get clean width values. + + Sometimes width array i set to -1, + (This data is read out from the simulink model in the matlab scripts, + -1 is simulink logic for the values should be inherited). + :param widths: + :return: a correct widths array + """ + if widths in ("-1", 1): + widths = [1, 1] + return widths + + def _assert_data_type(self, signal, memory_area): + memory_area_index = self._get_nvm_areas_index(memory_area) + if "NotApplicable" in self.nvm_definitions[memory_area_index]["allowed_datatypes"]: + # Special case for NVM_LIST_CRITICAL1 and 2. Any type is acceptable. + self.debug("Data type is not checked for %s", self.nvm_definitions[memory_area_index]["name"]) + return + if signal["type"] not in self.nvm_definitions[memory_area_index]["allowed_datatypes"]: + msg = f"Signal type:{signal['type']} for {signal['name']} not allowed in area:{memory_area}" + self.critical(msg) + raise NVMDef.WrongTypeException(msg) + + def _compare_signal(self, signal, data_type, widths, persistent_signal): + """Compare signal and warn if there is a mismatch in data type or size. + + :param signal: signal object from nvm_structs.json file + :param data_type: str + :param widths: array matrix size + :return: True if the signal is the same in both json struct and values read from simulink model. + + """ + if data_type != signal["type"]: + log = self.critical if persistent_signal else self.warning + log("NVM signal: %s type mismatch %s != %s ", signal["name"], data_type, signal["type"]) + return False + if not self._compare_size(signal, widths): + self.critical( + "signal:%s size mismatch %s != %s,%s ", signal["name"], widths, signal["x_size"], signal["y_size"] + ) + return False + + return True + + def _get_nvm_areas_index(self, area): + """Get array index of nvm area. + + :param area: wanted nvm area as string + :return: (int) nvm areas index in self.nvm_definitions + """ + return next( + (index for index, nvm_definition in enumerate(self.nvm_definitions) if nvm_definition["name"] == area), -1 + ) + + def _find_empty_index(self, memory_index, signal): + """Find empty index in array of signals. + + :param memory_index: array index (NVM area) + :param signal: signal to add at empty index + :return: (int) empty index, (-1 if not found) + """ + for signal_index in range(len(self.nvm_definitions[memory_index]["signals"])): + signal_candidate = self.nvm_definitions[memory_index]["signals"][signal_index] + if self._compare_size(signal, (signal_candidate["x_size"], signal_candidate["y_size"])) and ( + signal_candidate["name"].startswith("Pos_") or signal_candidate["name"].startswith("Position_") + ): + return signal_index + return -1 + + def _add_signal_to_nvm_struct(self, memory_index, signal_name, data_type, widths): + """Add a signal to nvm struct at first empty index. + + :param memory_index: array index (NVM area) + :param signal_name: str signal_nameiable name + :param data_type: str + :param widths: array matrix size + """ + if widths == "-1": + widths = [1, 1] + elif widths == "-": + self.critical("Bad widths value (%s), cannot add: %s", widths, signal_name) + return + + new_signal = self._get_memory_area_signal_template(memory_index) + new_signal["name"] = signal_name + new_signal["type"] = data_type + new_signal["x_size"] = int(widths[0]) + new_signal["y_size"] = int(widths[1]) + signal_index = self._find_empty_index(memory_index, new_signal) + if signal_index > -1: + self.debug("Add at empty signal_index %s", signal_index) + self._update_nvm_signal(memory_index, signal_index, new_signal) + else: + self.nvm_definitions[memory_index]["signals"].append(new_signal) + + def _get_signals_in_nvm_structs(self): + signals_in_nvm_structs = {} + for memory_area in self._nvm_memory_areas: + memory_area_index = self._get_nvm_areas_index(memory_area) + signals = self.nvm_definitions[memory_area_index]["signals"] + for signal_index, signal in enumerate(signals): + signals_in_nvm_structs.update( + {signal["name"]: {"memory_area": memory_area, "signal_index": signal_index}} + ) + return signals_in_nvm_structs + + def _dummify_nvm_signal(self, memory_area, signal_index): + dummy_name = f"Pos_{memory_area}bit{'_P' if memory_area.endswith('PER') else ''}_{signal_index}" + memory_index = self._get_nvm_areas_index(memory_area) + self.nvm_definitions[memory_index]["signals"][signal_index]["name"] = dummy_name + self.debug("Name of signal in nvm_structs.json was set to %s", dummy_name) + + def _get_nvm_signal(self, memory_index, signal_index): + return self.nvm_definitions[memory_index]["signals"][signal_index] + + def _update_nvm_signal(self, memory_index, signal_index, signal): + self.debug("Replacing %s with %s", self.nvm_definitions[memory_index]["signals"][signal_index], signal) + self.nvm_definitions[memory_index]["signals"][signal_index] = signal + + def _update_duplicate_nvm_definition(self, nvm_structs_signals, model_signal, model_memory_area): + """Check if already existing nvm signal is correctly configured.""" + nvm_structs_memory_area = nvm_structs_signals[model_signal["name"]]["memory_area"] + nvm_structs_signal_index = nvm_structs_signals[model_signal["name"]]["signal_index"] + nvm_structs_memory_index = self._get_nvm_areas_index(nvm_structs_memory_area) + nvm_structs_signal = self._get_nvm_signal(nvm_structs_memory_index, nvm_structs_signal_index) + model_memory_index = self._get_nvm_areas_index(model_memory_area) + model_signal_widths = (model_signal["x_size"], model_signal["y_size"]) + + if "NVM_LIST_CRITICAL" in nvm_structs_memory_area: + # In this case, we need to update the signal memory area. + # _var_to_area cannot guess the right area for signals located in the critical sections due to varying data + # types + self.debug("Keeping signal %s in %s", model_signal["name"], nvm_structs_memory_area) + self._nvm_signals[model_signal["name"]]["area"] = nvm_structs_memory_area + return + + persistent_signal = "_PER" in model_memory_area or "_PER" in nvm_structs_memory_area + if model_memory_area != nvm_structs_memory_area: + self.warning("NVM signal memory area mismatch for signal: '%s'", model_signal["name"]) + self.warning("nvm_structs.json: '%s' - Memory area: %s", nvm_structs_memory_area, model_memory_area) + self._dummify_nvm_signal(nvm_structs_memory_area, nvm_structs_signal_index) + self._add_signal_to_nvm_struct( + model_memory_index, model_signal["name"], model_signal["type"], model_signal_widths + ) + elif not self._compare_signal(nvm_structs_signal, model_signal["type"], model_signal_widths, persistent_signal): + if persistent_signal: + self.warning("NVM signal type or size mismatch for signal: '%s'", model_signal["name"]) + self._dummify_nvm_signal(nvm_structs_memory_area, nvm_structs_signal_index) + self._add_signal_to_nvm_struct( + model_memory_index, model_signal["name"], model_signal["type"], model_signal_widths + ) + self.warning("%s relocated to fitting position", model_signal["name"]) + else: + self._update_nvm_signal(nvm_structs_memory_index, nvm_structs_signal_index, model_signal) + + def _get_memory_area_signal_template(self, memory_area_index): + memory_area = self.nvm_definitions[memory_area_index] + signals = memory_area["signals"] + if signals: + return signals[0].copy() + + return {"name": "", "type": "", "x_size": "", "y_size": ""} + + def _update_nvm_base_struct(self): + """Gather and update all nvm signals. + + 1) Updates existing signals, + 2) Deletes/Dummy declares non- and persistent unused signals respectively, + 3) Adds new signals, + in the nvm struct. + """ + + def remove_unused_signals_from_nvm_struct(): + """Remove unused signals from the nvm struct. + + The signals are listed in an array and accessed through calculated indices, therefore, + all unused signals must be removed at once. + """ + for mem_area in self._nvm_memory_areas: + mem_area_index = self._get_nvm_areas_index(mem_area) + unused_signals_in_area = [ + signal_name + for signal_name, signal_info in unused_nvm_structs_signals.items() + if signal_info["memory_area"] == mem_area + ] + + # Cannot remove signals from the persistent memory areas, + # however, they can be exchanged for dummy signals + if "_PER" in self.nvm_definitions[mem_area_index]["name"]: + for unused_signal_name in unused_signals_in_area: + if unused_signal_name.startswith("Pos"): + self.debug("Found unused signal: '%s' in memory area: %s", unused_signal_name, mem_area) + else: + self.warning("Found unused signal: '%s' in memory area: %s", unused_signal_name, mem_area) + self._dummify_nvm_signal( + mem_area, unused_nvm_structs_signals[unused_signal_name]["signal_index"] + ) + else: + self.nvm_definitions[mem_area_index]["signals"] = [ + signal + for signal in self.nvm_definitions[mem_area_index]["signals"] + if signal["name"] not in unused_signals_in_area + ] + + nvm_structs_signals = self._get_signals_in_nvm_structs() + unused_nvm_structs_signals = self._get_signals_in_nvm_structs() + new_nvm_structs_signals = [] + + for nvm_memory_area in self._nvm_memory_areas: + memory_area_index = self._get_nvm_areas_index(nvm_memory_area) + if "NVM_LIST_CRITICAL" in nvm_memory_area: + # NVM_LIST_CRITICAL.* only exists in some projects + continue + if memory_area_index == -1: + self.critical("NVM area not found for: %s", nvm_memory_area) + continue + for nvm_data_type, nvm_signal_name, nvm_widths in self.nvm_area_iterator(nvm_memory_area): + nvm_widths = self._clean_values(nvm_widths) + nvm_signal = self._get_memory_area_signal_template(memory_area_index) + nvm_signal["name"] = nvm_signal_name + nvm_signal["type"] = nvm_data_type + nvm_signal["x_size"] = int(nvm_widths[0]) + nvm_signal["y_size"] = int(nvm_widths[1]) + if nvm_signal_name in nvm_structs_signals: + self.debug("Deleting %s", nvm_signal_name) + del unused_nvm_structs_signals[nvm_signal_name] + self._update_duplicate_nvm_definition(nvm_structs_signals, nvm_signal, nvm_memory_area) + else: + new_nvm_structs_signals.append((memory_area_index, nvm_signal["name"], nvm_data_type, nvm_widths)) + remove_unused_signals_from_nvm_struct() + + for new_signal in new_nvm_structs_signals: + self._add_signal_to_nvm_struct(*new_signal) + + def _generate_nvm_structs_updated(self): + self.info("Start generating updated nvm json file") + + self._update_nvm_base_struct() + + nvm_structs_updated_path = os.path.abspath( + os.path.join(self._project_config.get_root_dir(), "output", "nvm_structs_updated.json") + ) + + self.info("Created %s", nvm_structs_updated_path) + + with open(nvm_structs_updated_path, "w", encoding="utf-8") as nvm_structs_file: + json.dump(self.nvm_definitions, nvm_structs_file, indent=4) + + def _generate_nvm_config_headers(self, use_prefix): + """Generate nvm config h file. + + Args: + use_prefix (bool): Patch the nvm header file definitions with the SWC name as prefix. + """ + self.info("Start generating nvm header file") + prefix = f"{self._project_config.get_swc_name()}_" if use_prefix else "" + + def write_signals(): + for memory_area in self._nvm_memory_areas: + memory_area_index = self._get_nvm_areas_index(memory_area) + section = self._area_section[memory_area] + elem_size = self._mem_area_elem_size[memory_area] + hptr.write(f'#include "{section}_START.h"\n') + hptr.write(f"struct {prefix}{memory_area} {{\n") + struct_off = 0 + + signals = self.nvm_definitions[memory_area_index]["signals"] + for signal in signals: + self._assert_data_type(signal, memory_area) + hptr.write(f' {signal["type"]:7} _{signal["name"]}') + size_string = "" + size = max(signal["x_size"], 1) * max(signal["y_size"], 1) + if size > 1: + if signal["x_size"] > 1: + size_string += f'[{signal["x_size"]}]' + if signal["y_size"] > 1: + if signal["x_size"] < 2: + self.critical("NVM signal size incorrect. x_size should not be 1 if y_size > 1") + size_string += "[1]" + size_string += f'[{signal["y_size"]}]' + hptr.write(size_string) + hptr.write(";\n") + defines.append((signal["name"], f"{prefix.lower()}{memory_area.lower()}._{signal['name']}")) + + if signal["name"] in self._nvm_signals: + self._nvm_signals[signal["name"]]["struct_off"] = struct_off + + struct_off += size * byte_size(signal["type"]) + + max_nr_signals = self.nvm_definitions[memory_area_index]["size"] + tot_memory = max_nr_signals * elem_size + free = tot_memory - struct_off + if free > 0: + hptr.write( + f' {self.nvm_definitions[memory_area_index]["default_datatype"]} ' + f'unused[{int(free / elem_size)}];\n' + ) + elif free < 0: + self.critical("NVM area %s overrun!", self.nvm_definitions[memory_area_index]["name"]) + hptr.write(f"}}; /* {struct_off} bytes used of {tot_memory} */\n") + hptr.write(f'#include "{section}_END.h"\n\n') + + def write_extern(): + hptr.write(f'#include "{bd.PREDECL_START}"\n') + for area in self._nvm_memory_areas: + hptr.write(f"extern struct {prefix}{area.upper()} {prefix.lower()}{area.lower()};\n") + hptr.write(f'#include "{bd.PREDECL_END}"\n\n') + + def write_defines(): + hptr.write("\n") + for var, define in defines: + hptr.write(f"#define {var:40} {define}\n") + + src_file_dst = self._project_config.get_src_code_dst_dir() + file_name = os.path.join(src_file_dst, self._nvm_defs["fileName"]) + defines = [] + + with open(file_name + ".h", "w", encoding="utf-8") as hptr: + hptr.write(self._nvm_header_head) + write_signals() + write_extern() + write_defines() + hptr.write(self._nvm_header_footer) + + def _generate_nvm_config_source(self, use_prefix): + """Generate the c-file containing the NVM definition. + + Args: + use_prefix (bool): Patch the nvm source file definitions with the SWC name as prefix. + """ + # TODO: Add memory from previous builds!!! and mark old positions # + self.info("Start generating nvm source file") + prefix = f"{self._project_config.get_swc_name()}_" if use_prefix else "" + src_file_dst = self._project_config.get_src_code_dst_dir() + file_name = os.path.join(src_file_dst, self._nvm_defs["fileName"]) + with open(file_name + ".c", "w", encoding="utf-8") as cptr: + cptr.write(f'#include "{self._nvm_defs["fileName"]}.h"\n\n') + for area, pragma in zip(self._nvm_memory_areas, self._mem_area_pragmas): + cptr.write(f'#include "{pragma[0]}"\n') + cptr.write(f"struct {prefix}{area.upper()} {prefix.lower()}{area.lower()};\n") + cptr.write(f'#include "{pragma[1]}"\n\n') + + def _generate_nvm_config_a2l(self, use_prefix): + """Generate the a2l-file describing the NVM definition. + + Args: + use_prefix (bool): Patch the nvm header file definitions with the SWC name as prefix. + """ + self.info("Start generating nvm a2l file") + + src_file_dst = self._project_config.get_src_code_dst_dir() + file_name = os.path.join(src_file_dst, self._nvm_defs["fileName"]) + a2l_dict = self._a2l_dict(use_prefix) + a2l = A2l(a2l_dict, self._project_config) + a2l.gen_a2l(file_name + ".a2l") + + def generate_nvm_config_files(self, no_nvm_a2l, use_prefix=False): + """Generate all files for variables in the NVM definition. + + Args: + no_nvm_a2l (bool): Do not generate a2l file. + use_prefix (bool): Patch the nvm header file definitions with the SWC name as prefix. + """ + self._generate_nvm_structs_updated() + self._generate_nvm_config_headers(use_prefix) + self._generate_nvm_config_source(use_prefix) + if not no_nvm_a2l: + self._generate_nvm_config_a2l(use_prefix) + + @staticmethod + def _get_signal_list(signals): + return signals if isinstance(signals, list) else [signals] diff --git a/pybuild/problem_logger.py b/pybuild/problem_logger.py new file mode 100644 index 0000000..f8584d9 --- /dev/null +++ b/pybuild/problem_logger.py @@ -0,0 +1,86 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing a problem logger class.""" + + +class ProblemLogger: + """Log helper class. + + Inherit from class ProblemLogger to log problems. + + Please note that all methods listed below are class methods + meaning that all objects of classes inheriting ProblemLogger share a common logging stream. + """ + + __critical = [] + __warning = [] + __log = None + + @classmethod + def init_logger(cls, logger): + """Associates a system logger instance with ProblemLogger.""" + logger.info('Init logger.') + cls.__log = logger + + @classmethod + def clear_log(cls): + """Clear internal error and warning log.""" + cls.__critical = [] + cls.__warning = [] + + @classmethod + def critical(cls, string, *args): + """Log critical error message.""" + cls.__critical.append(string % args) + if cls.__log is not None: + cls.__log.critical(string, *args) + + @classmethod + def warning(cls, string, *args): + """Log warning message.""" + cls.__warning.append(string % args) + if cls.__log is not None: + cls.__log.warning(string, *args) + + @classmethod + def info(cls, string, *args): + """Log information message.""" + if cls.__log is not None: + cls.__log.info(string, *args) + + @classmethod + def debug(cls, string, *args): + """Log debug message.""" + if cls.__log is not None: + cls.__log.debug(string, *args) + + @classmethod + def errors(cls): + """Check if critical errors have been logged. + + Returns (boolean): True if critical errors have been logged. + """ + return len(cls.__critical) > 0 + + @classmethod + def get_problems(cls): + """Get logged problems. + + Returns (dict): a dict with error and warning messages. + """ + return { + 'critical': cls.__critical, + 'warning': cls.__warning + } + + @classmethod + def get_nbr_problems(cls): + """Get number of logged problems. + + Returns (dict): a dict with error and warning message counts. + """ + return { + 'critical': len(cls.__critical), + 'warning': len(cls.__warning) + } diff --git a/pybuild/pt_matlab.py b/pybuild/pt_matlab.py new file mode 100644 index 0000000..2f3f563 --- /dev/null +++ b/pybuild/pt_matlab.py @@ -0,0 +1,428 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Library for using matlab. + +Called pt_matlab to not collide with Mathwork's matlab package. +""" + +import logging +import os +import platform +import subprocess +import sys +import time + +my_system = platform.system() +if my_system == "Darwin": + MATLAB_BIN = os.environ.get("MatInstl2017", "/Applications/MATLAB_R2020a.app/bin/matlab") +elif my_system == "Linux": + MATLAB_BIN = os.environ.get("MatInstl2017", "/usr/local/MATLAB/R2017b/bin/matlab") +else: + from . import pt_win32 + + MATLAB_BIN = os.environ.get("MatInstl2017", "C:\\MATLABR2017b_x64\\bin\\matlab.exe") + +LOGGER = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) +RETRY_TIME = 10 +POLL_TIME = 1 + + +def get_env(): + """Get environment variables.""" + env = os.environ.copy() + workspace = os.environ.get("WORKSPACE", "") + if workspace: + env["MATLAB_PREFDIR"] = os.path.join(workspace, "ConfigDocuments", "buildSlaveMatlabSettings") + return env + + +def wrap_command(command): + """Wrap a command in a try-catch with an exit at the end. + + Use this to be sure never to raise an error in matlab that causes a hanging matlab. + This is useful when writing matlab scripts to be used in jenkins jobs. + + Args: + command (str): command to wrap in try-catch-exit. + Returns: + command (str): the command wrapped in try-catch-exit + """ + return f"try;exitcode=0;{command};catch err;disp(getReport(err));exitcode=1;end;exit(exitcode);" + + +def wrap_m_script(path_to_mscript): + """Wrap a path to an m-script to ensure no jobs in jenkins are left hanging. + + This is useful when writing matlab scripts to be used in jenkins jobs. + + Args: + path_to_mscript (str): file to run in matlab. + Returns: + command (str): the command to send to matlab to run the script + """ + mscript_folder, mscript_file = os.path.split(path_to_mscript) + LOGGER.debug("Using folder %s for the m-script", mscript_folder) + if mscript_folder: + command = wrap_command( + f"addpath('{mscript_folder}');assert(boolean(exist('{mscript_file[:-2]}')));{mscript_file[:-2]}" + ) + else: + command = wrap_command(f"assert(boolean(exist('{mscript_file[:-2]}')));{mscript_file[:-2]}") + return f'"{command}"' + + +def list_to_cell(python_list): + """Convert a python list to a cell argument string for matlab. + + Args: + python_list (list): A list in python + Returns: + cell (str): A cell to be read by Matlab. + """ + matlab_list = "', '".join(python_list) + return f"{{'{matlab_list}'}}" + + +def write_m_script(mfile, base_cmd, wrap_cmd=True): + """Write an m-script to run from the command line. + + The m-script will exit Matlab with an exitcode. + This exitcode can be set in the base_cmd if needed. + + Args: + mfile (str): path to m-file to create + base_cmd (str): Base command to run in Matlab + wrap_cmd (bool): wrap command + """ + if wrap_cmd: + cmd = wrap_command(base_cmd) + else: + cmd = base_cmd + LOGGER.debug("Writing %s", mfile) + with open(mfile, mode="w", encoding="utf-8") as m_file: + m_file.writelines(cmd.split(os.linesep)) + + +def is_model(model_file): + """Check if a file name is a simulink model or not. + + Args: + model_file (str): filename to check + """ + return model_file.endswith(".mdl") or model_file.endswith(".slx") + + +def extract_model_names(files, ending): + """Find model names from path to files. + + Checks if the files corresponds to model files. + + Args: + files (list): files that potentially corresponds to models + ending (str): file ending that is used for models. + Returns: + found_models (list): Models to run checkscripts on. + """ + found_models = [] + for found_file in files: + name = os.path.basename(found_file) + if name.endswith(ending): + name = name[: -len(ending)] + found_models.append(name) + return found_models + + +def cmd_path(path, subdirs=False): + """Generate Matlab command text for adding supplied path and subdirectories. + + Args: + path (str): Path to generate commands for adding. + subdirs (bool): If True, recursively adds subdirs. Default: False + + Returns: + cmds (list): Commands as a list of strings. + """ + return f"addpath(genpath('{path}'))" if subdirs else f"addpath('{path}')" + + +def cmd_callfunc(func, *args): + """Generate Matlab command for calling a function with optional arguments. + + Example: cmd_callfunc('my_function') + cmd_callfunc('my_function', 'argument 1', 'argument 2') + + Args: + func (str): Name of function to call. + args (argument list): Variadic argument list to pass to function. + Returns: + cmd (str): Command text for calling function. + """ + args = ", ".join([cmd_arg(arg) for arg in args]) + return f"{func}({args})" + + +def cmd_arg(arg): + """Transform Python argument to Matlab argument.""" + if isinstance(arg, str): + return f"'{arg}'" + if isinstance(arg, bool): + return "true" if arg else "false" + if isinstance(arg, list): + return list_to_cell(arg) + raise ValueError("Unable to convert argument to Matlab type") + + +def cmds_join(cmds): + """Join several Matlab command strings together, separated by terminators and newlines. + + Args: + cmds (list): List of command string to join together. + Returns: + cmds (str): Command text for executing all supplied commands. + """ + return f";{os.linesep}".join(cmds) + + +class TargetlinkWatcher(logging.StreamHandler): + """Class to check output log for known error messages.""" + + intermittent_errors = [ + "Undefined function 'tl_pref' for input arguments of type 'char'", + "Undefined function 'dsdd_manage_project' for input arguments of type 'char'.", + "Exception: ACCESS_VIOLATION", + ] + + def __init__(self, stream): + """Init.""" + super().__init__(stream) + self.targetlink_error = False + + def reset_errors(self): + """Reset errors.""" + self.targetlink_error = False + + def emit(self, record): + """Set error flag on error message in log.""" + for intermittent_error in self.intermittent_errors: + if intermittent_error in record.getMessage(): + self.targetlink_error = True + super().emit(record) + + +class MatlabWatcher(logging.StreamHandler): + """Class to check output log for sucess message.""" + + success_message = "Matlab task succeeded!" + + def __init__(self): + """Init.""" + super().__init__() + self.task_success = False + + def reset_errors(self): + """Reset errors.""" + self.task_success = False + + def emit(self, record): + """Set success flag on success message in log.""" + if self.success_message in record.getMessage(): + self.task_success = True + + +class Matlab: + """Wrapper for calling matlab from python scripts. + + The wrapper runs a m-script and optionally pipes the logs to stdout. + """ + + def __init__(self, log=None, dry_run=False, matlab_bin=MATLAB_BIN, nojvm=True): + """Init. + + Args: + log (str): file name to log to. Default: None + dry_run (bool): Run a mocked version of matlab. Default: False + matlab_bin (str): path to matlab binary to use in execution + nojvm (bool): False if jvm should be used. Default: True + """ + self.log = log + self.dry_run = dry_run + self.nojvm = nojvm + self.targetlink_watcher = TargetlinkWatcher(sys.stdout) + self.matlab_watcher = MatlabWatcher() + self.mlogger = self.create_logger() + self.mlogger.addHandler(self.matlab_watcher) + self.open_log_file = None + self.matlab_bin = matlab_bin + + @staticmethod + def add_args(parser): + """Parse arguments.""" + matlab_parser = parser.add_argument_group("matlab arguments") + matlab_parser.add_argument( + "--matlab-bin", + help=f"Path to the matlab binary to use. Defaults to {MATLAB_BIN}.", + default=MATLAB_BIN, + ) + + def create_logger(self): + """Create logger for matlab. + + Returns: + logger (logging.Logger): Logger for matlab. + """ + handler = self.targetlink_watcher + handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(message)s")) + logger = logging.getLogger("matlab") + logger.addHandler(handler) + return logger + + def sync_log(self, last_stat): + """Read the latest loglines from the matlab log and write to log. + + Checks if the matlab log file has been updated since last call and + redirects new entries to the python log. + If self.log is None, this function returns None at once. + + Args: + last_stat (os.stat): last timestamp for an updated log. + Returns: + new_stat (os.stat): new timestamp for an updated log. + """ + if self.open_log_file is None: + return None + current_position = self.open_log_file.tell() + if os.stat(self.open_log_file.name) == last_stat: + return last_stat # Do not read partial lines again. + for line in self.open_log_file.readlines(): + # The non-finished lines behaviour was sometimes seen when using diary. + # It should not hurt to have, but if it is causing problems, just remove it. + # It is purely cosmetic. + if line.endswith("\n"): + if line != "\n": # Skip the end of the line we jumped to from a non-finished line + self.mlogger.info(line[0:-1]) + else: + LOGGER.debug("Partial line read. Go back and wait for update.") + self.open_log_file.seek(current_position - len(line)) + break + current_position = self.open_log_file.tell() + return os.stat(self.open_log_file.name) + + def compose_m_script_cmd(self, mfile, wrap_cmd): + """Compose batch script to run matlab.""" + + if my_system in {"Darwin", "Linux"}: + cmd = [ + self.matlab_bin if not self.dry_run else "echo", + "-nodisplay", + "-nodesktop", + ] + else: + cmd = [ + self.matlab_bin if not self.dry_run else "cmd rem", + "-nodisplay", + "-nodesktop", + "-wait", + "-minimize", + ] + + if self.log: + cmd += ["-logfile", self.log] + if self.nojvm: + cmd += ["-nojvm"] + if wrap_cmd: + if my_system == "Darwin": + cmd += ["<", wrap_m_script(mfile)] + else: + cmd += ["-r", wrap_m_script(mfile)] + else: + if my_system == "Darwin": + cmd += ["<", mfile] + else: # Linux will be similar to Windows + cmd += ["-r", mfile[:-2]] + + return cmd + + def run_m_script(self, mfile, wrap_cmd=True, attempts=10): + """Run the composed m-script. + + Args: + mfile (str): The composed m-script + wrap_cmd (bool): wrap command (Default: True) + attempts (int): Number of times to run the command again if an intermittent problem + is detected (Default: 1) + Returns: + process_status: Exitcode from Matlab (or 1 if Matlab was never started) + """ + + def wait_for_process(p_matlab, stat=None): + stat = self.sync_log(None) # Initial sync in case matlab has already finished + + if my_system in {"Darwin", "Linux"}: + while p_matlab.poll() is None: + time.sleep(POLL_TIME) + stat = self.sync_log(stat) + else: + while p_matlab.poll() == pt_win32.STILL_ACTIVE: + time.sleep(POLL_TIME) + stat = self.sync_log(stat) + + if attempts <= 0: + LOGGER.error("Already attempted this too many times. Exiting.") + return 2 # Do not trust previous exit codes + + if self.log and os.path.isfile(self.log): + os.remove(self.log) + + p_matlab = None + process_status = 1 # Something could go wrong in the try, before the exitcode is set + + try: + env = get_env() + LOGGER.debug("Running in dry_run mode: %s", self.dry_run) + cmd = self.compose_m_script_cmd(mfile, wrap_cmd) + LOGGER.debug("Calling: %s", " ".join(cmd)) + + if my_system in {"Darwin", "Linux"}: + p_matlab = subprocess.Popen(cmd) + else: + p_matlab = pt_win32.PtWin32Process() + p_matlab.set_environment(env) + p_matlab.run(command=" ".join(cmd)) + + if not self.dry_run: + if self.log: + # Wait for log file to be created + if my_system in {"Darwin", "Linux"}: + while not os.path.isfile(self.log) and p_matlab.poll() is None: + time.sleep(POLL_TIME) + else: + while not os.path.isfile(self.log) and p_matlab.poll() == pt_win32.STILL_ACTIVE: + time.sleep(POLL_TIME) + + self.open_log_file = open(self.log, "r", encoding="utf-8") if self.log else None + + wait_for_process(p_matlab) + process_status = p_matlab.poll() + + LOGGER.info("Matlab returned with exitcode %s", process_status) + if self.targetlink_watcher.targetlink_error: + LOGGER.warning("Found an intermittent targetlink problem. Trying again, attempts left: %s", attempts) + if self.open_log_file: + self.open_log_file.close() + self.targetlink_watcher.reset_errors() + time.sleep(RETRY_TIME) + process_status = self.run_m_script(mfile, wrap_cmd=wrap_cmd, attempts=attempts - 1) + finally: + if my_system in {"Darwin", "Linux"}: + if p_matlab.poll() is not None: + p_matlab.terminate() + p_matlab.wait() + else: + if p_matlab.poll() == pt_win32.STILL_ACTIVE: + p_matlab.terminate() + + if self.open_log_file: + self.open_log_file.close() + return process_status diff --git a/pybuild/pt_win32.py b/pybuild/pt_win32.py new file mode 100644 index 0000000..e9458a0 --- /dev/null +++ b/pybuild/pt_win32.py @@ -0,0 +1,144 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Wrapper for win32api to simplify it's use. + +See pywin32 documentation or windows api documentation for more information. +""" + +from pybuild.lib.helper_functions import merge_dicts + +STILL_ACTIVE = 259 + +try: + import win32job + import win32process + + class PtWin32Process: + """Alternative to python subprocess. + + This adds functionality to add processes to win32 job containers + to force processes to terminate after it's parent process dies. + """ + + def __init__(self, kill_on_job_close=True): + """Set up default values. + + arguments: + kill_on_job_close (boolean): If True the process will be terminated when all job + handles are closed. + """ + self.process_handle = None + self.thread_handle = None + self.job_handle = None + self.process_id = None + self.thread_id = None + self.process_attributes = None + self.thread_attributes = None + self.b_inherit_handles = True + self.dw_creation_flags = 0 + self.new_environment = None + self.current_directory = None + self.job_limit_flag_list = [] + self.startup_info = win32process.STARTUPINFO() + self.limit_info_dict = {"BasicLimitInformation": {"LimitFlags": 0}} + + if kill_on_job_close: + self.add_limit_flags(win32job.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE) + + def run(self, app_name=None, command=None): + """Run process. + + Can be run with either a specified application, a command line string or both. + + Keyword arguments: + app_name (string): path to application to execute. + command (string): command line string to use in execution. + """ + self.process_handle, self.thread_handle, self.process_id, self.thread_id = win32process.CreateProcess( + app_name, + command, + self.process_attributes, + self.thread_attributes, + self.b_inherit_handles, + self.dw_creation_flags, + self.new_environment, + self.current_directory, + self.startup_info, + ) + + self.job_handle = win32job.CreateJobObject(None, "") + limit_information = self.get_extended_limit_information() + limit_information = merge_dicts(self.limit_info_dict, limit_information, merge_recursively=True) + win32job.SetInformationJobObject( + self.job_handle, win32job.JobObjectExtendedLimitInformation, limit_information + ) + win32job.AssignProcessToJobObject(self.job_handle, self.process_handle) + + def get_extended_limit_information(self): + """Get extended limit information.""" + return win32job.QueryInformationJobObject(self.job_handle, win32job.JobObjectExtendedLimitInformation) + + def set_current_directory(self, current_directory): + """Set process working directory.""" + self.current_directory = current_directory + + def set_environment(self, environment): + """Set process environment variables. + + If not set the process will inherit parent process environment. + + arguments: + environment (dict): a dictionary with environment variables to be set. + """ + self.new_environment = environment + + def set_creation_flags(self, creation_flags): + """Set creation flags. + + arguments: + creation_flags (int): See pywin32 documentation or windows api for documentation. + """ + self.dw_creation_flags = creation_flags + + def add_limit_flags(self, limit_flags): + """Add limit flag.""" + new_limit_flags = self.get_limit_flags() | limit_flags + self.set_limit_flags(new_limit_flags) + + def remove_limit_flags(self, limit_flags): + """Remove limit flag.""" + new_limit_flags = self.get_limit_flags() & ~limit_flags + self.set_limit_flags(new_limit_flags) + + def get_limit_flags(self): + """Get limit flags.""" + return self.limit_info_dict["BasicLimitInformation"]["LimitFlags"] + + def set_limit_flags(self, win32job_limit): + """Set limit flags. + + arguments: + win32job_limit (int): See pywin32 documentation or windows api documentation. + """ + self.limit_info_dict.update({"BasicLimitInformation": {"LimitFlags": win32job_limit}}) + + def poll(self): + """Return process status. + + If process is still running it will return exitcode 259 (STILL_ACTIVE). + """ + return win32process.GetExitCodeProcess(self.process_handle) + + def terminate(self): + """Terminate all processes associated with the job.""" + return win32job.TerminateJobObject(self.job_handle) + +except ImportError: + + class PtWin32Process: + """Dummy.""" + + def __init__(self, kill_on_job_close=True): + """Dummy.""" + raise OSError("pywin32 is not installed or is not compatible with this platform") diff --git a/pybuild/replace_compu_tab_ref.py b/pybuild/replace_compu_tab_ref.py new file mode 100644 index 0000000..6b41197 --- /dev/null +++ b/pybuild/replace_compu_tab_ref.py @@ -0,0 +1,92 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for replacing $CVC_* style references in a2l file.""" + +import re +import argparse + +from pathlib import Path + + +def parse_args(): + """Parse args.""" + parser = argparse.ArgumentParser("Replace $CVC_* style references in a2l file") + parser.add_argument("a2l_target_file") + args = parser.parse_args() + return args + + +def replace_tab_verb(file_path: Path): + """Replace custom Units with conversion table.""" + with open(file_path, encoding='ISO-8859-1') as f_h: + a2l_text = f_h.read() + + ############################################################## + # Absolutely horrible multi-line regex # + # # + # Translates a fake COMPU_METHOD # + # with custom $CVC_* Unit into using a conversion table # + # # + ############################################################## + # If a dollar is found make the following changes: # + # 'RAT_FUNC' => 'TAB_VERB' # + # 'LINEAR' => 'TAB_VERB' # + # New format => "%12.6" # + # Save the $-tag and remove it from the unit # + # Change the line below the '/* Unit */'- line to # + # "['COMPU_TAB_REF CONV_TAB_' $-tag] # + ############################################################## + # ***************************BEFORE************************* # + ############################################################## + # /begin COMPU_METHOD # + # VcDummy_spm_1_0_0_None__CVC_EmCoBaseMode /* Name */ # + # "" /* LongIdentifier */ # + # RAT_FUNC /* ConversionType */ # + # "%11.3" /* Format */ # + # "-,$CVC_EmCoBaseMode" /* Unit */ # + # COEFFS 0 1 0.0 0 0 1 # + # /end COMPU_METHOD # + ############################################################## + # ***************************AFTER************************** # + ############################################################## + # /begin COMPU_METHOD # + # VcDummy_spm_1_0_0_None__CVC_EmCoBaseMode /* Name */ # + # "" /* LongIdentifier */ # + # TAB_VERB /* ConversionType */ # + # "%12.6" /* Format */ # + # "-" /* Unit */ # + # COMPU_TAB_REF CONV_TAB_CVC_EmCoBaseMode # + # /end COMPU_METHOD # + ############################################################## + + COMPU_METHOD_EXPRESSION = ( + r"(RAT_FUNC|LINEAR)" # Match conversion types RAT_FUNC or LINEAR + r"(?P\s+/\* ConversionType \*/\n)" # Capture end of conversion type line + r'(?P\s+"%)' # Capture beginning of format line + r"[0-9]+[.][0-9]+" # Capture formatting + r'(?P"\s+/\* Format \*/\n)' # Capture end format line + r'(?P\s+"[\sA-Za-z0-9\-_/]+)' # Capture beginning of unit line + r",\$(?PCVC_[A-Za-z0-9_]+)" # Capture tab_verb 'CVC_*' of $CVC_EmCoBaseMode + r'(?P"\s*/\* Unit \*/\n)' # Capture end of unit line + r"\s+COEFFS( \d+(.\d+)?)+" + ) # Capture COEFFS line + COMPU_METHOD_REGEX = re.compile(COMPU_METHOD_EXPRESSION) + TAB_VERB_REPLACE = ( + r"TAB_VERB\g\g12.6\g\g\g" + r" COMPU_TAB_REF CONV_TAB_\g" + ) + + a2l_patched = COMPU_METHOD_REGEX.sub(TAB_VERB_REPLACE, a2l_text) + with open(file_path, "w") as f_h: + f_h.write(a2l_patched) + + +def main(): + """Main.""" + args = parse_args() + replace_tab_verb(args.a2l_target_file) + + +if __name__ == "__main__": + main() diff --git a/pybuild/sched_funcs.py b/pybuild/sched_funcs.py new file mode 100644 index 0000000..df78212 --- /dev/null +++ b/pybuild/sched_funcs.py @@ -0,0 +1,173 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing classes for generation of scheduling call points.""" +from os.path import join as pjoin +from os.path import split as psplit + +import pybuild.build_defs as build_defs +from pybuild.build_proj_config import BuildProjConfig +from pybuild.problem_logger import ProblemLogger +from pybuild.unit_configs import UnitConfigs + + +class SchedFuncs(ProblemLogger): + """Generate scheduling functions for all unit initialisation and unit scheduling functions. + + Generates VcExtINI.c containing one function, VcExtINI, that calls all included units' initialisation + (RESTART) functions. + + Generates one VcExt*.c file per configured scheduling raster containing one function collecting + all unit scheduling functions for the specified time-raster. + + TODO: Add the debug functions + """ + + # Not included in VcExtINI.c and VcUnitTsDefines.h. + RESTART_FNC_EXCLUDE = ('VcDebug', 'VcDebugOutput', 'VcDebugSafe', 'VcDebugOutputSafe') + + def __init__(self, build_proj_cfg, unit_cfg): + """Constructor. + + Args: + build_proj_cfg (BuildProjConfig): project configuration. + unit_cfg (UnitConfigs): Class holding all unit interfaces. + """ + super().__init__() + + if isinstance(build_proj_cfg, BuildProjConfig) and isinstance(unit_cfg, UnitConfigs): + self._prj_cfg = build_proj_cfg + self._unit_cfg = unit_cfg + else: + err = ( + 'Input arguments should be an instance of:' + f'BuildProjConfig, not {type(build_proj_cfg)}' + f'AND/OR UnitConfigs, not {type(unit_cfg)}' + ) + raise TypeError(err) + + def generate_sched_c_fncs(self, generate_rte_checkpoint_calls): + """Generate a c-files. + + One per scheduling raster and + one for the running the Init functions + + TODO: Do the suppliers need a header per scheduling function? + + Args: + generate_rte_checkpoint_calls (bool): Generate RTE function checkpoint calls. + """ + a2l_config = self._prj_cfg.get_a2l_cfg() + a2l_name = a2l_config["name"] + dst_dir = self._prj_cfg.get_src_code_dst_dir() + unit_raster_cfg = self._prj_cfg.get_units_raster_cfg() + per_unit_cfg = self._unit_cfg.get_per_unit_cfg() + prefix = self._prj_cfg.get_scheduler_prefix() + init_ext_def_s = "" + init_call_s = f'#include "{build_defs.CVC_CODE_START}"\n\n' + init_call_s += f'void {prefix}VcExtINI(void)\n{{\n' + + for raster in unit_raster_cfg['SampleTimes']: + if raster == "init": + for unit in unit_raster_cfg['Rasters'][raster]: + if unit not in SchedFuncs.RESTART_FNC_EXCLUDE and 'code_generator' in per_unit_cfg[unit]: + code_generator = per_unit_cfg[unit]['code_generator'] + else: + code_generator = 'target_link' + + unit_name = unit.rsplit('__', 1)[0] + if code_generator == 'embedded_coder': + init_ext_def_s += f'extern void {unit_name}_initialize(void);\n' + else: + init_ext_def_s += f'extern void RESTART_{unit_name}(void);\n' + + if unit_name not in SchedFuncs.RESTART_FNC_EXCLUDE: + if code_generator == 'embedded_coder': + init_call_s += f' {unit_name}_initialize();\n' + else: + init_call_s += f' RESTART_{unit_name}();\n' + else: + includes = f'#include "Rte_{a2l_name}.h"\n\n' if generate_rte_checkpoint_calls else "" + ext_def_str = "" + call_str = f'#include "{build_defs.CVC_CODE_START}"\n\n' + call_str += f'void {prefix}{raster}(void)\n{{\n' + for unit in unit_raster_cfg['Rasters'][raster]: + if unit not in SchedFuncs.RESTART_FNC_EXCLUDE and 'code_generator' in per_unit_cfg[unit]: + code_generator = per_unit_cfg[unit]['code_generator'] + else: + code_generator = 'target_link' + + unit_name = unit.rsplit('__', 1)[0] + if code_generator == 'embedded_coder': + ext_def_str += f'extern void {unit_name}_step(void);\n' + call_str += f' {unit_name}_step();\n' + if unit_name not in SchedFuncs.RESTART_FNC_EXCLUDE: + init_ext_def_s += f'extern void {unit_name}_initialize(void);\n' + init_call_s += f' {unit_name}_initialize();\n' + else: + ext_def_str += f'extern void {unit_name}(void);\n' + if generate_rte_checkpoint_calls: + call_str += ( + f' Rte_Call_{a2l_name}_' + f'{a2l_name}LogicalCheckpointReached_CddPFMC_ASILD_' + f'{a2l_name}_LogicalCheckpointReached(ID_{unit_name});\n' + ) + call_str += f' {unit_name}();\n' + if unit_name not in SchedFuncs.RESTART_FNC_EXCLUDE: + init_ext_def_s += f'extern void RESTART_{unit_name}(void);\n' + init_call_s += f' RESTART_{unit_name}();\n' + ext_def_str += '\n' + call_str += '}\n\n' + call_str += f'#include "{build_defs.CVC_CODE_END}"\n\n' + + file_name = pjoin(dst_dir, f'{raster}.c') + with open(file_name, 'w', encoding="utf-8") as fhndl: + fhndl.write(includes) + fhndl.write(ext_def_str) + fhndl.write(call_str) + self.info(f'generated {file_name}') + file_name = pjoin(dst_dir, f'{raster}.h') + with open(file_name, 'w', encoding="utf-8") as f_h: + f_h.write(f'#ifndef {raster.upper()}_H\n') + f_h.write(f'#define {raster.upper()}_H\n\n') + f_h.write(f'void {prefix}{raster}(void);\n\n') + f_h.write(f'#endif //{raster.upper()}_H\n') + init_ext_def_s += '\n' + init_call_s += '}\n\n' + init_call_s += f'#include "{build_defs.CVC_CODE_END}"\n\n' + file_name = pjoin(dst_dir, 'VcExtINI.c') + with open(file_name, 'w', encoding="utf-8") as fhndl: + fhndl.write(init_ext_def_s) + fhndl.write(init_call_s) + self.info('generated %s', file_name) + + file_name = pjoin(dst_dir, 'VcExtINI.h') + with open(file_name, 'w', encoding="utf-8") as f_h: + f_h.write('#ifndef VCEXTINI_H\n') + f_h.write('#define VCEXTINI_H\n') + f_h.write(f'void {prefix}VcExtINI(void);\n') + f_h.write('#endif\n') + + def generate_ts_defines(self, file_name): + """Generate the ts defines. + + Generates defines needed for all units, and + writes it to a file with the supplied filename. + + Args: + file_name (str): ts header file name + """ + with open(file_name, 'w', encoding="utf-8") as fhndl: + fhndl.write('/* Autogenerated by build system */\n') + def_name = psplit(file_name)[1].replace('.', '_').upper() + fhndl.write(f'#ifndef {def_name}\n') + fhndl.write(f'#define {def_name}\n') + unit_raster_cfg = self._prj_cfg.get_units_raster_cfg() + for raster in unit_raster_cfg['SampleTimes']: + fhndl.write(f'\n/**** raster {raster} *****/\n\n') + for unit in unit_raster_cfg['Rasters'][raster]: + if unit not in SchedFuncs.RESTART_FNC_EXCLUDE: + t_sample = unit_raster_cfg['SampleTimes'][raster] + fhndl.write(f'#define ts_{unit} ((Float32) {t_sample}F)\n') + fhndl.write(f'#endif /* {def_name} */\n') + self.info('generated %s', file_name) diff --git a/pybuild/signal.py b/pybuild/signal.py new file mode 100644 index 0000000..bd99c8f --- /dev/null +++ b/pybuild/signal.py @@ -0,0 +1,7 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Abstraction of signals.""" + +INPORT_CLASSES = ('CVC_EXT') diff --git a/pybuild/signal_if_html_rep.py b/pybuild/signal_if_html_rep.py new file mode 100644 index 0000000..b0be225 --- /dev/null +++ b/pybuild/signal_if_html_rep.py @@ -0,0 +1,221 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing classes for the signal interfaces report.""" +from collections import defaultdict +from pybuild.html_report import HtmlReport + + +class SigIfHtmlReport(HtmlReport): + """Signal interface html report. + + Inherits class :doc:`HtmlReport `. + """ + + __intro = """

    Table of contents

    +
      +
    1. Introduction
    2. +
    3. Detailed signal information
    4. +
    5. Signal index
    6. +
    +

    Introduction

    +

    This documents lists the signal interfaces.

    + """ + + __table_unused = """ + + + + + + + + +""" + + __table_detailed_sig_desc = """ +
    VariableConfigurations
    + + + + + + + + + + + + + +""" + + __table_detailed_sig_desc_ext = """ +
    UnitTypeClassMinMaxLsbOffsetConfigs
    + + + + + + + + + + + +""" + + __table_detailed_sig_def = """ +
    UnitTypeInit ValueMinMaxConfig Doc
    + + + + + + + +""" + + __table_detailed_sig_cons = """ +
    Defined in unitin projects
    + + + + + + + +""" + + def __init__(self, build_cfg, unit_cfg, sig_if): + """Initialize class instance. + + Args: + build_cfg (BuildProjConfig): holds all the build configs + unit_cfg (UnitConfigs): object holding all unit interfaces + sig_if (SignalInterfaces): object holding signal interface information + """ + super().__init__('Signal interface report') + self._build_cfg = build_cfg + self._unit_cfg = unit_cfg + self._sig_if = sig_if + self._format_unit_data() + + def _gen_sigs_details(self): + """Generate detailed signal information.""" + out = '

    Detailed Signal Information

    \n' + for signal in sorted(self._if.keys()): + out += self._gen_sig_details(signal) + return out + + def _gen_sig_details(self, signal): + """Generate detailed signal information.""" + out = f'

    {signal}

    \n' + unit = tuple(self._if[signal]['def'].keys())[0] # ugly! use the first defining unit. + # Check that it is a unit, and not from the inteface definition + if unit[:2] == 'Vc': + sig_def = defaultdict(lambda: '-', self._unit_cfg.get_per_unit_cfg()[unit]['outports'][signal]) + out += f'

    {sig_def["description"]}

    ' + out += self.__table_detailed_sig_desc + out += ' \n' + out += f' \n' + out += f' \n' + out += f' \n' + out += f' \n' + out += f' \n' + out += f' \n' + out += f' \n' + out += f' \n' + out += ' \n' + out += ' \n' + out += '
    Consumed by unitsin projects
    {sig_def["unit"]}{sig_def["type"]}{sig_def["class"]}{sig_def["min"]}{sig_def["max"]}{sig_def["lsb"]}{sig_def["offset"]}{sig_def["configs"]}
    \n

    \n' + else: + sig_def = defaultdict(lambda: '-', self._sig_if.get_raw_io_cnfg()[unit][signal]) + out += f'

    {sig_def["description"]}

    ' + out += self.__table_detailed_sig_desc_ext + out += ' \n' + out += f' {sig_def["unit"]}\n' + out += f' {sig_def["type"]}\n' + out += f' {sig_def["init"]}\n' + out += f' {sig_def["min"]}\n' + out += f' {sig_def["max"]}\n' + out += f' {unit}\n' + out += ' \n' + out += ' \n' + out += ' \n

    \n' + + out += self.__table_detailed_sig_def + for unit, prjs in self._if[signal]['def'].items(): + out += ' \n' + out += f' {unit}\n' + out += f' {prjs}\n' + out += ' \n' + out += ' \n' + out += ' \n' + + if 'consumers' in self._if[signal]: + out += '

    \n' + out += self.__table_detailed_sig_cons + for units, prjs in self._if[signal]['consumers'].items(): + out += ' \n' + out += f' {units}\n' + out += f' {prjs}\n' + out += ' \n' + out += ' \n' + out += ' \n' + return out + + def _format_unit_data(self): + """Format data per unit.""" + self._if = {} + prj_name = self._build_cfg.get_prj_config() + # internal signals + prj_cfg = self._unit_cfg.get_per_cfg_unit_cfg() + ext_out_prj = self._sig_if.get_external_outputs() + if 'outports' in prj_cfg: + for sig, data in prj_cfg['outports'].items(): + prod_unit = list(data.keys())[0] + self._if.setdefault(sig, {}).setdefault('def', {}).setdefault(prod_unit, []).append(prj_name) + cons_units = [] + for sig_type, osig in ext_out_prj.items(): + if sig in osig: + cons_units = [sig_type] + break + if sig in prj_cfg['inports']: + cons_units.extend(list(prj_cfg['inports'][sig].keys())) + if cons_units: + (self._if[sig].setdefault('consumers', {}) + .setdefault(tuple(sorted(cons_units)), []) + .append(prj_name)) + + # external signals + prj_cfg = self._unit_cfg.get_per_cfg_unit_cfg() + ext_in_prj = self._sig_if.get_external_inputs() + for sig_type, osig in ext_in_prj.items(): + for sig, data in osig.items(): + self._if.setdefault(sig, {}).setdefault('def', {}).setdefault(sig_type, []).append(prj_name) + if 'inports' in prj_cfg and sig in prj_cfg['inports']: + (self._if[sig].setdefault('consumers', {}) + .setdefault(tuple(sorted(prj_cfg['inports'][sig].keys())), []) + .append(prj_name)) + + def _gen_signal_toc(self): + """Generate a signal TOC for the unit with signal inconsistencies. + + Hyperlinks to more in depth signal information. + """ + out = '

    Signal index

    \n' + for signal in sorted(self._if.keys()): + out += f' \n' + return out + + def gen_contents(self): + """Generate report contents from the signal interfaces data. + + Overrides HtmlReport.gen_contents() + """ + html = [] + html += self.__intro + html += self._gen_sigs_details() + html += self._gen_signal_toc() + return ''.join(html) diff --git a/pybuild/signal_if_html_rep_all.py b/pybuild/signal_if_html_rep_all.py new file mode 100644 index 0000000..35cb136 --- /dev/null +++ b/pybuild/signal_if_html_rep_all.py @@ -0,0 +1,302 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing classes for the signal interfaces report.""" +from collections import defaultdict +from pybuild.html_report import HtmlReport + + +class SigIfHtmlReportAll(HtmlReport): + """Signal interface html report. + + Inherits class :doc:`HtmlReport `. + """ + + __intro = """ +

    Introduction

    +

    This documents lists the signal interfaces.

    + """ + + __signal_info = """

    Table of contents

    +
      +
    1. Detailed signal information
    2. +
    3. Signal index
    4. +
    + """ + + __table_unused = """ + + + + + + + + + """ + + __table_detailed_sig_desc = """ +
    VariableConfigurations
    + + + + + + + + + + + + + +""" + + __table_detailed_sig_desc_ext = """ +
    UnitTypeClassMinMaxLsbOffsetConfigs
    + + + + + + + + + + + +""" + + __table_detailed_sig_def = """ +
    UnitTypeInit ValueMinMaxConfig Doc
    + + + + + + + +""" + + __table_detailed_sig_cons = """ +
    Defined in unitin projects
    + + + + + + + +""" + + def __init__(self, build_cfg, unit_cfgs, sig_ifs): + """Initialize class instance. + + Args: + build_cfg (BuildProjConfig): holds all the build configs + unit_cfg (UnitConfigs): object holding all unit interfaces + sig_if (CsvSignalInterfaces): object holding signal interface information + """ + super().__init__('Signal interface report') + + self._build_cfg = build_cfg + self._unit_cfg_all = unit_cfgs + self._sig_if_all = sig_ifs + + self._format_unit_data() + + def _gen_sigs_details(self): + """Generate detailed signal information.""" + self._out_all_sd = {} + + for prj, ifin in self._if_all.items(): + out = '' + self._if = ifin + self._sig_if = self._sig_if_all.get(prj) + out += '

    Detailed Signal Information

    \n' + for signal in sorted(self._if.keys()): + out += self._gen_sig_details(signal, prj) + self._out_all_sd.update({prj: out}) + + return self._out_all_sd + + def _gen_sig_details(self, signal, prj): + """Generate detailed signal information.""" + out = f'

    {signal}

    \n' + try: + unit = tuple(self._if[signal]['def'].keys())[0] # ugly! use the first defining unit. + + # Check that it is a unit, and not from the interface definition + self._unit_cfg = self._unit_cfg_all.get(prj) + if unit[:2] == 'Vc': + per_unit_config = self._unit_cfg.get_per_unit_cfg('all')[unit]['outports'][signal] + sig_def = defaultdict(lambda: '-', per_unit_config) + out += f"

    {sig_def['description']}

    " + out += self.__table_detailed_sig_desc + out += " \n" + out += f" \n" + out += f" \n" + out += f" \n" + out += f" \n" + out += f" \n" + out += f" \n" + out += f" \n" + out += f" \n" + out += " \n" + out += " \n" + out += "
    Consumed by unitsin projects
    {sig_def['unit']}{sig_def['type']}{sig_def['class']}{sig_def['min']}{sig_def['max']}{sig_def['lsb']}{sig_def['offset']}{sig_def['configs']}
    \n

    \n" + else: + sig_def = defaultdict(lambda: '-', self._sig_if.get_raw_io_cnfg()[unit][signal]) + out += f"

    {sig_def['description']}

    " + out += self.__table_detailed_sig_desc_ext + out += " \n" + out += f" {sig_def['unit']}\n" + out += f" {sig_def['type']}\n" + out += f" {sig_def['init']}\n" + out += f" {sig_def['min']}\n" + out += f" {sig_def['max']}\n" + out += f" {unit}\n" + out += " \n" + out += " \n" + out += " \n

    \n" + except KeyError: + pass + + out += self.__table_detailed_sig_def + prj_str = "" + unit_str = "" + for cur_prj, ifin in self._if_all.items(): + self._if = ifin + prj_str += f" {cur_prj}" + try: + unit_str = "" + for unit in self._if[signal]['def']: + unit_str += ' '.join(unit) + except KeyError: + continue + out += " \n" + out += f" {unit_str}\n" + out += f" {prj_str}\n" + out += " \n" + out += " \n" + out += " \n" + + out += self.__table_detailed_sig_cons + prj_str = "" + units_str = "" + for cur_prj, ifin in self._if_all.items(): + self._if = ifin + try: + if 'consumers' in self._if[signal]: + prj_str += f" {cur_prj}" + out += "

    \n" + units_str = "" + for units in self._if[signal]['consumers']: + units_str += ' '.join(units) + except KeyError: + continue + out += " \n" + out += f" {units_str}\n" + out += f" {prj_str}\n" + out += " \n" + out += " \n" + out += " \n" + return out + + def _format_unit_data(self): + """Format data per unit.""" + self._if_all = {} + for prj, unit_cfg in self._unit_cfg_all.items(): + self._if = {} + self._unit_cfg = unit_cfg + prj_cfg = self._unit_cfg.get_per_cfg_unit_cfg(prj) + sig_if = self._sig_if_all.get(prj) + self._sig_if = sig_if + + # internal signals + ext_out_prj = self._sig_if.get_external_outputs(prj) + if 'outports' in prj_cfg: + for sig, data in prj_cfg['outports'].items(): + prod_unit = list(data.keys())[0] + self._if.setdefault(sig, {}).setdefault('def', {}).setdefault(prod_unit, []).append(prj) + cons_units = [] + for sig_type, osig in ext_out_prj.items(): + if sig in osig: + cons_units = [sig_type] + break + if sig in prj_cfg['inports']: + cons_units.extend(list(prj_cfg['inports'][sig].keys())) + if cons_units: + self._if[sig].setdefault('consumers', {}).setdefault(tuple(sorted(cons_units)), []).append(prj) + + # external signals + ext_in_prj = self._sig_if.get_external_inputs(prj) + for sig_type, osig in ext_in_prj.items(): + for sig, data in osig.items(): + self._if.setdefault(sig, {}).setdefault('def', {}).setdefault(sig_type, []).append(prj) + if 'inports' in prj_cfg and sig in prj_cfg['inports']: + (self._if[sig].setdefault('consumers', {}) + .setdefault(tuple(sorted(prj_cfg['inports'][sig].keys())), []) + .append(prj)) + self._if_all.update({prj: self._if}) + return self._if_all + + def _gen_signal_toc(self): + """Generate a signal TOC for the unit with signal inconsistencies. + + Hyperlinks to more in depth signal information. + """ + self._out_all_st = {} + for prj, ifin in self._if_all.items(): + out = '' + self._if = ifin + out += '

    Signal index

    \n' + for signal in sorted(self._if.keys()): + out += f' \n' + self._out_all_st.update({prj: out}) + + return self._out_all_st + + def _gen_contents_intro(self): + """Generate report contents from the signal interfaces data. + + Specialises HtmlReport.gen_contents() + """ + html = [] + html += self.__intro + return ''.join(html) + + def _gen_contents_signal_info(self): + """Generate report contents from the signal interfaces data. + + Specialises HtmlReport.gen_contents() + """ + html = [] + html += self.__signal_info + return ''.join(html) + + def _generate_report_string_intro(self): + """Generate a html report as string.""" + html = [] + html += self._gen_header() + html += self._gen_contents_intro() + html += self._gen_end() + return ''.join(html) + + def generate_report_file_if(self, filename): + """Generate a html report and save to file.""" + filename_intro = filename + '_intro.html' + with open(filename_intro, 'w', encoding="utf-8") as fhndl: + fhndl.write(self._generate_report_string_intro()) + + self._gen_sigs_details() + self._gen_signal_toc() + for prj, out in self._out_all_sd.items(): + html = [] + html += self._gen_header() + html += self._gen_contents_signal_info() + html += out + html += self._out_all_st.get(prj) + html += self._gen_end() + with open(f'{filename}_{prj}.html', 'w', encoding="utf-8") as fhndl: + fhndl.write(''.join(html)) diff --git a/pybuild/signal_incons_html_rep.py b/pybuild/signal_incons_html_rep.py new file mode 100644 index 0000000..8e16d5a --- /dev/null +++ b/pybuild/signal_incons_html_rep.py @@ -0,0 +1,180 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing classes for generation of signal consistency check report.""" +from pybuild.signal_incons_html_rep_base import SigConsHtmlReportBase + + +class SigConsHtmlReport(SigConsHtmlReportBase): + """Generate html report from the signal consistency check result. + + (see :doc:`signal_interfaces`) + + Inherits :doc:`SigConsHtmlReportBase `. + """ + + __intro = """

    Table of contents

    +
      +
    1. Introduction
    2. +
    3. Detailed unit information
    4. +
    5. External signals +
        +
      1. Missing external signals
      2. +
      3. Unused external signals
      4. +
    6. +
    7. Unit index
    8. +
    +

    Introduction

    +

    This documents lists inconsistencies in the internal and external signal configuration.

    + """ + + def __init__(self, res_dict=None): + """Initialize class instance. + + Args: + res_dict (dict): result dict from the signal interface consistency check + + The dict shall have the following format:: + + { + "sigs": { "ext": {"missing": {}, + "unused": {}, + "inconsistent_defs": {}}, + "int": {"UNIT_NAME": {"missing": {}, + "unused": {}, + "multiple_defs": {} + "inconsistent_defs": {}} + } + } + """ + super().__init__(res_dict) + self.set_res_dict(res_dict) + + def _gen_unit_toc(self): + """Generate a unit TOC for the unit with signal inconsistencies. + + Hyperlinks to more in depth unit information. + """ + out = '

    Unit index

    \n' + for unit in sorted(self._ext_units | self._int_units): + out += f' \n' + return out + + def _gen_units(self): + """Generate all the information regarding all the units.""" + out = '

    Detailed Unit Information

    \n' + for unit in sorted(self._ext_units | self._int_units): + out += self._gen_unit(unit) + return out + + def _gen_unit(self, unit): + """Generate the html-report for the unit specific information.""" + out = f'

    {unit}

    \n' + if unit in self._int_units: + unit_data = self._res_dict['sigs']['int'][unit] + out += self._gen_missing_sigs(unit_data) + out += self._gen_unused_sigs(unit_data) + out += self._gen_multiple_def_sigs(unit_data) + out += self._gen_int_inconsistent_defs(unit_data) + if unit in self._ext_units: + out += self._gen_ext_inconsistent_defs(unit) + return out + + def _gen_missing_sigs(self, unit_data, out=''): + """Generate the unit specific information for missing signal in a unit.""" + out = '

    Missing signals

    \n' \ + '

    Inports whose signals are not generated in the ' \ + 'listed configuration(s).

    ' + return super()._gen_missing_sigs(unit_data, out) + + def _gen_unused_sigs(self, unit_data, out=''): + """Generate the unit specific information for the unused signals wihtin a unit.""" + out = '

    Unused signals

    \n' \ + '

    Outports that are generated, but not used in the ' \ + 'listed configuration(s).

    ' + return super()._gen_unused_sigs(unit_data, out) + + def _gen_multiple_def_sigs(self, unit_data, out=''): + """Generate unit specific information for the signals that are generated more than once.""" + out = '

    Multiple defined signals

    \n' \ + '

    Outports that are generated more than once in ' \ + 'the listed configuration(s).

    ' + return super()._gen_multiple_def_sigs(unit_data, out) + + def _gen_ext_inconsistent_defs(self, unit, out=''): + """Generate a report of inconsistent variable definition parameters. + + Report inconsistencies between the producing signal definition, and the + signal definitions in the external interface definition. + """ + out = '

    External signal inconsistencies

    \n' \ + '

    In-/Out-ports that have different variable definitions ' \ + 'than in the interface definition file.

    ' + return super()._gen_ext_inconsistent_defs(unit, out) + + def _gen_int_inconsistent_defs(self, unit_data, out=''): + """Generate a report of inconsistent variable definition parameters. + + Inconsistent for between the producing signal definition, and the + consuming signal definitions for SPM internal signals. + """ + out = '

    Internal signal inconsistencies

    \n' \ + '

    Inports that have different variable definitions ' \ + 'than the producing outport.

    ' + return super()._gen_int_inconsistent_defs(unit_data, out) + + def _gen_ext_signals_report(self, type_, comment): + """Generate report for external signals.""" + out = f'

    {type_.capitalize()} external signals

    \n' + out += f'

    {comment}

    ' + try: + ext_data = self._res_dict['sigs']['ext'][type_] + out += self._table_unused + for var in sorted(ext_data.keys()): + configs = ext_data[var] + out += ' \n' + out += f' {var}\n' + out += f' {self._set_to_str(configs)}\n' + out += ' \n' + out += ' \n' + out += ' \n' + except KeyError: + pass + return out + + def set_res_dict(self, res_dict): + """Set the result dictionary used to generate the html-report. + + Args: + res_dict (dict): result dict from the signal interface consistency check + + See class constructor for dict structure. + """ + self._res_dict = res_dict + self._ext_units = set() + self._int_units = set() + if res_dict is not None and 'sigs' in res_dict: + if 'ext' in res_dict['sigs'] and 'inconsistent_defs' in res_dict['sigs']['ext']: + self._ext_units = set(self._res_dict['sigs']['ext']['inconsistent_defs'].keys()) + if 'int' in res_dict['sigs']: + self._int_units = set(self._res_dict['sigs']['int'].keys()) + + def gen_contents(self): + """Generate report contents from the signal inconsistency check result dictionary. + + Overrides HtmlReport.gen_contents() + """ + html = [] + html += self.__intro + html += self._gen_units() + html += '

    Signals missing and unused in the ' \ + 'interface definition

    \n' + html += self._gen_ext_signals_report('missing', 'Signals not generated by ' + 'Vcc SW, but are defined in ' + 'the Interface definition to be ' + 'generated') + html += self._gen_ext_signals_report('unused', 'Signals defined to be generated by ' + 'supplier SW, but are not used ' + 'by VCC SW') + html += self._gen_unit_toc() + return ''.join(html) diff --git a/pybuild/signal_incons_html_rep_all.py b/pybuild/signal_incons_html_rep_all.py new file mode 100644 index 0000000..250d5cf --- /dev/null +++ b/pybuild/signal_incons_html_rep_all.py @@ -0,0 +1,366 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing classes for generation of signal consistency check report.""" +import json + +from pybuild.signal_incons_html_rep_base import SigConsHtmlReportBase + + +class SigConsHtmlReportAll(SigConsHtmlReportBase): + """Generate html report from the signal consistency check result. + + (see :doc:`signal_interfaces`) + + Inherits :doc:`HtmlReport `. + """ + + __intro_all = """

    Introduction

    +

    This documents lists inconsistencies in the internal and external signal configuration.

    +""" + __table_incons = """ + + + + + + + + + """ + + __toc_ext_sig = """

    Table of contents

    ' +
      +
    1. External signals +
        +
      1. Missing external signals
      2. +
      3. Unused external signals
      4. +
    2. +

      Signals missing and unused in the interface definition

      \n + """ + + _toc_unit_details = """

      Table of contents

      +
        +
      1. Detailed unit information
      2. +
      3. Unit index
      4. +
      + """ + + def __init__(self, res_dicts=None): + """Initialize class instance. + + Args: + res_dict (dict): result dict from the signal interface consistency check + + The dict shall have the following format:: + + { + "sigs": { "ext": {"missing": {}, + "unused": {}, + "inconsistent_defs": {}}, + "int": {"UNIT_NAME": {"missing": {}, + "unused": {}, + "multiple_defs": {} + "inconsistent_defs": {}} + }, + "never_active_signals": { + "UNIT_NAME": [signal_one, ...] + } + } + """ + super().__init__(res_dicts) + self.set_res_dict(res_dicts) + + def _gen_unit_toc(self): + """Generate a unit TOC for the unit with signal inconsistencies. + + Hyperlinks to more in depth unit information. + """ + self._out_all_unit_toc = {} + for prj, units in self._all_units.items(): + out = '

      Unit index

      \n' + for unit in sorted(units): + out += f' \n' + self._out_all_unit_toc.update({prj: out}) + + def _gen_units(self): + """Generate all the information regarding all the units.""" + self._out_all_units = {} + self._prj = '' + for prj, units in self._all_units.items(): + out = '

      Detailed Unit Information

      \n' + for unit in sorted(units): + out += self._gen_unit(prj, unit) + self._out_all_units.update({prj: out}) + return self._out_all_units + + def _gen_unit(self, project, unit): + """Generate the html-report for the unit specific information.""" + unit_data_all = {} + out = f'

      {unit}

      \n' + if project in self._int_units_all and unit in self._int_units_all[project]: + for prj, res_dict in self._res_dict_all.items(): + if unit in res_dict['sigs']['int']: + unit_data = res_dict['sigs']['int'][unit] + unit_data_all.update({prj: unit_data}) + _res_dict = self._res_dict_all.get(project) + unit_data = _res_dict['sigs']['int'][unit] + out += '

      Missing signals

      \n' \ + '

      Inports whose signals are not generated in the ' \ + 'listed configuration(s).

      ' + out += self._gen_missing_sigs(unit_data, unit_data_all) + out += '

      Unused signals

      \n' \ + '

      Outports that are generated, but not used in the ' \ + 'listed configuration(s).

      ' + out += self._gen_unused_sigs(unit_data, unit_data_all) + out += '

      Multiple defined signals

      \n' \ + '

      Outports that are generated more than once in ' \ + 'the listed configuration(s).

      ' + out += self._gen_multiple_def_sigs(unit_data, unit_data_all) + out += '

      Internal signal inconsistencies

      \n' \ + '

      Inports that have different variable definitions ' \ + 'than the producing outport.

      ' + out += self._gen_int_inconsistent_defs(unit_data, unit_data_all) + if project in self._ext_units_all and unit in self._ext_units_all[project]: + out += self._gen_unit_ext(project, unit) + if project in self._res_dict_all and \ + 'never_active_signals' in self._res_dict_all[project] and \ + unit in self._res_dict_all[project]['never_active_signals']: + out += '

      Never active signals

      \n' \ + '

      Never active signals will not appear in generated .c file, ' \ + 'signals probablty lead to terminators in Simulink model.

      ' + out += self._gen_never_active_sigs(self._res_dict_all[project]['never_active_signals'][unit]) + return out + + def _gen_unit_ext(self, project, unit): + out = '' + self._unit_data_all = {} + if unit in self._res_dict_all[project]['sigs']['ext']['inconsistent_defs'].keys(): + out += '

      External signal inconsistencies

      \n' \ + '

      In-/Out-ports that have different variable definitions ' \ + 'than in the interface definition file.

      ' + out += self._gen_ext_inconsistent_defs(project, unit) + return out + + def _gen_signals_table(self, unit_data, unit_data_all, key, out=''): + """Generate the unit specific information for KEY in a unit.""" + + if key not in unit_data: + return out + + out += self._table_unused + for var in sorted(unit_data[key]): + configs_str = "" + for unit_data_cfg in unit_data_all.values(): + if key in unit_data_cfg and var in unit_data_cfg[key]: + configs = unit_data_cfg[key][var] + configs_str += f" {self._set_to_str(configs)}" + out += '
    \n' + out += f' \n' + out += f' \n' + out += ' \n' + out += ' \n' + out += '
    VariableVariable parameterDifferenceConfigurations
    {var}{configs_str}
    \n' + return out + + def _gen_missing_sigs(self, unit_data, unit_data_all, out=''): + """Generate the unit specific information for missing signal in a unit.""" + return self._gen_signals_table(unit_data, unit_data_all, key='missing', out=out) + + def _gen_unused_sigs(self, unit_data, unit_data_all, out=''): + """Generate the unit specific information for the unused signals wihtin a unit.""" + return self._gen_signals_table(unit_data, unit_data_all, key='unused', out=out) + + def _gen_multiple_def_sigs(self, unit_data, unit_data_all, out=''): + """Generate unit specific information for the signals that are generated more than once.""" + return self._gen_signals_table(unit_data, unit_data_all, key='multiple_defs', out=out) + + def _gen_never_active_sigs(self, never_active_signals): + """Generate unit specific information for the signals that are never active.""" + out = self._table_unused + for signal in never_active_signals: + out += ' \n' + out += f' {signal}\n' + out += ' \n' + out += ' \n' + out += ' \n' + out += ' \n' + return out + + def _gen_ext_inconsistent_defs(self, project, unit, out=''): + """Generate a report of inconsistent variable definition parameters. + + Report inconsistencies between the producing signal definition, and the + signal definitions in the external interface definition. + """ + inconsistent_defs_key = 'inconsistent_defs' + if inconsistent_defs_key not in self._res_dict_all[project]['sigs']['ext']: + return out + + out += self.__table_incons + incons_unit = self._res_dict_all[project]['sigs']['ext'][inconsistent_defs_key][unit] + for var in sorted(incons_unit.keys()): + first_cells = f'\n \n {var}\n' + for v_par, desc in incons_unit[var].items(): + out += first_cells + out += f' {v_par}\n' + out += f' {desc}\n' + out += f' {project}\n' + out += ' \n' + first_cells = ' \n \n' + out += ' \n' + out += ' \n' + return out + + def _gen_int_inconsistent_defs(self, unit_data, unit_data_all, out=''): + """Generate a report of inconsistent variable definition parameters. + + Inconsistent for between the producing signal definition, and the + consuming signal definitions for SPM internal signals. + """ + inconsistent_defs_key = 'inconsistent_defs' + if inconsistent_defs_key not in unit_data: + return out + + out += self.__table_incons + for var in sorted(unit_data[inconsistent_defs_key].keys()): + configs_str = "" + for prj_cfg in unit_data_all.keys(): + configs_str += f" {prj_cfg}" + first_cells = f'\n \n {var}\n' + configs = unit_data[inconsistent_defs_key][var] + for v_par, desc in configs.items(): + out += first_cells + out += f' {v_par}\n' + out += f' {desc}\n' + out += f' {configs_str}\n' + out += ' \n' + first_cells = ' \n \n' + out += ' \n' + out += ' \n' + return out + + def _gen_ext_signals_report(self, type_, comment): + """Generate report for external signals.""" + out = f'

    {type_.capitalize()} external signals

    \n' + out += f'

    {comment}

    ' + try: + res_dict = self._res_dict_all.get(self._prj) + out += self._table_unused + ext_data = res_dict['sigs']['ext'][type_] + for var in sorted(ext_data.keys()): + configs_str = "" + for res_dict_cfg in self._res_dict_all.values(): + if type_ in res_dict_cfg['sigs']['ext']: + ext_data_cfg = res_dict_cfg['sigs']['ext'][type_] + configs = ext_data_cfg[var] + configs_str += " " + self._set_to_str(configs) + out += ' \n' + out += f' {var}\n' + out += f' {configs_str}\n' + out += ' \n' + out += ' \n' + out += ' \n' + except KeyError: + pass + return out + + def set_res_dict(self, res_dicts): + """Set the result dictionary used to generate the html-report. + + Args: + res_dicts (dict): result dict from the signal interface consistency check + + See class constructor for dict structure. + """ + # nesting defaultdicts is bad so we use this hack + regular_res_dicts = json.loads(json.dumps(res_dicts)) + self._res_dict_all = regular_res_dicts + self._ext_units_all = {} + self._int_units_all = {} + self._all_units = {} + for prj, res_dict in self._res_dict_all.items(): + _ext_units = set() + _int_units = set() + _units_with_never_active_signals = set() + if res_dict is not None and 'sigs' in res_dict: + if 'ext' in res_dict['sigs'] and 'inconsistent_defs' in res_dict['sigs']['ext']: + _ext_units = set(res_dict['sigs']['ext']['inconsistent_defs'].keys()) + self._ext_units_all.update({prj: _ext_units}) + if 'int' in res_dict['sigs']: + _int_units = set(res_dict['sigs']['int'].keys()) + self._int_units_all.update({prj: _int_units}) + if 'never_active_signals' in res_dict: + _units_with_never_active_signals = res_dict['never_active_signals'].keys() + self._all_units[prj] = _ext_units | _int_units | _units_with_never_active_signals + + def _gen_contents_intro(self): + """Generate report contents from the signal interfaces data.""" + html = [] + html += self.__intro_all + return ''.join(html) + + def _gen_contents_toc_ext_sig(self): + """Generate report contents from the signal interfaces data. + + Specialises HtmlReport.gen_contents() + """ + html = [] + html += self.__toc_ext_sig + return ''.join(html) + + def _gen_contents_toc_unit_details(self): + """Generate report contents from the signal interfaces data. + + Specialises HtmlReport.gen_contents() + """ + html = [] + html += self._toc_unit_details + return ''.join(html) + + def _gen_contents_ext_signals(self): + """Generate report contents from the signal inconsistency check result dictionary.""" + html = [] + html += self._gen_contents_toc_ext_sig() + html += self._gen_ext_signals_report('missing', 'Signals not generated by ' + 'Vcc SW, but are defined in ' + 'the Interface definition to be ' + 'generated') + html += self._gen_ext_signals_report('unused', 'Signals defined to be generated by ' + 'supplier SW, but are not used ' + 'by VCC SW') + return ''.join(html) + + def _generate_report_string_intro(self): + """Generate a html report as string.""" + html = [] + html += self._gen_header() + html += self._gen_contents_intro() + html += self._gen_end() + return ''.join(html) + + def _generate_report_string_ext_signals(self): + """Generate a html report as string.""" + html = [] + html += self._gen_header() + html += self._gen_contents_ext_signals() + html += self._gen_end() + return ''.join(html) + + def generate_report_file_signal_check(self, filename): + """Generate a html report and save to file.""" + filename_intro = filename + '_intro.html' + with open(filename_intro, 'w', encoding="utf-8") as fhndl: + fhndl.write(self._generate_report_string_intro()) + + self._gen_units() + self._gen_unit_toc() + for key, out in self._out_all_units.items(): + html = [] + html += self._gen_header() + html += self._gen_contents_toc_unit_details() + html += out + html += self._out_all_unit_toc.get(key, '') + html += self._gen_end() + with open(f'{filename}_{key}.html', 'w', encoding="utf-8") as fhndl: + fhndl.write(''.join(html)) diff --git a/pybuild/signal_incons_html_rep_base.py b/pybuild/signal_incons_html_rep_base.py new file mode 100644 index 0000000..3452284 --- /dev/null +++ b/pybuild/signal_incons_html_rep_base.py @@ -0,0 +1,168 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module containing classes for generation of signal consistency check report.""" +from pybuild.html_report import HtmlReport + + +class SigConsHtmlReportBase(HtmlReport): + """Generate html report from the signal consistency check result. + + (see :doc:`signal_interfaces`) + + Inherits :doc:`HtmlReport `. + """ + + __intro = """

    Table of contents

    +
      +
    1. Introduction
    2. +
    3. Detailed unit information
    4. +
    5. External signals +
        +
      1. Missing external signals
      2. +
      3. Unused external signals
      4. +
    6. +
    7. Unit index
    8. +
    +

    Introduction

    +

    This documents lists inconsistencies in the internal and external signal configuration.

    + """ + _table_unused = """ + + + + + + + + + """ + _table_incons = """ +
    VariableConfigurations
    + + + + + + + + + """ + _table_unknown = """ +
    VariableVariable parameterDifference
    + + + + + + + + """ + + def __init__(self, res_dict=None): + """Initialize class instance. + + Args: + res_dict (dict): result dict from the signal interface consistency check + + The dict shall have the following format:: + + { + "sigs": { "ext": {"missing": {}, + "unused": {}, + "inconsistent_defs": {}}, + "int": {"UNIT_NAME": {"missing": {}, + "unused": {}, + "multiple_defs": {} + "inconsistent_defs": {}} + } + } + """ + super().__init__('Signal consistency report') + + @staticmethod + def _set_to_str(set_): + """Convert a set to a sorted string.""" + out = "" + for conf in sorted(set_): + out += conf + ', ' + return out[:-2] + + def _gen_missing_sigs(self, unit_data, out=''): + """Generate the unit specific information for missing signal in a unit.""" + out += self._table_unused + for var in sorted(unit_data['missing'].keys()): + configs = unit_data['missing'][var] + out += ' \n' + out += f' \n' + out += f' \n' + out += ' \n' + out += ' \n' + out += '
    VariableUnits
    {var}{self._set_to_str(configs)}
    \n' + return out + + def _gen_unused_sigs(self, unit_data, out=''): + """Generate the unit specific information for the unused signals wihtin a unit.""" + out += self._table_unused + for var in sorted(unit_data['unused'].keys()): + configs = unit_data['unused'][var] + out += ' \n' + out += f' {var}\n' + out += f' {self._set_to_str(configs)}\n' + out += ' \n' + out += ' \n' + out += ' \n' + return out + + def _gen_multiple_def_sigs(self, unit_data, out=''): + """Generate unit specific information for the signals that are generated more than once.""" + out += self._table_unused + for var in sorted(unit_data['multiple_defs'].keys()): + configs = unit_data['multiple_defs'][var] + out += ' \n' + out += f' {var}\n' + out += f' {self._set_to_str(configs)}\n' + out += ' \n' + out += ' \n' + out += ' \n' + return out + + def _gen_ext_inconsistent_defs(self, unit, out=''): + """Generate a report of inconsistent variable definition parameters. + + Report inconsistencies between the producing signal definition, and the + signal definitions in the external interface definition. + """ + out += self._table_incons + incons_unit = self._res_dict['sigs']['ext']['inconsistent_defs'][unit] + for var in sorted(incons_unit.keys()): + first_cells = f' \n {var}\n' + for v_par, desc in incons_unit[var].items(): + out += first_cells + out += f' {v_par}\n' + out += f' {desc}\n' + out += ' \n' + first_cells = ' \n \n' + out += ' \n' + out += ' \n' + return out + + def _gen_int_inconsistent_defs(self, unit_data, out=''): + """Generate a report of inconsistent variable definition parameters. + + Inconsistent for between the producing signal definition, and the + consuming signal definitions for SPM internal signals. + """ + out += self._table_incons + for var in sorted(unit_data['inconsistent_defs'].keys()): + configs = unit_data['inconsistent_defs'][var] + first_cells = f' \n {var}\n' + for v_par, desc in configs.items(): + out += first_cells + out += f' {v_par}\n' + out += f' {desc}\n' + out += ' \n' + first_cells = ' \n \n' + out += ' \n' + out += ' \n' + return out diff --git a/pybuild/signal_inconsistency_check.py b/pybuild/signal_inconsistency_check.py new file mode 100644 index 0000000..2d632f2 --- /dev/null +++ b/pybuild/signal_inconsistency_check.py @@ -0,0 +1,623 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +""" script for running running signal consistency check on specific models. Git HEAD or local. +""" + +import argparse +import csv +import os +import sys +from collections import defaultdict +from os.path import join +from pathlib import Path + +import git + +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from pybuild.lib import helper_functions, logger +from pybuild.signal_incons_html_rep_all import SigConsHtmlReportAll +from pybuild.signal_interfaces import CsvSignalInterfaces, YamlSignalInterfaces +from pybuild.unit_configs import UnitConfigs +from pybuild.user_defined_types import UserDefinedTypes + +LOGGER = logger.create_logger(__file__) +EXIT_CODE_OK = 0 +EXIT_CODE_UNPRODUCED = 1 +EXIT_CODE_MISSING_CONSUMER = 2 +# Files define in .Unconsumed.csv is consumed by mdl or/and interface. +EXIT_CODE_INCORRECT_CSV = 4 +EXIT_CODE_NEVER_ACTIVE_SIGNALS = 8 +UNCONSUMED_SIGNAL_FILE_PATTERN = "*_Unconsumed_Sig.csv" +MODEL_ROOT_DIR = "Models" +REPO_ROOT = helper_functions.get_repo_root() +MISSING_CONSUMER_CONSOLE_MESSAGE = ( + "\n===============Unused signals===============\n{signals}" +) +UNPRODUCED_SIGNALS_CONSOLE_MESSAGE = ( + "\n=============Unproduced signals=============\n{signals}" +) +UNCONSUMED_CSV_CONSOLE_MESSAGE = "\n=========Signals defined in unconsumed.csv-s that are consumed=========\n{signals}" +NEVER_ACTIVE_SIGNALS_CONSOLE_MESSAGE = ( + "\n============Never active signals=============\n{signals}" +) +INDEX_FILE = "Reports/Index_SigCheck_All.html" +TEMPLATE = """ + + + + + + Signal Consistency Report + + + +""" + + +def gen_sig_incons_index_file(project_list): + """Generate Index_SigCheck_All.html.""" + # TODO Remove function and add as method in pybuild/signal_incons_html_rep_all.py + rows = "" + project_row = """
  1. SigCheckAll {project}
  2. \n""" + for prj in project_list: + rows += project_row.format(project=prj) + os.makedirs(os.path.dirname(INDEX_FILE), exist_ok=True) + with open(INDEX_FILE, "w", encoding="utf-8") as f_h: + f_h.write(TEMPLATE.format(project_rows=rows)) + + +def parse_args(): + """Parse the arguments sent to the script.""" + parser = argparse.ArgumentParser("") + parser.add_argument( + "-m", + "--models", + nargs="+", + help="Arguments for running in local repo. " + "Name of models to run test on Ex: VcDepExt VcAcCtrl. " + "If not supplied, changed files in current commit will be used. " + "Reports are stored in local repo", + ) + parser.add_argument( + "-r", "--report", help="Create report for all projects", action="store_true" + ) + return parser.parse_args() + + +def get_project_configs(): + """Wrapper for creating project configs for all projects. + Returns (dict): + Project configs. + + """ + root_path = Path().resolve() + project_config_files = [ + str(f) for f in root_path.glob("Projects/**/ProjectCfg.json") + ] + prj_cfgs = {} + for project_config_file in project_config_files: + LOGGER.debug("Get project config for %s", project_config_file) + project_config = BuildProjConfig(os.path.normpath(project_config_file)) + prj_cfgs.update({project_config.name: project_config}) + return prj_cfgs + + +def check_inconsistency(signal_ifs, never_active_signals): + """Check signal inconsistency. + Args: + signal_ifs (CsvSignalInterfaces): class holding signal interface information. + never_active_signals (dict): Dict of projects mapped to units mapped to "NEVER_ACTIVE" signals. + Returns: + inconsistency result (dict) + """ + signal_inconsistency_results = {} + for key, signal_if in signal_ifs.items(): + partial_result = signal_if.check_config() + signal_inconsistency_results.update({key: partial_result}) + signal_inconsistency_results[key].update( + {"never_active_signals": never_active_signals[key]} + ) + return signal_inconsistency_results + + +def get_signal_interfaces(prj_cfgs, models): + """Wrapper for creating signal interface dict for all configs. + Args: + Project config. + Returns: + Signal interface dict. + """ + signal_ifs = {} + per_unit_cfgs = {} + for prj, prj_cfg in prj_cfgs.items(): + LOGGER.info("Parsing interface %s", prj) + + feature_cfg = FeatureConfigs(prj_cfg) + unit_cfg = UnitConfigs(prj_cfg, feature_cfg) + user_defined_types = UserDefinedTypes(prj_cfg, unit_cfg) + + if prj_cfg.has_yaml_interface: + signal_if = YamlSignalInterfaces( + prj_cfg, unit_cfg, feature_cfg, user_defined_types, model_names=models + ) + else: + signal_if = CsvSignalInterfaces(prj_cfg, unit_cfg, models) + + signal_ifs.update({prj: signal_if}) + per_unit_cfgs.update({prj: unit_cfg.get_per_unit_cfg()}) + + return signal_ifs, per_unit_cfgs + + +def get_never_active_signals(prj_cfgs, models): + """Functions for getting all signals marked as "NEVER_ACTIVE" in all projects. + + Args: + prj_cfgs (list(BuildProjConfig)): List of project configurations to look for never active signals in. + models (list): List of Simulink models to check. + Returns: + never_active_signals (dict): Dict of projects mapped to units mapped to its "NEVER_ACTIVE" signals. + """ + never_active_signals = {} + for prj, prj_cfg in prj_cfgs.items(): + LOGGER.info("searching for never active signals in %s", prj) + feature_cfg = FeatureConfigs(prj_cfg) + unit_cfg = UnitConfigs(prj_cfg, feature_cfg) + per_unit_cfg_total = unit_cfg.get_per_unit_cfg_total() + never_active_signals[prj] = {} + for unit, unit_data in per_unit_cfg_total.items(): + if unit not in models: + continue + inactive_inports = [] + inactive_outports = [] + for inport, inport_data in unit_data["inports"].items(): + if "NEVER_ACTIVE" in inport_data["configs"]: + inactive_inports.append(inport) + for outport, outport_data in unit_data["outports"].items(): + if "NEVER_ACTIVE" in outport_data["configs"]: + inactive_outports.append(outport) + if inactive_inports or inactive_outports: + never_active_signals[prj].update( + {unit: inactive_inports + inactive_outports} + ) + + return never_active_signals + + +class SignalInconsistency: + """Class for running signal consistency check on specific models. Git HEAD or local.""" + + def __init__(self, args): + """Models in local repo.""" + self.never_active_signals = {} + self.signal_inconsistency_results = {} + self.per_unit_cfgs = {} + self.signal_ifs = {} + self.repo = git.Repo() + if args.models: + self.models = args.models + else: + self.ci_url = args.ci_url + mdl_file_paths = self.get_changed_models() + self.models = self._get_model_names(mdl_file_paths) + + @staticmethod + def _get_model_names(mdl_paths): + """Get Change Model names.""" + mdl_index = 1 + return [os.path.split(i)[mdl_index].replace(".mdl", "") for i in mdl_paths] + + def _create_reports(self): + """Create reports for all projects.""" + sig_report = SigConsHtmlReportAll(self.signal_inconsistency_results) + sig_report.generate_report_file_signal_check( + join(REPO_ROOT, "Reports", "SigCheckAll") + ) + + def _sort_internal_inconsistency_by_model(self): + """Sort inconsistency by model.""" + sig = self.signal_inconsistency_results + no_producer_int = {} + missing_consumer_int = {} + never_active_int = {} + for project, val in sig.items(): + int_dict = val["sigs"]["int"] + for mdl, data in int_dict.items(): + if data.get("missing"): + if mdl not in no_producer_int: + no_producer_int[mdl] = self._to_tuple_list( + project, data["missing"] + ) + else: + no_producer_int[mdl] += self._to_tuple_list( + project, data["missing"] + ) + if data.get("unused"): + if mdl not in missing_consumer_int: + missing_consumer_int[mdl] = self._to_tuple_list( + project, data["unused"] + ) + else: + missing_consumer_int[mdl] += self._to_tuple_list( + project, data["unused"] + ) + for mdl, never_active_signals in val["never_active_signals"].items(): + never_active_int[mdl] = [ + (signal, {project}) for signal in never_active_signals + ] + + return ( + self._merge_tuple_list(no_producer_int), + self._merge_tuple_list(missing_consumer_int), + self._merge_tuple_list(never_active_int), + ) + + def _analyse_inconsistency(self): + """Collect signals. + + Args: + no_producer_int (dict): Consumed signals but not produced. + missing_consumer_int (dict): Produced signals but not consumed. + """ + exit_code = EXIT_CODE_OK + log_message = "" + ( + no_producer_int, + missing_consumer_int, + never_active_int, + ) = self._sort_internal_inconsistency_by_model() + used_model_inports = self.aggregate_model_inports() + used_external_outports = self.aggregate_supplier_inports() + exit_code_unproduced, unproduced_message = self.check_unproduced_signals( + no_producer_int + ) + ( + exit_code_missing_consumer, + missing_consumer_message, + ) = self.check_missing_consumer_signals(missing_consumer_int) + exit_code_used_inports, used_inports_message = self.check_unconsumed_files( + used_model_inports, used_external_outports + ) + exit_code_never_active, never_active_message = self.check_never_active_signals( + never_active_int + ) + log_message += unproduced_message + log_message += missing_consumer_message + log_message += used_inports_message + log_message += never_active_message + exit_code += exit_code_unproduced + exit_code += exit_code_missing_consumer + exit_code += exit_code_used_inports + exit_code += exit_code_never_active + return exit_code, log_message + + def get_changed_models(self): + """Get changed models in current commit.""" + changed_files_tmp = self.repo.git.diff( + "--diff-filter=d", "--name-only", "HEAD~1" + ) + changed_files = changed_files_tmp.splitlines() + changed_models = [ + m for m in changed_files if m.endswith(".mdl") or m.endswith(".slx") + ] + return changed_models + + def check_unproduced_signals(self, unproduced_signals): + """Check if models expects signals that is not produced. + Args: + unproduced_signals (dict): + mdl:{signals:{projects...}...}... + Returns: + exit_code (int): + Number of unproduced signals in checked models. + console message (string): + Shows if models has unproduced signals. + """ + error_message = "" + exit_code = EXIT_CODE_OK + models_with_unproduced_signals = { + m for m in unproduced_signals.keys() if m in self.models + } + for mdl in models_with_unproduced_signals: + error_message += self._format_console_output(mdl, unproduced_signals[mdl]) + if mdl in unproduced_signals and unproduced_signals[mdl]: + exit_code = EXIT_CODE_UNPRODUCED + return exit_code, UNPRODUCED_SIGNALS_CONSOLE_MESSAGE.format( + signals=error_message + ) + + def check_missing_consumer_signals(self, missing_consumer_signals): + """Check if models expect signals that is not produced. + Args: + missing_consumer_signals (dict): + mdl:{signals:{projects...}...}... + Returns: + exit_code (int): + Number of unproduced signals in checked models. + console message (string): + Shows if models has unproduced signals. + """ + error_message = "" + exit_code = EXIT_CODE_OK + unconsumed_skip_list = self.fetch_signals_to_skip() + models_producing_not_consumed_signals = { + m for m in missing_consumer_signals.keys() if m in self.models + } + for mdl in models_producing_not_consumed_signals: + sigs = missing_consumer_signals[mdl] + for k in set(sigs.keys()): + if mdl in unconsumed_skip_list and k in unconsumed_skip_list[mdl]: + del sigs[k] + error_message += self._format_console_output( + mdl, missing_consumer_signals[mdl] + ) + if mdl in missing_consumer_signals and missing_consumer_signals[mdl]: + exit_code = EXIT_CODE_MISSING_CONSUMER + return exit_code, MISSING_CONSUMER_CONSOLE_MESSAGE.format(signals=error_message) + + def check_unconsumed_files(self, inports, ifs_outports): + """Check that signals define in unconsumed.csv files are not being consumed + Args: + inports (set): all models inports in all projects. + ifs_outports (set): all outports, all projects and all interfaces. + Returns: + exit_code (int): + console message (string): Console error message (if test fail) + """ + error_message_int = "" + error_message_ext = "" + error_message = "" + exit_code = EXIT_CODE_OK + unconsumed_skip_list = self.fetch_signals_to_skip() + + for producing_mdl, signals in unconsumed_skip_list.items(): + signal_intersect_int = signals & inports + signal_intersect_ext = signals & ifs_outports + if signal_intersect_int: + exit_code, error_message_int = self.get_intersect_exit_code( + producing_mdl, signal_intersect_int + ) + if signal_intersect_ext: + exit_code, error_message_int = self.get_intersect_exit_code( + producing_mdl, signal_intersect_ext, False + ) + error_message += error_message_int + error_message += error_message_ext + return exit_code, UNCONSUMED_CSV_CONSOLE_MESSAGE.format(signals=error_message) + + def check_never_active_signals(self, never_active_signals): + """Check if there are any never active signals. + Produce corresponding error code and message. + + Args: + never_active_signals (dict): Dict mapping models to never active signals in projects. + Returns: + exit_code (int): + console message (string): Console error message (if test fail) + """ + error_message = "" + exit_code = EXIT_CODE_OK + if never_active_signals: + exit_code = EXIT_CODE_NEVER_ACTIVE_SIGNALS + for mdl, signals in never_active_signals.items(): + error_message += self._format_console_output(mdl, signals) + + return exit_code, NEVER_ACTIVE_SIGNALS_CONSOLE_MESSAGE.format( + signals=error_message + ) + + def get_intersect_exit_code( + self, producing_mdl, signal_intersect, int_signals=True + ): + """Determine if Unconsumed.csv and used inport signals overlap per project. + Return exit code and which consumer and project is cause of failure. + Args: + producing_mdl (String): Model name. + signal_intersect (set): Unconsumed.csv signals and used inports that overlap. + int_signals (bool): + True: Set exit code for internally overlaping signals (Models) + False: Set exit code for external overlaping signals (Supplier) + Returns: + exit_code (int): Fail or succes + error_message (String): Consumers. + """ + exit_code = EXIT_CODE_OK + console_message = "{producer}\n {signal} is consumed by {consumer} in {prj}\n" + error_message = "" + for sig in signal_intersect: + if int_signals: + consumers = self.get_consumer_int(sig) + else: + consumers = self.get_consumer_ext(sig) + for unit, prj in consumers: + if self.mdl_is_producer_in_prj(producing_mdl, prj, sig): + error_message += console_message.format( + producer=producing_mdl, signal=sig, consumer=unit, prj=prj + ) + exit_code = EXIT_CODE_INCORRECT_CSV + return exit_code, error_message + + def mdl_is_producer_in_prj(self, mdl, prj, signal): + """Check that defined signal in unconsumed.csv is produced in project""" + try: + return signal in self.per_unit_cfgs[prj][mdl]["outports"].keys() + except KeyError: + return False + + def get_consumer_int(self, signal): + """Find internal consumers""" + signal_consumers = [] + for prj, unit_cfgs in self.per_unit_cfgs.items(): + for unit, unit_cfg in unit_cfgs.items(): + if signal in unit_cfg["inports"].keys(): + signal_consumers.append((unit, prj)) + return signal_consumers + + def get_consumer_ext(self, signal): + """Find external consumers""" + signal_consumers = [] + for prj, if_output in self.signal_ifs.items(): + for sig_type, signals in if_output.get_external_outputs(prj).items(): + if signal in signals.keys(): + signal_consumers.append((sig_type, prj)) + return signal_consumers + + @staticmethod + def _format_console_output(mdl, signal_dict): + out = "" + for signal, projects in signal_dict.items(): + out += " " + str(signal) + str(projects) + "\n" + return f"\n{mdl}\n{out} \n" + + @staticmethod + def _to_tuple_list(project, signal_project_dict): + """Create list of tuples. + + NOTE: signal_project_dict is no longer a signal to project mapping. + It was when PyBuild handled multiple projects at once. + + Args: + project (str): project name. + signal_project_dict (dict): signal1: {}, signal2: {}... + Returns: + list: [(signal1, {project}), (signal2, {project})...] + """ + return [(signal, {project}) for signal in signal_project_dict.keys()] + + @staticmethod + def _merge_tuple_list(t_list): + """Merged list of tuples. + Args (list(tuple...)): + [(A,1), (A,2), (C,1)] + + Returns (list(tuple...)): + [(A,[1,2]), (C,1)] + """ + model_confs = {} + for mdl, sig_prj_pair in t_list.items(): + model_conf = defaultdict(list) + for signal, prj in sig_prj_pair: + model_conf[signal].append(prj) + model_confs[mdl] = model_conf + return model_confs + + def fetch_signals_to_skip(self, model_root_dir=MODEL_ROOT_DIR): + """fetch Unconsumed signals from csv files. + Returns: + unconsumed_signals (dict): + {model: {sig1, sig2...}, model2: {sig1, sig2...}} + """ + unconsumed_sig = {mdl: set() for mdl in self.models} + # "mdl_name" = "mdl folder name". '..\\..\\mdl_name\\pybuild_cfg\\mdl_Unconsumed_Sig.csv' + model_dir_index = -3 + signal_col_index = 0 + for file_name in Path(model_root_dir).glob( + "**/" + UNCONSUMED_SIGNAL_FILE_PATTERN + ): + mdl_name = str(file_name).split(os.sep)[model_dir_index] + if mdl_name in self.models: + with file_name.open() as csv_file: + csv_reader = csv.reader(csv_file) + next(csv_reader) # Skip header. + for row in csv_reader: + unconsumed_sig[mdl_name].add(row[signal_col_index]) + return unconsumed_sig + + @staticmethod + def _print_console_log_info(exit_code): + """Prints explanatory message to console. + NOTE: The exit_codes_messages variable needs the messages to be in increasing order, + according to the exit code constans above. + """ + missing_producer = ( + "Model/Models is configured to consume signals that are not produced. " + "Remove signal or fix/add producer." + ) + missing_consumer = ( + "Model/Models creates signals that are not consumed. " + "Remove or add to _Unconsumed.csv." + ) + incorrect_csv = ( + "Consumed signals is defined in _Unconsumed.csv. " + "Remove signals or fix/remove consumer." + ) + never_active_signals = ( + "Never active signals will not appear in generated .c file. " + "Remove corresponding part in Simulink model, signals probablty lead to terminators." + ) + exit_codes_messages = [ + missing_producer, + missing_consumer, + incorrect_csv, + never_active_signals, + ] + exit_code_bit_field = [ + bool(int(b)) for b in bin(exit_code)[2:] + ] # [2:] gets rid of 0b part + for idx, value in enumerate(exit_code_bit_field): + if value: + LOGGER.info(exit_codes_messages[idx]) + + def aggregate_model_inports(self): + """Aggregate inport signals from models""" + used_inports = set() + for _, unit_cfg in self.per_unit_cfgs.items(): + for _, inp in unit_cfg.items(): + used_inports = used_inports.union(set(inp["inports"].keys())) + return used_inports + + def aggregate_supplier_inports(self): + """Aggregate outports from signal interface (supplier inports)""" + external_outports = set() + for if_output in self.signal_ifs.values(): + for signals in if_output.get_external_outputs().values(): + external_outports = external_outports.union(set(signals.keys())) + return external_outports + + def run(self, args): + """Run signal inconsistency check.""" + exit_code = EXIT_CODE_OK + if self.models: + prj_cfs = get_project_configs() + self.signal_ifs, self.per_unit_cfgs = get_signal_interfaces( + prj_cfs, self.models + ) + self.never_active_signals = get_never_active_signals(prj_cfs, self.models) + LOGGER.info("Start check signal inconsistencies for: %s", self.models) + self.signal_inconsistency_results = check_inconsistency( + self.signal_ifs, self.never_active_signals + ) + exit_code, log_output = self._analyse_inconsistency() + LOGGER.info("Finished check signal inconsistencies %s", log_output) + self._print_console_log_info(exit_code) + if args.report: + LOGGER.info( + "Start generating interface inconsistencies html-report for all projects" + ) + gen_sig_incons_index_file( + list(self.signal_inconsistency_results.keys()) + ) + self._create_reports() + LOGGER.info("Finished - generating inconsistencies html-reports") + else: + LOGGER.info("No models in change") + return exit_code + + +def main(): + """Create Signal Inconsistency instance and run checks.""" + args = parse_args() + sig_in = SignalInconsistency(args) + return sig_in.run(args) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pybuild/signal_interfaces.py b/pybuild/signal_interfaces.py new file mode 100644 index 0000000..9cab04b --- /dev/null +++ b/pybuild/signal_interfaces.py @@ -0,0 +1,864 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Signal interface module. + +Module for parsing the external signal interface definition files, and +checking the signal interfaces between Supplier and VCC sw, +and also internally between VCC sw-units. +""" +import re +import csv +import time +import copy +from pprint import pformat +from pathlib import Path +from collections import defaultdict + +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from pybuild.lib.helper_functions import deep_dict_update +from pybuild.problem_logger import ProblemLogger +from pybuild.types import get_ec_type +from pybuild.unit_configs import UnitConfigs, CodeGenerators +from pybuild.user_defined_types import UserDefinedTypes + + +class CsvReaderCounter: + """Csv wrapper to keep track of file row.""" + + def __init__(self, _csvreader): + """Init.""" + self.csvreader = _csvreader + self.counter = 0 + + def __iter__(self): + """Iterate.""" + return self + + def __next__(self): + """Next.""" + self.counter += 1 + return next(self.csvreader) + + def get_count(self): + """Get current row number.""" + return self.counter + + +class InterfaceValueException(Exception): + """Exception for errors interface list.""" + + def __init__(self, signal_name, erroneous_field): + """Init.""" + self.erroneous_field = erroneous_field + self.signal_name = signal_name + + +class SignalInterfaces(ProblemLogger): + """Base class for signal interfaces.""" + + def __init__(self, unit_cfg, model_names=None): + + self._unit_cfg = unit_cfg + self._signals_ext_nok = {'inports': {}, 'outports': {}} + self._signals_ext_ok = {'inports': {}, 'outports': {}} + self._result = self.__ddict_factory() + + if model_names is None: + self.models_to_check = set() + else: + self.models_to_check = set(model_names) + + def get_external_outputs(self): + """Get the external outputs. + + Should be implemented by the subclasses. + + Returns: + dict: External outputs + """ + raise NotImplementedError + + def get_external_inputs(self): + """Get the internal outputs. + + Should be implemented by the subclasses. + + Returns: + dict: Internal outputs + """ + raise NotImplementedError + + @classmethod + def __ddict_factory(cls): + """Generate recursive defaultdict.""" + return defaultdict(cls.__ddict_factory) + + @property + def should_all_models_be_checked(self): + """True if there are no specific models to be checked + + :rtype: bool + """ + return len(self.models_to_check) == 0 + + def should_check_model(self, model_name): + """True if MODEL_NAME is in SELF.MODEL_NAMES + + :rtype: bool + """ + return self.should_all_models_be_checked or model_name in self.models_to_check + + def contains_model_to_check(self, model_names): + """True if MODEL_NAMES contains a model in SELF.MODEL_NAMES + + :param model_names: iterable + :rtype: bool + """ + return any((m in self.models_to_check for m in model_names)) + + @staticmethod + def _eq_var(var_a, var_b, par): + """Check if variables are equal, with some modifications. + + par contains the key for which type of parameter is compared + E.g. nan is equal to '-' and ''. Furthermore, all variables + are converted to strings before making the comparison. + """ + a_s = str(var_a) + b_s = str(var_b) + if par in ['min', 'max']: + a_s = re.sub('nan', '-', a_s) + b_s = re.sub('nan', '-', b_s) + if re.match(r'[-+.0-9eE]+', a_s) and re.match(r'[-+.0-9eE]+', b_s): + try: + a_f = float(var_a) + b_f = float(var_b) + return a_f == b_f + except ValueError: + pass + return a_s == b_s + + def _check_var_def(self, ext_def, unit_def): + """Check that the parameters for the variable definitions are the same. + + Check that the parameters are the same for all units that use the parameter. + """ + res = {} + ignored_parameters = ['class', 'configs', 'handle', 'default', 'description', 'unit'] + for unit, unit_definitions in unit_def.items(): + for parameter, definition in ext_def.items(): + if parameter in ignored_parameters or parameter not in unit_definitions: + continue + unit_definition = unit_definitions[parameter] + if not self._eq_var(definition, unit_definition, parameter): + res.setdefault(unit, {})[parameter] = f"{definition} != {unit_definition}" + + return res if res else None + + def _add_incons_to_ext_dict(self, res, var, incons): + """Add inconsistencies to the ext dict.""" + if incons is not None: + for unit, incon in incons.items(): + if self.should_check_model(unit): + if var in res['inconsistent_defs'][unit]: + res['inconsistent_defs'][unit][var].update(incon) + else: + res['inconsistent_defs'][unit][var] = incon + + def _add_incons_to_dict(self, res, var, incons): + """Add iconsistent data to a dict.""" + if incons is not None: + for unit, incon in incons.items(): + if self.should_check_model(unit): + if var in res[unit]['inconsistent_defs']: + res[unit]['inconsistent_defs'][var].update(incon) + else: + res[unit]['inconsistent_defs'][var] = incon + + def _gen_int_outp_set(self, tot_unit_cfg): + """Generate a set of signals to check for internal output parameters.""" + tot_cfg = tot_unit_cfg.get('outports', {}) + external_ports = {**self._signals_ext_ok['outports'], **self._signals_ext_nok['outports']} + + # only check outports that are not defined in the external io definition + non_ext_outp = set(tot_cfg.keys()) - set(external_ports.keys()) + return non_ext_outp + + def _gen_int_inp_set(self, tot_unit_cfg): + """Generate a set of signals to check for internal input parameters.""" + tot_cfg = tot_unit_cfg.get('inports', {}) + external_ports = {**self._signals_ext_ok['inports'], **self._signals_ext_nok['inports']} + + # only check inports that are not defined in the external io definition + non_ext_inp = set(tot_cfg.keys()) - set(external_ports.keys()) + return non_ext_inp + + def _gen_unit_var_dict(self, res, chk_type, variables, in_out): + """Generate a dict with vars as keys, and units in which they are used as a list.""" + tot_cfg = self._unit_cfg.get_per_cfg_unit_cfg() + for var in variables: + for unit in tot_cfg[in_out][var]: + if self.should_check_model(unit): + if var in res[unit][chk_type]: + res[unit][chk_type][var] = {} + else: + res[unit][chk_type][var] = {} + + def _check_external_outp(self): + """Check that all external outputs (VCC -> supplier). + + Check that all external outputs are produced, + that consumed signals (Supplier -> VCC) are defined as inputs + in the external IO definition file, and that the signal + definitions are consistent between io and unit definitions. + """ + ext_out = self.get_external_outputs() + tot_cfg = self._unit_cfg.get_per_cfg_unit_cfg() + res = self._result['sigs']['ext'] + # check that all output signals are produced by VCC SW + if 'outports' in tot_cfg: + for _, data in ext_out.items(): + for var, var_def in data.items(): + if var not in tot_cfg['outports']: + res['missing'][var] = {} + self._signals_ext_nok['outports'][var] = var_def + else: + self._signals_ext_ok['outports'][var] = var_def + tmp = self._check_var_def(var_def, tot_cfg['outports'][var]) + self._add_incons_to_ext_dict(res, var, tmp) + + def _check_external_inp(self): + """Check all external input signals. + + Check that outputs are produced and, + that consumed signals are defined as inputs + in the external IO definition file. + """ + ext_inp = self.get_external_inputs() + # self.debug('ext_inp: %s', pformat(ext_inp)) + tot_cfg = self._unit_cfg.get_per_cfg_unit_cfg() + res = self._result['sigs']['ext'] + # check that all input signals are used by VCC SW + if 'inports' in tot_cfg: + for data in ext_inp.values(): + for var, var_def in data.items(): + if var not in tot_cfg['inports']: + if var not in res['unused']: + res['unused'][var] = {} + self._signals_ext_nok['inports'][var] = var_def + else: + self._signals_ext_ok['inports'][var] = var_def + tmp = self._check_var_def(var_def, tot_cfg['inports'][var]) + self._add_incons_to_ext_dict(res, var, tmp) + + def _check_internal_io(self): + """Check internal signal io. + + Function which checks that: + 1. all signals consumed in models, are produced + in antoher model. + 2. all outputs are consumed (warning) + 3. check that all signal definitions are the same as the producing unit. + 4. a signal is only produced in one model (per prj). + this function return a tuple with the above content + + TODO: + Shall we add a check for multiple inputs of the same signal?* + """ + tot_cfg = self._unit_cfg.get_per_cfg_unit_cfg() + internal_inport_signals = self._gen_int_inp_set(tot_cfg) + internal_outport_signals = self._gen_int_outp_set(tot_cfg) + all_outports = set(tot_cfg.get('outports', {}).keys()) + res = self._result['sigs']['int'] + # 1. all signals consumed in models, are produced in another model. + missing = internal_inport_signals - all_outports + self._gen_unit_var_dict(res, 'missing', missing, 'inports') # error! + # 2. all outputs are consumed (warning) + unused = internal_outport_signals - internal_inport_signals + self._gen_unit_var_dict(res, 'unused', unused, 'outports') # warning? + # 3. check that all signal definitions are the same as the producing + # unit. + input_signals_to_check = internal_inport_signals - missing + for signal in input_signals_to_check: + unit_key = list(tot_cfg['outports'][signal].keys()) + # if output is defined in multiple functions, test #4 will catch this + if len(unit_key) == 1: + outport_def = tot_cfg['outports'][signal][unit_key[0]] + tmp = self._check_var_def(outport_def, + tot_cfg['inports'][signal]) + self._add_incons_to_dict(res, signal, tmp) + + # 4. check that we have not screwed up any of the consuming models + external_signals_to_check = internal_outport_signals - unused + for signal in external_signals_to_check: + unit_keys = list(tot_cfg['inports'][signal].keys()) + my_outport_definition = tot_cfg['outports'][signal] + for unit_key in unit_keys: + others_inport_def = tot_cfg['inports'][signal][unit_key] + tmp = self._check_var_def(others_inport_def, + my_outport_definition) + self._add_incons_to_dict(res, signal, tmp) + + # 5. there should only be one outport per config. + multiple_defs = [] + if 'outports' in tot_cfg: + multiple_defs = [x for x in tot_cfg['outports'] + if len(tot_cfg['outports'][x]) > 1] + self._gen_unit_var_dict(res, 'multiple_defs', multiple_defs, 'outports') + + def _check_config(self): + """Check the interfaces given a certain project config. + + The result of the checks is stored in the dict self._result + """ + # reset the handled external signals for each configuration + self._signals_ext_ok = {'inports': {}, 'outports': {}} + # has to be done in this order since there is an implicit dependency + # to self._signals_ext_ok + self._check_external_outp() + self._check_external_inp() + self._check_internal_io() + + def check_config(self): + """Check configurations for specific project. + + Returns: + dict: the result of the check with the following format + + :: + + { + "sigs": { "ext": {"missing": {}, + "unused": {}, + "inconsistent_defs": {}}, + "int": {"UNIT_NAME": {"missing": {}, + "unused": {}, + "multiple_defs": {} + "inconsistent_defs": {}} + } + } + + """ + self._result = self.__ddict_factory() + self._check_config() + # self.debug("%s", pformat(self._result)) + # restore the current conofiguration + + return self._result + + +class YamlSignalInterfaces(SignalInterfaces): + """Interface configurations defined in yaml files.""" + + @staticmethod + def from_config_file(project_config_path): + """Create a YamlSignalInterfaces instance from a project config file. + + Args: + project_config_path (str): path to the project config file + + Returns: + YamlSignalInterfaces: instance of YamlSignalInterfaces + """ + build_project_config = BuildProjConfig(project_config_path) + feature_cfg = FeatureConfigs(build_project_config) + unit_config = UnitConfigs(build_project_config, feature_cfg) + user_defined_types = UserDefinedTypes(build_project_config, unit_config) + + return YamlSignalInterfaces( + prj_cfg=build_project_config, + unit_cfg=unit_config, + feature_cfg=feature_cfg, + user_defined_types=user_defined_types + ) + + def __init__(self, prj_cfg, unit_cfg, feature_cfg, user_defined_types, model_names=None): + """Class initializer. + + Args: + prj_cfg (BuildProjConfig): configures which units are active in the current project. + unit_cfg (UnitConfigs): class instance containing all the unit configuration parameters. + feature_cfg (FeatureConfig): Feature configs from SPM_Codeswitch_Setup. + user_defined_types (UserDefinedTypes): Class holding user defined data types. + model_names (set): models that should be included in the check, default is all models + """ + super().__init__(unit_cfg, model_names=model_names) + + # Postpone imports to here to work on machines without PyYaml installed + from pybuild.interface.base import filter_signals + from pybuild.interface.application import Application, get_internal_domain + from pybuild.interface.generation_utils import get_interface, get_method_interface + from pybuild.interface.hal import HALA + from pybuild.interface.device_proxy import DPAL + from pybuild.interface.zone_controller import ZCAL + from pybuild.interface.service import ServiceFramework + + app = Application() + app.pybuild['build_cfg'] = prj_cfg + app.name = app.pybuild['build_cfg'].name + app.pybuild['feature_cfg'] = feature_cfg + app.pybuild['unit_vars'] = unit_cfg.get_per_unit_cfg_total() + app.pybuild['user_defined_types'] = user_defined_types + + translation_files = app.get_translation_files() + + ecu_supplier, _unused = prj_cfg.get_ecu_info() + self.zc_spec = {} + self.hal_spec = {} + self.dp_spec = {} + self.sfw_spec = {} + self.sa_spec = {} + self.service_spec = {} + self.mthd_spec = {} + if ecu_supplier == 'ZC': + zc_app = ZCAL(app) + self.zc_spec = get_interface(app, zc_app) + self.composition_spec = zc_app.composition_spec + elif ecu_supplier == 'HI': + hi_app = DPAL(app) + self.dp_spec = get_interface(app, hi_app) + else: + hala = HALA(app) + dp = DPAL(app) + swf = ServiceFramework(app) + hala.parse_definition(translation_files) + self.dp_spec = get_interface(app, dp) + self.sfw_spec = get_interface(app, swf) + self.mthd_spec = get_method_interface(app) + self.service_spec = self.get_availability(app, unit_cfg.code_generators) + rasters = app.get_rasters() + self.debug('Rasters: %s', rasters) + internal = get_internal_domain(rasters) + properties_from_json = [ + {"destination": "min", "source": "min", "default": "-"}, + {"destination": "max", "source": "max", "default": "-"}, + {"destination": "variable_type", "source": "type"}, + {"destination": "offset", "source": "offset", "default": "-"}, + {"destination": "factor", "source": "lsb", "default": 1}, + {"destination": "description", "source": "description"}, + {"destination": "unit", "source": "unit", "default": "-"}, + ] + for raster in rasters: + hala.name = raster.name + hala.clear_signal_names() + hala.add_signals(filter_signals(raster.insignals, internal), 'insignals', properties_from_json) + hala.add_signals(raster.outsignals, 'outsignals', properties_from_json) + self.debug('Current HALA: %s', hala) + self.hal_spec[raster.name] = hala.to_dict() + + @staticmethod + def get_availability(app, code_generators={CodeGenerators.target_link}): + """Get the availability of services. + + Args: + app (Application): Application instance + code_generators (set): Code generators to include in the availability check + + Returns: + dict: Availability of services + """ + tl_type = 'Bool' + variable_type = tl_type if CodeGenerators.target_link in code_generators else get_ec_type(tl_type) + services = app.get_service_mapping() + spec = {} + for interface, service in services.items(): + camel_interface = ''.join(part.title() for part in interface.split('_')) + spec[interface] = { + 'variable': f'yVcSfw_B_{camel_interface}IsAvailable', + 'variable_type': variable_type, + 'property_type': 'bool', + 'service': service, + 'default': 0, + 'length': 1, + 'property': 'inherent', + 'offset': '-', + 'factor': 1, + 'range': {'min': '0', 'max': '1'}, + 'init': 0, + 'description': f'Availability of {interface} in {service}', + 'unit': '-', + 'group': None, + 'model': interface + } + return spec + + def get_externally_defined_ports(self): + """Get ports defined by suppliers.""" + outports = [] + for raster in self.dp_spec.values(): + for spec in raster['consumer']: + outports.append(spec['variable']) + for raster in self.hal_spec.values(): + for spec in raster['consumer']: + outports.append(spec['variable']) + for raster in self.sfw_spec.values(): + for spec in raster['consumer']: + outports.append(spec['variable']) + for raster in self.sa_spec.values(): + for spec in raster['consumer']: + outports.append(spec['variable']) + for raster in self.zc_spec.values(): + for spec in raster['consumer']: + outports.append(spec['variable']) + return outports + + def get_external_io(self): + """Get the variable definitions for the signal IO for a given config. + + Returns: + dict: Variable definitions for the supplier in-/out-put signals for the configuration + """ + def normalize_spec(spec): + """ Convert Yaml spec to normal pybuild spec. + + Arguments: + spec (dict): Yaml specification of signal + Returns: + spec (dict): Pybuild specification of signal + """ + spec2 = copy.copy(spec) # copy by value + spec2['type'] = spec['variable_type'] + spec2['min'] = spec['range']['min'] + spec2['max'] = spec['range']['max'] + return spec2 + + def set_spec(target): + new_spec = normalize_spec(spec) + if new_spec.get('debug'): + debug[target][spec['variable']] = new_spec + elif spec.get('dependability'): + dependability[target][spec['variable']] = new_spec + else: + normal[target][spec['variable']] = new_spec + + normal = {} + dependability = {} + secure = {} # Only supported by CSV interfaces + debug = {} + + for field in ['input', 'output', 'status']: + normal[field] = {} + dependability[field] = {} + debug[field] = {} + + spec_confs = [self.dp_spec, self.sfw_spec, self.sa_spec, self.hal_spec, self.zc_spec] + for spec_conf in spec_confs: + for raster in spec_conf.values(): + for spec in raster['consumer']: + set_spec("input") + for spec in raster['producer']: + set_spec("output") + for spec in self.service_spec.values(): + set_spec('status') + for method_data in self.mthd_spec.values(): + for _, spec in method_data['ports']['out'].items(): + set_spec('input') + for _, spec in method_data['ports']['in'].items(): + set_spec('output') + return normal, dependability, secure, debug + + def get_external_signals(self, find_output=True): + """Get the external signals. + + Args: + find_output (bool): True if output signals should be returned, False if input signals should be returned + + Returns: + dict: External signals + """ + io_type = self.get_external_io() # (normal, dependability, secure (unsupported), debug) + directional_io = defaultdict(dict) + for io in io_type: + for signal_type, signals in io.items(): + if find_output and signal_type == 'output': + directional_io[signal_type].update(signals) + elif not find_output and signal_type == 'input': + directional_io[signal_type].update(signals) + return directional_io + + def get_external_outputs(self): + return self.get_external_signals(True) + + def get_external_inputs(self): + return self.get_external_signals(False) + + +class CsvSignalInterfaces(SignalInterfaces): + """Interface configurations for all units and all configs. + + Provides methods for retrieving the currently + used signal configurations of a unit. + """ + + convs = (('~=', '!='), ('~', ' not '), ('!', ' not '), (r'\&\&', ' and '), + (r'\|\|', ' or ')) + # Common excel sheet definitions, adapted for CVS. + VAR_COL = 0 # Variable name + DATA_COL = 2 # Type, min, max, unit, comment, init + PROJ_COL = 9 # Variable number of projects + HEADER_ROW = 3 # which row the header info is found + DATA_ROW = 5 # the row which data starts + WS_NAMES = ['EMS-Output', 'EMS-Input', 'LIN-Output', 'LIN-Input', + 'CAN-Output', 'CAN-Input', 'Private CAN-Output', + 'Private CAN-Input'] + + def __init__(self, prj_cfg, unit_cfg, models=None): + """Class initializer. + + Args: + prj_cfg (BuildProjConfig): configures which units are active in the + current project + unit_cfg (UnitConfigs): class instance containing all the unit + configuration parameters + models (str or list): Models to get interface for. default: 'all' + + """ + super().__init__(unit_cfg, model_names=models) + self.interfaces = {} + + self.__prjs = {} + self.__out_dict = {} + self.__all_prjs = set() + self.__prj2col = {} + self.__prj_col_range = {} + + prj2index = {} + self.name = prj_cfg.get_prj_config() + file_path = prj_cfg.get_if_cfg_dir() + self._prj_cfg = prj_cfg + self._parse_io_cnfg(file_path) + for k in self.__prj2col: + self.__prj2col[k] = prj2index + + def _parse_io_cnfg(self, interface_directory): + """Parse the CSV config files.""" + start_time = time.time() + self.info('******************************************************') + self.info('Start parsing SPM-Interface definition files') + for ws_name in self.WS_NAMES: + self.debug("read sheet %s start", ws_name) + file_path = Path(interface_directory, ws_name + '.csv') + try: + with open(file_path, newline='') as fhandle: + if ws_name not in self.interfaces: + self.interfaces.update({ws_name: {}}) + interface = self.interfaces[ws_name] + csvreader = csv.reader(fhandle, delimiter=';', strict=True) + csvreader = CsvReaderCounter(csvreader) + try: + for _ in range(self.HEADER_ROW-1): + next(csvreader) + row = next(csvreader) + # TODO: Find why excel export script sometimes skips first field + # on each line if field is empty. + # Workaround: + row = row[1:] if row[0] == '' else row + try: + col = self._get_proj_col(row) + except IndexError: + self.warning('Project %s not defined in %s', self.name, file_path.stem) + continue + + for _ in range(self.HEADER_ROW, self.DATA_ROW-1): + next(csvreader) + except StopIteration: + self.critical('File %s has bad format, not enough header rows', file_path.stem) + for row in csvreader: + row = row[1:] if row[0] == '' else row + try: + signal, data = self._get_var_def(row) + data.update({'element_index': csvreader.get_count()}) + except InterfaceValueException as interface_exception: + self.critical('Missing value for key "%s" in list "%s" at index "%s"', + interface_exception.erroneous_field, + file_path.stem, csvreader.get_count()) + continue + if signal not in interface: + interface.update({signal: data}) + interface[signal]['IOType'] = row[col].lower() + self.debug("read sheet %s end", ws_name) + except FileNotFoundError: + self.info('Project %s does not have a %s', self.name, ws_name) + self.info('Finished parsing SPM-Interface definition file (in %4.2f s)', time.time() - start_time) + + def __repr__(self): + """Get string representation of object.""" + return pformat(self.__out_dict) + + def _get_proj_col(self, row): + """Get the projects in the config document. + + Parses supplied worksheet row and finds all the projects defined, and + stores the result in the class variable __all_prjs. + Furthermore, a dict prj2col, maps the project name to a list index + in the prj key in the __out_dict dict, and + sets the class variables __prj2col, and __prj_col_range contains + a list with column indexes in the excel sheet, used for parsing the + excel, the result is stored in the interal __out_dict + + interfaces example: + + :: + + { + 'CAN-Input': { + 'sVCcm_D_HvacCoolgEnaRe': { + 'IOType': 'd' + 'description': 'Enable Ac rear HVAC', + 'init': 0, + 'max': 1, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + } + } + + """ + col = self.PROJ_COL + while row[col] is not None and row[col] != '': + if row[col] == self.name: + return col + col += 1 + if col > 200: + break + + raise IndexError + + @staticmethod + def _get_var_def(row): + """Get the variable definition from a row in a sheet. + + Returns: + dict: with var definitions + + """ + keys = ['type', 'min', 'max', 'unit', 'description', 'init'] + + vals = [] + for col in [0, 2, 3, 4, 5, 6, 7]: + val = row[col] + if isinstance(val, str): + val = val.strip() + if re.fullmatch('[+-]?[0-9]+', val): + val = int(val) + elif re.fullmatch('[+-]?[0-9.,]+', val): + val = float(val.replace(',', '.')) + vals.append(val) + critical_attributes = ['type'] + signal_name = vals[0] + signal_attributes = dict(zip(keys, vals[1:])) + for field in critical_attributes: + if signal_attributes[field] == '': + raise InterfaceValueException(signal_name, field) + return signal_name, signal_attributes + + def get_raw_io_cnfg(self): + """Get the raw IO-Config parsed from the config file. + + Returns: + dict: raw configuration information from the config file + + dict example: + + :: + + { + 'CAN-Input': { + 'sVCcm_D_HvacCoolgEnaRe': { + 'description': 'Enable Ac rear HVAC', + 'init': 0, + 'max': 1, + 'min': 0, + 'project_def': 'D', + 'type': 'UInt8', + 'unit': '-' + } + } + } + + + """ + return self.interfaces + + def get_io_config(self): + """Get an IO-Config for a specific project. + + Returns: + tuple: a tuple with three dicts - (nrm_dict, dep_dict, dbg_dict) + + """ + normal = {} + dep = {} + secure = {} + debug = {} + for interface_name, interface in self.interfaces.items(): + normal[interface_name] = {} + dep[interface_name] = {} + secure[interface_name] = {} + debug[interface_name] = {} + for signal_name, signal in interface.items(): + prj_def = signal.get('IOType', '-') + if prj_def in 'xd': + normal[interface_name][signal_name] = copy.deepcopy(signal) + elif prj_def in 's': + dep[interface_name][signal_name] = copy.deepcopy(signal) + elif prj_def == 'sc': + secure[interface_name][signal_name] = copy.deepcopy(signal) + if prj_def in 'd': + debug[interface_name][signal_name] = copy.deepcopy(signal) + return normal, dep, secure, debug + + def get_external_io(self): + """Get the variable definitions for the signal IO for a given config. + + Returns: + dict: Variable definitions for the supplier in-/out-put signals for the configuration + + """ + return self.get_io_config() + + def get_external_inputs(self): + """Get variable definitions for the supplier signal Inputs. + + Returns: + dict: variable definitions for the supplier input signals + + """ + cfg, cfg_dep, cfg_sec = self.get_io_config()[:3] + deep_dict_update(cfg, cfg_dep) + deep_dict_update(cfg, cfg_sec) + out = {} + for key, value in cfg.items(): + if re.match('.*Input$', key) is not None: + out[key] = value + return out + + def get_external_outputs(self): + """Get variable definitions for the supplier signal Outputs. + + Returns: + dict: variable definitions for the supplier output signals + + """ + cfg, cfg_dep, cfg_sec = self.get_io_config()[:3] + deep_dict_update(cfg, cfg_dep) + deep_dict_update(cfg, cfg_sec) + out = {} + for key, value in cfg.items(): + if re.match(r'.*Output$', key) is not None: + out[key] = value + return out + + def get_externally_defined_ports(self): + """Get ports defined by suppliers.""" + externally_defined_ports = set() + external_outports = self.get_external_outputs() + for external_ports in external_outports.values(): + externally_defined_ports.update(external_ports) + external_inports = self.get_external_inputs() + for external_ports in external_inports.values(): + externally_defined_ports.update(external_ports) + return list(externally_defined_ports) diff --git a/pybuild/templates/Index_SigCheck_All.html b/pybuild/templates/Index_SigCheck_All.html new file mode 100644 index 0000000..30939f8 --- /dev/null +++ b/pybuild/templates/Index_SigCheck_All.html @@ -0,0 +1,23 @@ + + + + + + + Signal Consistency Report + + + + \ No newline at end of file diff --git a/pybuild/templates/Index_SigIf_All.html b/pybuild/templates/Index_SigIf_All.html new file mode 100644 index 0000000..a6c0c87 --- /dev/null +++ b/pybuild/templates/Index_SigIf_All.html @@ -0,0 +1,20 @@ + + + + + Signal Interface Report + + + + \ No newline at end of file diff --git a/pybuild/types.py b/pybuild/types.py new file mode 100644 index 0000000..7c6767f --- /dev/null +++ b/pybuild/types.py @@ -0,0 +1,218 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Common functions and properties for types.""" + +TL_TYPES = dict( + Float32=dict( + size=4, + a2l_type='FLOAT32_IEEE', + a2l_range=('-1e38', '1e38') + ), + UInt32=dict( + size=4, + a2l_type='ULONG', + a2l_range=(0, 4294967295) + ), + Int32=dict( + size=4, + a2l_type='SLONG', + a2l_range=(-2147483648, 2147483647) + ), + UInt16=dict( + size=2, + a2l_type='UWORD', + a2l_range=(0, 65535) + ), + Int16=dict( + size=2, + a2l_type='SWORD', + a2l_range=(-32768, 32767) + ), + UInt8=dict( + size=1, + a2l_type='UBYTE', + a2l_range=(0, 255) + ), + Int8=dict( + size=1, + a2l_type='SBYTE', + a2l_range=(-128, 127) + ), + Bool=dict( + size=1, + a2l_type='UBYTE', + a2l_range=(0, 1), + bitmask='0x01' + ) +) + +EC_TYPES = dict( + real64_T=dict( + size=8, + a2l_type='FLOAT64_IEEE', + a2l_ranger=('-1.8e308', '1.8e308') + ), + real_T=dict( + size=8, + a2l_type='FLOAT64_IEEE', + a2l_ranger=('-1.8e308', '1.8e308') + ), + time_T=dict( + size=8, + a2l_type='FLOAT64_IEEE', + a2l_ranger=('-1.8e308', '1.8e308') + ), + ulong_T=dict( + size=4, + a2l_type='ULONG', + a2l_range=(0, 4294967295) + ), + real32_T=dict( + size=4, + a2l_type='FLOAT32_IEEE', + a2l_range=('-1e38', '1e38') + ), + uint32_T=dict( + size=4, + a2l_type='ULONG', + a2l_range=(0, 4294967295) + ), + uint_T=dict( + size=4, + a2l_type='ULONG', + a2l_range=(0, 4294967295) + ), + int32_T=dict( + size=4, + a2l_type='SLONG', + a2l_range=(-2147483648, 2147483647) + ), + int_T=dict( + size=4, + a2l_type='SLONG', + a2l_range=(-2147483648, 2147483647) + ), + uint16_T=dict( + size=2, + a2l_type='UWORD', + a2l_range=(0, 65535) + ), + int16_T=dict( + size=2, + a2l_type='SWORD', + a2l_range=(-32768, 32767) + ), + uint8_T=dict( + size=1, + a2l_type='UBYTE', + a2l_range=(0, 255) + ), + int8_T=dict( + size=1, + a2l_type='SBYTE', + a2l_range=(-128, 127) + ), + boolean_T=dict( + size=1, + a2l_type='UBYTE', + a2l_range=(0, 1), + bitmask='0x01' + ), + uchar_T=dict( + size=1, + a2l_type='UBYTE', + a2l_range=(0, 255) + ), + char_T=dict( + size=1, + a2l_type='SBYTE', + a2l_range=(-128, 127) + ), + byte_T=dict( + size=1, + a2l_type='SBYTE', + a2l_range=(-128, 127) + ) +) + + +def _validate_c_type(c_type): + """Make sure given c-type is handled.""" + if c_type in TL_TYPES: + return TL_TYPES[c_type] + if c_type in EC_TYPES: + return EC_TYPES[c_type] + raise KeyError(f'Invalid data type: {c_type}') + + +def byte_size(c_type): + """Get byte size of a c-type as an int.""" + type_dict = _validate_c_type(c_type) + return type_dict['size'] + + +def byte_size_string(c_type): + """Get byte size of a c-type as a string.""" + return str(byte_size(c_type)) + + +def a2l_type(c_type): + """Get a2l-type of a c-type.""" + type_dict = _validate_c_type(c_type) + return type_dict['a2l_type'] + + +def a2l_range(c_type): + """Get a2l-range of a c-type.""" + # TODO: Find out why we default to float32 in a2l.py + # Probably due to vc_dummy. + if c_type == 'float32' or c_type is None: + # TODO Assuming TL for now + return TL_TYPES['Float32']['a2l_range'] + type_dict = _validate_c_type(c_type) + return type_dict['a2l_range'] + + +def get_bitmask(c_type): + """Get bit mask of a c-type. + + Defaults to None for types other than Bool. + """ + type_dict = _validate_c_type(c_type) + return type_dict.get('bitmask') + + +def get_ec_type(tl_type): + """Get equivalent EC type for a given TL type. + + Args: + tl_type (str): TL type + + Returns: + str: EC type + """ + tl_ec = dict( + Float32='real32_T', + UInt32='uint32_T', + Int32='int32_T', + UInt16='uint16_T', + Int16='int16_T', + UInt8='uint8_T', + Int8='int8_T', + Bool='boolean_T' + ) + return tl_ec[tl_type] + + +def get_float32_types(): + """Get all EC types that are equivalent to Float32. + + Returns: + set: EC types + """ + float32_types = {'Float32'} + for ec_type, ec_type_def in EC_TYPES.items(): + if ec_type_def == TL_TYPES['Float32']: + float32_types.add(ec_type) + return float32_types diff --git a/pybuild/unit_configs.py b/pybuild/unit_configs.py new file mode 100644 index 0000000..4d5f18f --- /dev/null +++ b/pybuild/unit_configs.py @@ -0,0 +1,420 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module for reading unit configuration files.""" +import json +import os +import time +from pprint import pformat + +from pybuild.build_proj_config import BuildProjConfig +from pybuild.problem_logger import ProblemLogger +from pybuild.versioncheck import Version + + +class CodeGenerators: + """Enum for code generators.""" + target_link = 'target_link' + embedded_coder = 'embedded_coder' + + +class UnitConfigs(ProblemLogger): + """A class for accessing the project’s unit definitions (see :doc:`unit_config`). + + Provides methods for retrieving the all definitions of a unit and all existing units. + """ + + CONFIG_SKIP_LIST = ['VcDebugSafe', 'VcDebug', 'VcDebugOutputSafe', 'VcDebugOutput'] + + def __init__(self, build_prj_config, feature_config): + """Class Initialization. + + Args: + build_prj_config (BuildProjConfig): A class instance which holds + the information of where to find units configs to parse + feature_config (FeatureConfigs): Class instance project feature definitions + + """ + super().__init__() + if not isinstance(build_prj_config, BuildProjConfig): + raise TypeError('build_prj_config argument is not an' + ' instance of BuildProjConfig') + self._build_prj_config = build_prj_config + self._feature_cfg = feature_config + self._raw_per_unit_configs = {} + self._per_unit_configs = {} + self._per_type_unit_configs = {} + self._if_define_dict = {} + self._missing_configs = set() + self._empty_config_def = set() + self._parse_all_unit_configs() + self._per_type_unit_signals() + self.code_generators = self._get_code_generators() + self.base_types_headers = self._get_base_types_headers() + + # write the summary of error (to avoid repeating error messages) + for unit in self._missing_configs: + self.critical('%s is missing config files', unit) + for var, unit in self._empty_config_def: + self.warning('%s in unit %s, has empty config_def!' + 'probably goto-block, missing a corresponing from-block.', + var, unit) + + def __repr__(self): + """Get string representation of object.""" + return pformat(self._per_type_unit_configs) + + def _parse_all_unit_configs(self): + """Parse all unit config files.""" + start_time = time.time() + self.info(' Start loading unit_cfg json files') + cfg_dirs = self._build_prj_config.get_unit_cfg_dirs() + for unit, cfg_dir in cfg_dirs.items(): + self._parse_unit_config(unit, cfg_dir) + self.info(' Finished loading unit_cfg json files (in %4.2f s)', time.time() - start_time) + + def _parse_unit_config(self, unit, cfg_dir): + """Parse one unit config file.""" + file_ = os.path.join(cfg_dir, f'config_{unit}.json') + with open(file_, 'r', encoding="utf-8") as fhndl: + self.debug('Loading json file %s', unit) + try: + tmp_ucfg = json.load(fhndl) + if not Version.is_compatible(tmp_ucfg.get('version', '0.0.0')): + raise ValueError(f'Incompatible config file version for unit {unit}.') + if unit in self._raw_per_unit_configs: + self.critical("Conflicting Unit name %s: Units need to have unique names", unit) + self._raw_per_unit_configs[unit] = tmp_ucfg + except json.JSONDecodeError as ex: + self.critical('Error reading config file %s: %s', file_, ex) + return + for include_unit in tmp_ucfg.get('includes', []): + self.debug('%s includes %s in %s', unit, include_unit, cfg_dir) + self._parse_unit_config(include_unit, cfg_dir) + + def _filter_io_nvm_feat(self): + """Remove all parameters not defined in the prj_config. + + Parameters can be removed via not active feature in the unit, or + the entire unit is not included in the project. + + Args: + config (str): the name of the configuration + + the format of the data-dict:: + + {'UnitName': {'class': 'CVC_EXT', + 'configs': [['Vc_D_CodegenHev ' + '== 2', + 'Vc_D_CodegenHev ' + '> 0']], + 'description': 'HV battery cooling request', + 'handle': 'VcPpmPsm/VcPpmPsm/Subsystem/' + 'VcPpmPsm/yVcBec_B_ChillerCoolReq', + 'lsb': 1, + 'max': 3, + 'min': 0, + 'name': 'sVcBec_D_HvBattCoolgReq', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'} + } + + """ + res = {} + self.debug('_filter_io_nvm_feat: Feature Cfg') + for unit in self._build_prj_config.get_included_units(): + self._filter_io_nvm_feat_unit(unit, res) + if not res: + self.warning('No units configured for project') + return res + + def _filter_core_config(self, u_def_data): + """Handle core configs.""" + f_core = {} + for core_type, core_data in u_def_data.items(): + f_core[core_type] = {} + for key, value in core_data.items(): + if key != 'IllegalBlk': + # Matlab sets core:{type:{name:{API_blk:[{path, config}]}}} + # config.py - core:{type:{name:{configs}}} + configs = value.get('configs', [cfg for blk in value['API_blk'] for cfg in blk['config']]) + if self._feature_cfg.check_if_active_in_config(configs): + f_core[core_type][key] = value + return f_core + + def _filter_io_nvm_feat_unit(self, unit, res): + """Handle one unit config with respect to the filtering in :_filter_io_nvm_feat:.""" + try: + u_data = self._raw_per_unit_configs[unit] + except KeyError: + # Some units in the raster should not have config files + if unit not in self.CONFIG_SKIP_LIST: + self.debug('_filter_io_nvm_feat_unit: cfg missing: %s', unit) + self._missing_configs.add(unit) + return + for u_def_type, u_def_data in u_data.items(): + res.setdefault(unit, {}).setdefault(u_def_type, {}) + if u_def_type == 'dids': + f_dids = {k: v for k, v in u_def_data.items() + if self._feature_cfg.check_if_active_in_config(v['configs'])} + res[unit][u_def_type] = f_dids + elif u_def_type == 'core': + res[unit][u_def_type] = self._filter_core_config(u_def_data) + elif u_def_type == 'pre_procs': + # the pre_proc key does not have configuration attributes + res[unit]['pre_procs'] = u_def_data + elif u_def_type == 'integrity_level': + res[unit]['integrity_level'] = u_def_data + elif u_def_type == 'code_generator': + res[unit]['code_generator'] = u_def_data + elif u_def_type == 'version': + res[unit]['version'] = u_def_data + elif u_def_type == 'csp': + csp_data = {} + if 'methods' in u_def_data: + csp_data = {'methods': {}} + for method_name, method_data in u_def_data['methods'].items(): + if self._feature_cfg.check_if_active_in_config(method_data['configs']): + csp_data['methods'][method_name] = method_data + res[unit][u_def_type] = csp_data + elif u_def_type == 'includes': + # List of configs for handwritten code + for included_unit in u_def_data: + self.debug('%s includes %s', unit, included_unit) + self._filter_io_nvm_feat_unit(included_unit, res) + else: + for var, var_pars in u_def_data.items(): + # TODO: remove this code when the bug in the matlab code is removed. + if var_pars['configs'] == []: + self.debug('Adding %s', unit) + self._empty_config_def.add((var, unit)) + if self._feature_cfg.check_if_active_in_config(var_pars['configs']): + res[unit][u_def_type].setdefault(var, {}).update(var_pars) + + @staticmethod + def _update_io_nvm(dict_, unit, data_type, variables): + """Change the struct for in out and nvm variables. + + The resulting new struct is stored in the dict dict_ + """ + for var, var_pars in variables.items(): + dict_.setdefault(data_type, {}).setdefault(var, {}).setdefault(unit, var_pars) + + def _update_dids(self, unit, key, data, feat_cfg=None): + """Change the struct for in out and nvm variables.""" + # TODO: Add functionality + + @staticmethod + def _update_core(dict_, unit, data_type, core_ids): + """Change the struct for in core parameters.""" + for _, core_data in core_ids.items(): + for var, var_pars in core_data.items(): + dict_.setdefault(data_type, {}).setdefault(var, {}).setdefault(unit, var_pars) + + def _update_pre_procs(self, unit, key, data, feat_cfg=None): + """Change the struct for in pre_processor parameters.""" + # TODO: Add functionality + + def _per_type_unit_signals(self): + """Change the structure of the data to aggregate all unit configs. + + Returns: + dict: a structure per config type instead of per unit + + """ + # loop over all projects and store the active items in each configuration + self._per_unit_configs = self._filter_io_nvm_feat() + dict_ = self._per_type_unit_configs = {} + for unit, udata in self._per_unit_configs.items(): + for data_type, variables in udata.items(): + if data_type in ['core']: + self._update_core(dict_, unit, data_type, variables) + elif data_type in ['dids']: + self._update_dids(dict_, unit, data_type, variables) + elif data_type in ['pre_procs']: + self._update_pre_procs(dict_, unit, data_type, variables) + elif data_type in ['outports', 'inports', 'dids', 'nvm', 'local_vars', 'calib_consts', 'csp']: + self._update_io_nvm(dict_, unit, data_type, variables) + else: + dict_.setdefault(data_type, {}).setdefault(unit, udata) + + def check_if_in_unit_cfg(self, unit, symbol): + """Check if the symbol is defined in the unit config file.""" + for data in self._raw_per_unit_configs[unit].values(): + if isinstance(data, dict): + if symbol in data: + return True + return False + + def get_per_cfg_unit_cfg(self): + """Get all io-signals and core-ids for all units. + + Get all io-signals and core-ids for all units, where all inports, outport, etc, + are aggregated from all unit definition files. + + Returns: + dict: a dict with the below format:: + + { + 'inports/outports/nvm/core': { + 'VARIABLE_NAME': { + 'UNIT_NAME': { + 'class': 'CVC_EXT', + 'configs': [['all']], + 'description': 'Power Pulse ', + 'handle': 'VcPemAlc/VcPemAlc/Subsystem/VcPemAlc/yVcVmcPmm_B_SsActive9', + 'lsb': 1, + 'max': 800, + 'min': 0, + 'name': 'sVcAesPp_Pw_PwrPls', + 'offset': 0, + 'type': 'UInt16', + 'unit': 'W' + } + } + } + } + } + + The top level keys are 'inports', 'outports', 'nvm' and 'core' + + """ + return self._per_type_unit_configs + + def check_if_in_per_cfg_unit_cfg(self, cfg, symbol): + """Check if the symbol is defined in the aggregated unit config files.""" + return ( + cfg in self._per_type_unit_configs and + symbol in self._per_type_unit_configs[cfg]) + + def get_per_unit_cfg(self): + """Get io-signals for all units, per unit, for a given project. + + If 'all' is given as a project, all signals, regardless of configuration, + is returned. + + Returns: + dict: a dict with the below format:: + + {'NAME_OF_UNIT': { + 'core': {'Events': {}, + 'FIDs': {}, + 'IUMPR': {}, + 'Ranking': {}, + 'TstId': {}}, + 'dids': {}, + 'inports': {'VARIABLE_NAME': {'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque ' + 'arbitraion ' + 'state', + 'handle': 'VcPemAlc/VcPemAlc/...', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'rVcPemAlc_D_AuxLoadEvent', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'} + }, + 'outports' : {}, + 'nvm' : {} + } + } + + """ + return self._per_unit_configs + + def get_per_unit_cfg_total(self): + """Get total io-signals configuration for all units, per unit, for a given project. + + Does not remove signals disabled by code switches. + + Returns: + dict: a dict with the below format:: + + {'NAME_OF_UNIT': { + 'core': {'Events': {}, + 'FIDs': {}, + 'IUMPR': {}, + 'Ranking': {}, + 'TstId': {}}, + 'dids': {}, + 'inports': {'VARIABLE_NAME': {'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque ' + 'arbitraion ' + 'state', + 'handle': 'VcPemAlc/VcPemAlc/...', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'rVcPemAlc_D_AuxLoadEvent', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'} + }, + 'outports' : {}, + 'nvm' : {} + } + } + + """ + res = {} + for unit in self._build_prj_config.get_included_units(): + try: + res[unit] = self._raw_per_unit_configs[unit] + except KeyError: + continue + return res + + def get_unit_config(self, unit): + """Get config for a unit. + + Arguments: + unit (str): Unit to get config for + """ + return self._raw_per_unit_configs[unit] + + @staticmethod + def get_base_name(unit): + """Get base name of unit.""" + return unit.partition('__')[0] + + def get_unit_code_generator(self, unit): + """Get code generator for a given a unit (model). + + Args: + unit (str): Current unit/model name. + Returns: + code_generator (str): Code generator used for given model. + """ + per_unit_cfg = self.get_per_unit_cfg() + if unit in per_unit_cfg and 'code_generator' in per_unit_cfg[unit]: + code_generator = per_unit_cfg[unit]['code_generator'] + else: + # Default to target_link + code_generator = CodeGenerators.target_link + return code_generator + + def _get_code_generators(self): + per_unit_cfg = self.get_per_unit_cfg() + code_generators = set() + for _, config in per_unit_cfg.items(): + if 'code_generator' in config: + code_generators.add(config['code_generator']) + if not code_generators: + # Default to target_link + self.info('All code has an old config, defaulting to target_link') + return {CodeGenerators.target_link} + return code_generators + + def _get_base_types_headers(self): + general_includes = '' + if CodeGenerators.embedded_coder in self.code_generators: + general_includes += '#include "rtwtypes.h"\n' + if CodeGenerators.target_link in self.code_generators: + general_includes += '#include "tl_basetypes.h"\n' + return general_includes diff --git a/pybuild/user_defined_types.py b/pybuild/user_defined_types.py new file mode 100644 index 0000000..2a21745 --- /dev/null +++ b/pybuild/user_defined_types.py @@ -0,0 +1,559 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +"""Module for handling user defined data types, such as enumerations.""" + +import re +import time +from ruamel.yaml import YAML +from copy import deepcopy +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.problem_logger import ProblemLogger +from pybuild.unit_configs import UnitConfigs + + +class UserDefinedTypes(ProblemLogger): + """A class for accessing the project’s user defined data types (see :doc:`user_defined_types`).""" + + FILE_PREFIXES = ['udt_'] # Add more as needed + UNDERLYING_DATA_TYPES = { # Add more as needed + 'target_link': { + 'u16': 'UInt16', + 'i16': 'Int16', + 'u8': 'UInt8', + 'i8': 'Int8' + }, + 'embedded_coder': { + 'u16': 'uint16_T', + 'i16': 'int16_T', + 'u8': 'uint8_T', + 'i8': 'int8_T' + } + } + + def __init__(self, build_prj_config, unit_configs): + """Class Initialization. + + Args: + build_prj_config (BuildProjConfig): Instance holding information of where to find units configs to parse. + unit_configs (UnitConfigs): Unit definitions. + """ + super().__init__() + if not isinstance(build_prj_config, BuildProjConfig) or not isinstance(unit_configs, UnitConfigs): + err = ( + 'Input arguments should be an instance of:' + f'BuildProjConfig, not {type(build_prj_config)}' + f'AND/OR UnitConfigs, not {type(unit_configs)}' + ) + raise TypeError(err) + + self._build_prj_cfg = build_prj_config + self._unit_configs = unit_configs + self.enums_per_unit = {} + self.structs_per_unit = {} + self._parse_all_user_defined_types() + self.common_header_files = [] + # Must run last to be able to compare with TL/EC data types + self._interface_data_types = self._parse_interface_data_types() + + @staticmethod + def convert_interface_enum_to_simulink(interface_enum, underlying_data_type=None): + """ Given an interface enumeration, convert it to a simulink parsed version. + + Args: + interface_enum ([dict]): Interface enumeration definition. + underlying_data_type (str): Underlying data type, usually not available for interface enumerations. + Returns + simulink_enum (dict): Simulink enumeration definition. + """ + members = {} + default_value = None + # Assuming interface enumerations start at 0 counting upwards + for idx, enum_member in enumerate(interface_enum): + if 'default' in enum_member: + default_value = enum_member['in'] + else: + members[enum_member['in']] = idx + simulink_enum = { + 'underlying_data_type': underlying_data_type, + 'members': members, + 'default_value': default_value + } + return simulink_enum + + def _parse_interface_data_types(self): + """ Get interface data types. + Also, runs validation tests. + + Returns: + interface_data_types (dict): Specification interface data types. + """ + interface_data_types = {} + interface_data_types_path = Path(self._build_prj_cfg.get_root_dir(), 'conf.local', 'interface_data_types.yml') + + if not interface_data_types_path.is_file(): + self.warning('Cannot extract interface data types. File not found: %s', str(interface_data_types_path)) + return interface_data_types + + self.info(' Parsing file: %s', str(interface_data_types_path)) + with interface_data_types_path.open(mode='r', encoding='utf-8') as fh: + yaml = YAML(typ='safe', pure=True) + interface_data_types_yaml = yaml.load(fh) + interface_data_types_tmp = interface_data_types_yaml['types'] + # Add more as needed + if 'enums' in interface_data_types_tmp: + valid_interface_enumerations = self._validate_interface_enumerations(interface_data_types_tmp['enums']) + interface_data_types['enums'] = valid_interface_enumerations + return interface_data_types + + def _parse_all_user_defined_types(self): + """Parse all files containing user defined data types.""" + start_time = time.time() + self.info(' Start parsing files with user defined data types') + src_dirs = self._build_prj_cfg.get_unit_src_dirs() + for unit, src_dir in src_dirs.items(): + self._parse_unit_user_defined_types(unit, src_dir) + self.info(' Finished parsing files with user defined data types (in %4.2f s)', time.time() - start_time) + + def _parse_unit_user_defined_types(self, unit, unit_src_dir): + """Parse unit defined types for a given unit. + + Files to parse are found using expected prefixes, see FILE_PREFIXES. + Data types to parse can be added as needed. + + Args: + unit (str): Current unit/model name. + unit_src_dir (str): Unit sourcecode directory. + """ + self.enums_per_unit[unit] = {} + self.structs_per_unit[unit] = {} + found_files = [Path(unit_src_dir, unit.split('__')[0] + '.h')] + for file_prefix in self.FILE_PREFIXES: + found_files.extend(Path(unit_src_dir).glob(file_prefix + '*.h')) + for found_file in found_files: + self.info(' Parsing file: %s', str(found_file)) + self._parse_target_link_enum(unit, found_file) + self._parse_target_link_struct(unit, found_file) + self._validate_project_enumerations() + self._validate_project_structs() + + def _parse_target_link_struct(self, unit, header_file: Path): + """Parse structs generated by TargetLink, given a header file. + + Args: + unit (str): Current unit/model name. + header_file (Path): Header file to parse. + """ + with header_file.open(mode='r', encoding='ISO-8859-1') as hf_fh: + header_file_content = hf_fh.read() + structs = re.findall( + r'^struct ([A-Za-z0-9_]+) {\s*\n' + r'((?:\s*\w+ \w+;\s*\n)*)' + r'};', + header_file_content, + flags=re.M + ) + + for struct_name, struct_content in structs: + struct_members = re.findall(r'\s*(\w+) (\w+);', struct_content, flags=re.M) + struct_dict = { + 'members': {variable: data_type for data_type, variable in struct_members} + } + + if struct_name in self.structs_per_unit[unit]: + if self.structs_per_unit[unit][struct_name]['members'] == struct_dict['members']: + self.info('Struct %s is multiply defined in %s, although they are consistent.', struct_name, unit) + else: + self.critical('Found inconsistent multiply defined struct: %s, units: %s.', struct_name, [unit]) + else: + self.structs_per_unit[unit][struct_name] = struct_dict.copy() + + def _validate_project_structs(self): + """Checks for inconsistencies in struct definitions for all units in the project.""" + structs = {} + for unit, struct_names in self.structs_per_unit.items(): + for struct_name, struct_data in struct_names.items(): + if struct_name in structs: + structs[struct_name]['units'].append(unit) + if not structs[struct_name]['members'] == struct_data['members']: + self.critical( + 'Found inconsistent multiply defined struct: %s, units: %s.', + struct_name, + structs[struct_name]['units'] + ) + else: + structs[struct_name] = struct_data.copy() + structs[struct_name]['units'] = [unit] + + def _validate_interface_enumerations(self, interface_enumerations): + """ Given a specification for enumerations + + Args: + interface_enumerations (dict): Interface enumerations. + Returns + valid_interface_enumerations (dict): Specification, valid interface enumerations. + """ + valid_interface_enumerations = {} + user_defined_enumerations = self.get_enumerations() + + for enum_name, enum_data in interface_enumerations.items(): + if enum_name in valid_interface_enumerations: + self.critical('%s is multiply defined in interface enumeration definitions.', enum_name) + elif enum_name not in user_defined_enumerations: + self.critical('%s is not defined in the project', enum_name) + else: + converted = self.convert_interface_enum_to_simulink( + enum_data, + user_defined_enumerations[enum_name]['underlying_data_type'] + ) + is_consistent = self._compare_enum_definitions( + user_defined_enumerations[enum_name]['units'], + enum_name, + converted, + user_defined_enumerations[enum_name] + ) + if is_consistent: + valid_interface_enumerations[enum_name] = enum_data + + return valid_interface_enumerations + + def _validate_project_enumerations(self): + """Checks for inconsistencies in enum definitions for all units in the project.""" + enumerations = {} + for unit, enum_names in self.enums_per_unit.items(): + for enum_name, enum_data in enum_names.items(): + if enum_name in enumerations: + enumerations[enum_name]['units'].append(unit) + self._compare_enum_definitions( + enumerations[enum_name]['units'], + enum_name, + enumerations[enum_name], + enum_data + ) + else: + enumerations[enum_name] = enum_data.copy() + enumerations[enum_name]['units'] = [unit] + + def _compare_enum_definitions(self, units, enum_name, enum_one, enum_two): + """Compare two enumeration definitions. + + Args: + units ([str]): List of units using given enumerations. + enum_name (str): Name of enumeration. + enum_one (dict): Enumeration one to compare. + enum_two (dict): Enumeration two to compare. + Returns: + is_consistent_enums (bool): True/False depending on enum consistency. + """ + is_consistent_enums = True + error_message = f'Found inconsistent multiply defined enumeration: {enum_name}, units: {units}.\n' + if enum_one['underlying_data_type'] != enum_two['underlying_data_type']: + is_consistent_enums = False + error_message += ( + 'underlying_data_type differs: ' + f"{enum_one['underlying_data_type']} vs. {enum_two['underlying_data_type']}.\n" + ) + + enum_one_members = list(enum_one['members'].items()) + enum_two_members = list(enum_two['members'].items()) + if len(enum_one_members) != len(enum_two_members): + is_consistent_enums = False + error_message += ( + f'Number of enum members differs: {len(enum_one_members)} vs. {len(enum_two_members)}.\n' + ) + else: + for idx, enum_one_member in enumerate(enum_one_members): + if enum_one_member[0] != enum_two_members[idx][0] or enum_one_member[1] != enum_two_members[idx][1]: + is_consistent_enums = False + error_message += ( + f'Enum member definition differs: {enum_one_members[idx]} vs. {enum_two_members[idx]}.\n' + ) + + if enum_one['default_value'] != enum_two['default_value']: + is_consistent_enums = False + error_message += ( + 'default_value differs: ' + f"{enum_one['default_value']} vs. {enum_two['default_value']}.\n" + ) + + if not is_consistent_enums: + self.critical(error_message) + + return is_consistent_enums + + def _parse_target_link_enum(self, unit, header_file: Path): + """Parse enumerations generated by TargetLink, given a header file. + + Args: + unit (str): Current unit/model name. + header_file (Path): Header file to parse. + """ + with header_file.open(mode='r', encoding='ISO-8859-1') as hf_fh: + header_file_content = hf_fh.read() + enums = re.findall( + r'^typedef enum ([A-Za-z0-9]+)_tag {\s*\n' + r'((?:\s*\w+ = [-+]?\d+,?\s*\n)*)' + r'} \1;', + header_file_content, + flags=re.M + ) + + for enum_name, enum_content in enums: + enum_members_tmp = re.findall(r'\s*(\w+) = ([-+]?\d+)', enum_content, flags=re.M) + enum_members = [(k, int(v)) for k, v in enum_members_tmp] + underlying_data_type = self._calculate_underlying_data_type(unit, enum_name, enum_members) + enum_dict = { + 'underlying_data_type': underlying_data_type, + 'members': {}, + 'default_value': self.get_default_enum_value(unit, enum_name) + } + for key, value in enum_members: + enum_dict['members'][key] = value + + if enum_name in self.enums_per_unit[unit]: + is_consistent_enums = self._compare_enum_definitions( + [unit], + enum_name, + self.enums_per_unit[unit][enum_name], + enum_dict + ) + if is_consistent_enums: + self.info( + 'Enumeration %s is multiply defined in %s, although they are consistent.', + enum_name, + unit + ) + else: + self.enums_per_unit[unit][enum_name] = enum_dict.copy() + + def _calculate_underlying_data_type(self, unit, enum_name, enum_members): + """Calculate best fitting data type given an enum definition. + + Args: + unit (str): Current unit/model name. + enum_name (str): Current enum name. + enum_members (list(tuple)): List of enum members, name value pairs. + Returns: + underlying_data_type (str): Best fitting data type. + """ + code_generator = self._unit_configs.get_unit_code_generator(unit) + enum_member_values = [member_value for member_name, member_value in enum_members] + min_value = min(enum_member_values) + max_value = max(enum_member_values) + + # TODO Consider forcing signed like CS (or ARXML, from database?) does, seems to be int8 specifically + underlying_data_type = None + if min_value >= 0: + if max_value <= 255: + underlying_data_type = self.UNDERLYING_DATA_TYPES[code_generator]['u8'] + elif max_value <= 65535: + underlying_data_type = self.UNDERLYING_DATA_TYPES[code_generator]['u16'] + elif min_value >= -128: + if max_value <= 127: + underlying_data_type = self.UNDERLYING_DATA_TYPES[code_generator]['i8'] + elif max_value <= 32767: + underlying_data_type = self.UNDERLYING_DATA_TYPES[code_generator]['i16'] + elif min_value >= -32768: + if max_value <= 32767: + underlying_data_type = self.UNDERLYING_DATA_TYPES[code_generator]['i16'] + + if underlying_data_type is None: + self.critical( + 'Unhandled enum size, name: %s, min: %s, max: %s. Valid types are uint8/16 and int8/16', + enum_name, + min_value, + max_value + ) + + return underlying_data_type + + def _get_default_enum_value_tmp(self, enum_name): + """Get default value of given enumeration name. + + Requires "enumDefDir" in the ProjectCfg.json file. + Files defining simulink class enumerations are expected to follow a template. + + TODO: Remove this function when there is a default enum value in every config_*.json file. + + Args: + enum_name (str): Name of an enumeration. + Returns: + default_value_str (str): Default value (string) for the given enumeration name. + None if value could not be extracted. + """ + if self._build_prj_cfg.get_enum_def_dir() is None: + self.warning( + 'Cannot extract default enumeration value for %s. Missing "enumDefDir" in ProjectCfg.json.', + enum_name + ) + return None + + enum_def_file = Path(self._build_prj_cfg.get_enum_def_dir(), f'{enum_name}.m') + if not enum_def_file.is_file(): + self.warning('Cannot extract default enumeration value. File not found: %s', str(enum_def_file)) + return None + + with enum_def_file.open(mode='r', encoding='ISO-8859-1') as fh: + enum_def_content = fh.read() + get_default_value = re.search( + r'function ([A-Za-z0-9]+) = getDefaultValue\(\)[\s\n]*' + r'\1 = [A-Za-z0-9]+\.([A-Za-z0-9]+);[\s\n]*' + r'end', + enum_def_content, + flags=re.MULTILINE + ) + if get_default_value is None: + self.warning('Cannot extract default enumeration values in: %s', str(enum_def_file)) + return None + + _unused, default_value = get_default_value.groups() + return f'{enum_name.upper()}_{default_value.upper()}' + + def get_default_enum_value(self, unit, enum_name): + """Get default value of given enumeration name by searching in the unit configuration. + + Args: + unit (str): Current unit/model name. + enum_name (str): Name of an enumeration. + Returns: + default_value_str (str): Default value (string) for the given enumeration name. + None if value could not be extracted. + """ + # The config file is generated in one go, stop when first occurrence is found, cannot differ + per_unit_cfg = self._unit_configs.get_per_unit_cfg() + if unit in per_unit_cfg: + u_cfg = per_unit_cfg[unit] + else: + # Should not happen + self.warning( + 'Cannot extract default enumeration value for %s in %s. Unit is missing in the unit configuration.', + enum_name, + unit + ) + return None + + for signal_type in ['inports', 'outports', 'local_vars', 'calib_consts']: + for signal_data in u_cfg[signal_type].values(): + if enum_name == signal_data['type'] and 'default' in signal_data: + return f"{enum_name.upper()}_{signal_data['default'].upper()}" + + self.warning( + 'Cannot extract default enumeration value for %s in %s. ' + 'Either the enumeration or its default value is missing in the unit configuration file. ' + 'Trying to parse simulink enumeration definition files.', + enum_name, + unit + ) + return self._get_default_enum_value_tmp(enum_name) + + def get_enumerations(self): + """Get all enumeration defined in the project, together with unit usage. + + Information already provided in self._validate_project_enumerations during initialization. + + Returns: + enumerations (dict): Enumerations defined in the projects, including unit usage. + """ + enumerations = {} + for unit, enum_names in self.enums_per_unit.items(): + for enum_name, enum_data in enum_names.items(): + if enum_name in enumerations: + enumerations[enum_name]['units'].append(unit) + else: + enumerations[enum_name] = deepcopy(enum_data) + enumerations[enum_name]['units'] = [unit] + return enumerations + + def get_interface_data_types(self): + """Returns all interface data types""" + return deepcopy(self._interface_data_types) + + def get_structs(self): + """Get all structs defined in the project, together with unit usage. + + Information already provided in self._validate_project_structs during initialization. + + Returns: + structs (dict): Structs defined in the projects, including unit usage. + """ + structs = {} + for unit, struct_names in self.structs_per_unit.items(): + for struct_name, struct_data in struct_names.items(): + if struct_name in structs: + structs[struct_name]['units'].append(unit) + else: + structs[struct_name] = deepcopy(struct_data) + structs[struct_name]['units'] = [unit] + return structs + + def _get_header_file_header(self, guard: str): + """Get header for common header files. + + Args: + guard (str): Guard for common header files. + Returns: + header (str): Header for common header files. + """ + return ( + f'#ifndef {guard}\n' + f'#define {guard}\n' + f'{self._unit_configs.base_types_headers}' + ) + + def _generate_struct_header_file(self, file_path: Path): + """ Generates a header file declaring all TargetLink structs used in the project. + + Args: + file_path (Path): Path to file to generate. + """ + structs = self.get_structs() + guard = f"{file_path.stem.upper()}_H" + with file_path.open('w') as fh: + fh.write(self._get_header_file_header(guard)) + fh.write('#include "VcEnumerations.h"\n') # struct members may be of enum type + fh.write('/* VCC Structs */\n') + for struct_name, struct_data in structs.items(): + fh.write('\n') + fh.write(f'struct {struct_name} {{\n') + for variable, data_type in struct_data['members'].items(): + fh.write(f" {data_type} {variable};\n") + fh.write('};\n') + fh.write(f'#endif /* {guard} */\n') + + def _generate_enum_header_file(self, file_path: Path): + """ Generates a header file declaring all TargetLink enumerations used in the project. + + Args: + file_path (Path): Path to file to generate. + """ + enumerations = self.get_enumerations() + guard = f"{file_path.stem.upper()}_H" + with file_path.open('w') as fh: + fh.write(self._get_header_file_header(guard)) + fh.write('/* VCC Enumerations */\n') + for enum_name, enum_data in enumerations.items(): + fh.write('\n') + fh.write(f'typedef enum {enum_name}_tag {{\n') + nr_of_enum_members = len(enum_data['members']) + for idx, enum_member_name in enumerate(enum_data['members']): + ending = ', ' if idx < nr_of_enum_members - 1 else ' ' + fh.write(f" {enum_member_name} = {enum_data['members'][enum_member_name]}{ending}\n") + fh.write(f'}} {enum_name};\n') + fh.write(f'#endif /* {guard} */\n') + + def generate_common_header_files(self): + """ Generates common header files. + + These headers can be included in general files such as VcDummy_spm.h or VcExtVar.h. + + Returns: + common_header_files (list(Path)): List of names of generated files. + """ + src_dir = self._build_prj_cfg.get_src_code_dst_dir() + enum_file_path = Path(src_dir, 'VcEnumerations.h') + struct_file_path = Path(src_dir, 'VcStructs.h') + self._generate_enum_header_file(enum_file_path) + self._generate_struct_header_file(struct_file_path) + self.common_header_files.extend([enum_file_path.name, struct_file_path.name]) diff --git a/pybuild/versioncheck.py b/pybuild/versioncheck.py new file mode 100644 index 0000000..a16c8fa --- /dev/null +++ b/pybuild/versioncheck.py @@ -0,0 +1,66 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Version compatibility check.""" + +import re + +from pybuild import __config_version__ + + +class Version: + """Class encapsulating version numbers.""" + + _RE = re.compile(r'^([0-9]+)\.([0-9]+)\.([0-9]+)$') + _app_version = (0, 0, 0) + + def __init__(self, version): + """Init.""" + if isinstance(version, float): + version = f'{version}.0' + elif isinstance(version, int): + version = f'{version}.0.0' + if isinstance(version, str): + match = Version._RE.match(version) + if match: + self._version = (int(match.group(1)), int(match.group(2)), int(match.group(3))) + else: + raise ValueError(f'Not a valid version string: {version}') + else: + raise ValueError(f'Not a valid version: {version}') + + def __len__(self): + """Get length of object.""" + return 3 + + def __getitem__(self, i): + """Get item with index i.""" + return self._version[i] + + @classmethod + def is_compatible(cls, version): + """Check version compatibility. + + Args: + version (str/int/float): The version to be compared with the version of pybuild. + + Returns: + bool: True/False based on version compatibility. + + Raises: + ValueError: If the provided version is not a valid version string, integer, or float. + """ + version_is_compatible = False + if version is not None: + version_cls = Version(version) + + check_major = cls._app_version[0] == version_cls[0] + check_minor = cls._app_version[1] >= version_cls[1] + check_patch = cls._app_version[2] >= version_cls[2] + + version_is_compatible = check_major and check_minor and check_patch + + return version_is_compatible + + +Version._app_version = Version(__config_version__) diff --git a/pybuild/wrapper.py b/pybuild/wrapper.py new file mode 100644 index 0000000..d18cd45 --- /dev/null +++ b/pybuild/wrapper.py @@ -0,0 +1,502 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Performs compatibility upgrade of models to PyBuild using Matlab.""" + +import argparse +import hashlib +import json +import os +import sys +from pathlib import Path +from re import search + +try: + from importlib.resources import files +except ImportError: + from importlib_resources import files +import shutil + +import git +from pybuild import build, pt_matlab +from pybuild.lib import logger, helper_functions + +LOGGER = logger.create_logger(__file__) + + +class PyBuildWrapper(pt_matlab.Matlab): + """Performs upgrade of Matlab models to PyBuild system.""" + + HASH_FILE_NAME = "pybuild_file_hashes.json" + + def __init__(self, args): + """Constructor, initializes paths for PyBuild upgrader. + + Args: + args (argument parser): see add_args static method. + """ + super().__init__(dry_run=args.dry_run, matlab_bin=args.matlab_bin, nojvm=False) + + self.root_path = helper_functions.get_repo_root() + self.repo = git.Repo(self.root_path) + + self.target_link_settings_hash_file_path = Path("ConfigDocuments", "target_link_settings_file_hashes.json") + self.target_link_settings_folders = [ + Path("ConfigDocuments", "targetlinkSettings"), + Path("ConfigDocuments", "TL4_3_settings"), + ] + + self.update = args.update + self.codegen = args.codegen + + self.build = args.build + self.build_specific = getattr(args, "project_config", None) is not None + self.project_config = self._set_project_configuration(args) + self.generate_system_info = getattr(args, "generate_system_info", False) + self.core_dummy = getattr(args, "core_dummy", True) + self.debug = getattr(args, "debug", True) + self.no_abort = getattr(args, "no_abort", True) + self.no_nvm_a2l = getattr(args, "no_nvm_a2l", False) + self.complete_a2l = getattr(args, "complete_a2l", False) + self.silver_a2l = getattr(args, "silver_a2l", False) + self.generate_rte_checkpoint_calls = getattr(args, "generate_rte_checkpoint_calls", False) + self.interface = args.interface + self.matlab_include = args.include + # Always default to conversion table in pytools/config/conversion_table.json. + # Unless otherwise specified. + conv_tab_path = getattr(args, "generate_custom_conv_tab", None) + default_conv_tab_path = os.path.join("ConfigDocuments", "pytools_settings", "conversion_table.json") + self.conv_tab = conv_tab_path if conv_tab_path is not None else default_conv_tab_path + + self.should_run, self.models = self._evaluate_run_and_models(args) + + @staticmethod + def _set_project_configuration(args): + """Evaluate path to project configuration file. + + Args: + args (argument parser): see add_args static method. + Returns: + project_config: Path to project configuration file. + """ + if getattr(args, "project_config", None) is not None: + project_config = args.project_config.replace("/", os.sep) + elif args.build is not None: + if args.build.lower() == "custom": + # TODO: Change other scripts to accept custom config + # Change this to point to a config file instead + project_config = os.path.join(os.environ.get("PROJECT_DIR"), "ProjectCfg.json") + else: + project_config = os.path.join("Projects", args.build, "ProjectCfg.json") + else: + project_config = None + + return project_config + + @staticmethod + def convert_path_sep(paths): + """Matlab requires forward-spaces for model paths. Convert backslashes. + + Args: + paths (list): Model paths to fix path separators for. + Returns: + (list): Models paths separated with forward slashes. + """ + return [path.replace("\\", "/") for path in paths] + + @staticmethod + def get_matlab_scripts_commit_sha(): + """Get current commit sha of matlab-scripts submodule, if available. + + Returns: + matlab_scripts_commit_sha (str): Commit sha of matlab-scripts submodule. + None, if not available. + """ + repo = git.Repo() + try: + matlab_scripts = repo.submodule("matlab-scripts") + matlab_scripts_commit_sha = matlab_scripts.hexsha + except ValueError: + LOGGER.info("Submodule matlab-scripts not available, " "skipping adding its commit sha to hash file.") + matlab_scripts_commit_sha = None + return matlab_scripts_commit_sha + + @staticmethod + def read_bytes(file_path): + """Read file contents in byte mode. + + Args: + file_path (Path): Path to file. + Returns: + file_bytes (bytes): Content of file read in binary mode. + """ + if file_path.suffix in [".slx", ".mdl", ".mexw64"]: + # Already treated as binary file + file_bytes = file_path.read_bytes() + else: + # Hack to make this script os independent + with file_path.open(encoding="iso-8859-1") as file_handle: + content = file_handle.read() + file_bytes = content.encode("iso-8859-1") + return file_bytes + + @staticmethod + def get_files_to_hash(model_folder): + """Get files to generate hashes for (PyBuild specific files). + + Args: + model_folder (Path): Path to model folder. + Returns: + files_to_hash (list): List of, pybuild specific, files to generate hashes for. + """ + valid_file_endings = [ + # source files + ".a2l", + ".c", + ".h", + ".mexw64", + ".tlc", + # config files + ".json", + # model files + ".mdl", + ".m", + ] + valid_folders = [ + model_folder, + Path(model_folder, "matlab_src"), + Path(model_folder, "pybuild_cfg"), + Path(model_folder, "pybuild_src"), + ] + hash_file_path = Path(model_folder, PyBuildWrapper.HASH_FILE_NAME) + + model_files = list(model_folder.rglob("*.*")) + if hash_file_path.exists(): + model_files.remove(hash_file_path) + files_to_hash = [f for f in model_files if f.parent in valid_folders and f.suffix in valid_file_endings] + return files_to_hash + + @staticmethod + def get_shared_function_files(): + """Get shared function files, files generated by VcSharedFunctions.mdl. + + Returns: + shared_function_files (list): List of files generated by VcSharedFunctions.mdl. + """ + shared_function_files = [] + common_source_folder = Path("Models/Common/pybuild_src") + for source_file in common_source_folder.glob("*.*"): + with source_file.open() as file_handle: + content = file_handle.read() + if search(r"Simulink model\s+: VcSharedFunctions", content) is not None: + shared_function_files.append(source_file) + return shared_function_files + + @staticmethod + def get_file_hashes(model_paths, write_to_file=True): + """Calculate SHA256 file hashes for files in given model folders. + + Args: + model_paths (list): List of model paths. + write_to_file (bool): True/False whether calculated hashes should be written to file. + Returns: + model_to_files_hash_dict (dict): Dict mapping model name to files and its hashes. + """ + model_to_files_hash_dict = {} + model_folders = [(Path(m).parent, Path(m).stem) for m in model_paths] + for model_folder, model_name in model_folders: + file_to_hash_dict = {} + files_to_hash = PyBuildWrapper.get_files_to_hash(model_folder) + if "VcSharedFunctions" in model_folder.as_posix(): + shared_function_files = PyBuildWrapper.get_shared_function_files() + files_to_hash.extend(shared_function_files) + for file_to_hash in files_to_hash: + file_bytes = PyBuildWrapper.read_bytes(file_to_hash) + file_to_hash_dict[file_to_hash.name] = hashlib.sha256(file_bytes).hexdigest() + commit_sha = PyBuildWrapper.get_matlab_scripts_commit_sha() + if commit_sha is not None: + file_to_hash_dict["matlab-scripts"] = commit_sha + if write_to_file: + with Path(model_folder, PyBuildWrapper.HASH_FILE_NAME).open("w", encoding="utf-8") as file_handle: + json.dump(file_to_hash_dict, file_handle, indent=4) + model_to_files_hash_dict[model_name] = file_to_hash_dict + return model_to_files_hash_dict + + def _evaluate_run_and_models(self, args): + """Evaluate if PyBuild Matlab related parts should run. + + Additionally, it sets which models to update and/or generate code for, based on arguments. + NOTE: model_list=None indicates all models when run is True. Deprecated, add force flag? + + Args: + args (argument parser): see add_args static method. + Returns: + should_run: True/False whether PyBuild should run or not. + model_list: List of models to update/generate code for. + """ + run_pybuild = args.build is not None or getattr(args, "project_config", None) is not None + should_run = args.update or args.codegen or run_pybuild + model_list = args.models if args.models else self.get_changed_models() + LOGGER.info("Affected models: %s", ", ".join(model_list)) + if not model_list: + # PyBuild should not run if there were no model changes + should_run = run_pybuild + model_list = None + + return should_run, model_list + + def regenerate_target_link_settings_file_hashes(self): + """Regenerate the file mapping TargetLink settings files to their hashes.""" + target_link_settings_file_hashes = self.calculate_target_link_settings_file_hashes() + with self.target_link_settings_hash_file_path.open("w", encoding="utf-8") as file_handle: + json.dump(target_link_settings_file_hashes, file_handle, indent=4) + + def calculate_target_link_settings_file_hashes(self): + """Calculate SHA256 file hashes for files in TargetLink settings folders. + + Returns: + file_to_hash_dict (dict): Dict mapping settings files and their hashes. + """ + file_to_hash_dict = {} + for settings_folder in self.target_link_settings_folders: + for settings_file in settings_folder.rglob("*.*"): + file_bytes = self.read_bytes(settings_file) + file_to_hash_dict[settings_file.name] = hashlib.sha256(file_bytes).hexdigest() + return file_to_hash_dict + + def verify_target_link_settings(self): + """Verify current TargetLink settings, comparing against commited file hashes file. + + Returns: + (bool): True/False, depending on if the TargetLink settings have changed. + """ + if not self.target_link_settings_hash_file_path.exists(): + message = ( + "Could not read TargetLink settings file hashes file: " + f"{self.target_link_settings_hash_file_path.as_posix()}.\n" + "If your repo runs the jobb PyBuildDiff in hash mode, make sure to generate one." + "Ignoring settings verification." + ) + LOGGER.warning(message) + return True + + with self.target_link_settings_hash_file_path.open(encoding="utf-8") as file_handle: + current_file_hashes_dict = json.load(file_handle) + + new_file_hashes_dict = self.calculate_target_link_settings_file_hashes() + + return new_file_hashes_dict == current_file_hashes_dict + + def get_changed_models(self): + """Get changed models in current commit.""" + changed_files_tmp = self.repo.git.diff("--diff-filter=d", "--name-only", "HEAD~1") + changed_files = changed_files_tmp.splitlines() + changed_models = [m for m in changed_files if m.endswith(".mdl") or m.endswith(".slx")] + return changed_models + + def check_generate_shared_functions(self, matlab_command_list): + """Check if shared function files should be generated. + + Args: + matlab_command_list ([str]): list of matlab commands. + """ + if [model for model in self.models if model.endswith("VcSharedFunctions.mdl")]: + matlab_command_list.append(pt_matlab.cmd_callfunc("generateSharedFunctions", True)) + + def build_automation(self, mode): + """Run Matlab with a specific task and specific models. + + Args: + mode (str): Matlab run mode (update, codegen). + Returns: + exit_code (int): Exit code from Matlab. + """ + # Will be used in submodule matlab-scripts (if up to date), CodeGen/updateCodeSwConfig.m + calling_python = sys.version_info + calling_python_string = f"py -{calling_python.major}.{calling_python.minor}" + os.environ.setdefault("CALLING_PYTHON", calling_python_string) + + # Specify a new script and log file name for each run + script_name = f"pybuild_matlab_{mode}.m" + self.log = f"pybuild_matlab_{mode}.log" + + # Set up matlab path + matlab_scripts_path = os.path.join("pybuild_matlab_scripts") + + # Copy matlab-scripts to the project root + matlab_script_folder = files("pybuild.matlab_scripts") + shutil.rmtree(matlab_scripts_path, ignore_errors=True) + shutil.copytree(matlab_script_folder, matlab_scripts_path) + + cmds = [] + cmds.append(f"cd '{self.root_path}'") + cmds.append(pt_matlab.cmd_path(matlab_scripts_path, True)) + cmds.append(pt_matlab.cmd_path(self.matlab_include, True)) + + if mode == "codegen": + cmds.append(pt_matlab.cmd_callfunc("loadLibraries", self.matlab_include)) + + # Generate the command for calling the main build script: + args = [mode, True] + if self.models: + self.check_generate_shared_functions(cmds) + args.append(self.convert_path_sep(self.models)) + + cmds.append(pt_matlab.cmd_callfunc("BuildAutomationPyBuild", *args)) + pt_matlab.write_m_script(script_name, pt_matlab.cmds_join(cmds), wrap_cmd=False) + + # Reset the Matlab watcher before running a new m-script + self.matlab_watcher.reset_errors() + + self.run_m_script(script_name, wrap_cmd=False, attempts=2) + + if not self.matlab_watcher.task_success: + LOGGER.error("PyBuild %s error!", mode) + return 1 + + if not self.verify_target_link_settings(): + LOGGER.error("Your TargetLink settings differ from the ones set by current branch.") + return 1 + + self.get_file_hashes(self.models) + return 0 + + def run_pybuild(self): + """Execute PyBuild. + + Returns: + exit_code: Exit code from PyBuild build step. + """ + try: + exit_code = build.build( + self.project_config, + interface=self.interface, + core_dummy=self.core_dummy, + no_abort=self.no_abort, + no_nvm_a2l=self.no_nvm_a2l, + debug=self.debug, + generate_system_info=self.generate_system_info, + generate_custom_conversion_table=self.conv_tab, + complete_a2l=self.complete_a2l, + silver_a2l=self.silver_a2l, + generate_rte_checkpoint_calls=self.generate_rte_checkpoint_calls, + ) + except (FileNotFoundError, PermissionError) as ex: + LOGGER.error(ex) + exit_code = 1 + return exit_code + + def run(self): + """Run PyBuild, update and/or generate code for selected models and/or build. + + Returns: + exit_code: Exit code from Matlab and build step. + """ + if not self.should_run: + return 0 + + LOGGER.info("Preparing workspace for PyBuild!") + + exit_code = 0 + if self.update: + LOGGER.info("Running PyBuild update!") + exit_code |= self.build_automation(mode="update") + + if self.codegen: + LOGGER.info("Running PyBuild generate code!") + + exit_code |= self.build_automation(mode="codegen") + + if self.build: + LOGGER.info("Running PyBuild.build for %s!", self.build) + exit_code |= self.run_pybuild() + + if self.build_specific: + LOGGER.info("Running PyBuild specific build for %s!", self.project_config) + exit_code |= self.run_pybuild() + + return exit_code + + @staticmethod + def add_args(parser): + """Add expected arguments to the supplied parser. + + Args: + parser (ArgumentParser): parser to add arguments to. + """ + parser.add_argument( + "--dry-run", + action="store_true", + help="Dry run: No changes, simulation only (default: False).", + ) + parser.add_argument("--repo-root", help="Path to repository where work should be done") + parser.add_argument( + "--interface", + action="store_true", + help="Create interface consistency report (default: False)" "NOTE: This requires the --build flag.", + ) + parser.add_argument( + "--models", + nargs="+", + default=None, + help="List of model files (full path, " + "e.g. Models///) to upgrade, separated with " + "spaces. Takes precedence over Git HEAD.", + ) + parser.add_argument( + "--update", + action="store_true", + help="Run PyBuild update on models (default: False).", + ) + parser.add_argument( + "--codegen", + action="store_true", + help="Run PyBuild code generation on models (default: False). " + "NOTE: This requires either the --update flag or already updated models.", + ) + parser.add_argument( + "--build", + default=None, + help="Run PyBuild for project with standard settings, VCC SPM SW release " "(default: None).", + ) + parser.add_argument( + "--regenerate-tl-settings-hashes", + action="store_true", + help="Regenerate the file mapping TargetLink settings files to their hashes.", + ) + parser.add_argument( + "--include", + default="matlab-scripts", + help="Path to folder containing Matlab scripts and simulink libraries to include.", + ) + pybuild_parsers = parser.add_subparsers(help="PyBuild specific build.") + build_specific_parser = pybuild_parsers.add_parser( + "build-specific", help="Run PyBuild for project with specific settings." + ) + build.add_args(build_specific_parser) + + # Matlab arguments added by parent: + pt_matlab.Matlab.add_args(parser) + + +def main(): + """Run main function.""" + parser = argparse.ArgumentParser("PyBuild Wrapper") + PyBuildWrapper.add_args(parser) + args = parser.parse_args() + + if args.build is not None and getattr(args, "project_config", None) is not None: + LOGGER.error("Cannot run both PyBuild quick build (--build ) " "and specific build (build-specific).") + return 1 + + wrapper = PyBuildWrapper(args) + + if args.regenerate_tl_settings_hashes: + wrapper.regenerate_target_link_settings_file_hashes() + return 0 + + return wrapper.run() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pybuild/xlrd_csv.py b/pybuild/xlrd_csv.py new file mode 100644 index 0000000..21c63a6 --- /dev/null +++ b/pybuild/xlrd_csv.py @@ -0,0 +1,87 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for providing an xlrd interface for csv files. + +TODO: Handle sheet names in a better way! +""" + +import csv +import os +import re + + +class WorkBook: + """Emulate xlrd of csv files.""" + + def __init__(self, csv_files): + """Init.""" + self._worksheets = {} + self._read_csv_files_to_worksheets(csv_files) + + def _read_csv_files_to_worksheets(self, csv_files): + """Read CSV-files, and store them as worksheets.""" + csv_files = [csv_files] if isinstance(csv_files, str) else csv_files + if len(csv_files) > 1: + for file_ in csv_files: + sheet_name = re.match(r'.*?\w*_([\w\$]+)\.\w+', file_).group(1) + self._worksheets[sheet_name] = WorkSheet(sheet_name, file_) + else: + _, sheet_name = os.path.split(csv_files[0]) + self._worksheets[sheet_name] = WorkSheet(sheet_name, csv_files[0]) + + def sheet_by_name(self, name): + """Get a worksheet name from a workbook class.""" + return self._worksheets[name] + + def single_sheet(self): + """Get single worksheet if only one file was read.""" + return next(iter(self._worksheets.values())) if len(self._worksheets) == 1 else None + + +class WorkSheet: + """Emulate xlrd for csv files.""" + + def __init__(self, sheet_name, file_name): + """Init.""" + self._sheet_name = sheet_name + self._read_work_sheet(file_name) + + def _read_work_sheet(self, file_name): + """Read csv-file as a worksheet.""" + with open(file_name, 'r', encoding="ISO-8859-1") as csvfile: + reader = csv.reader(csvfile, delimiter=';') + self._rows = [[Data(elem) for elem in row] for row in reader] + self._nrows = len(self._rows) + + @property + def nrows(self): + """Get number of rows in a worksheet.""" + return self._nrows + + def row(self, row): + """Get row from sheet.""" + return self._rows[row] + + +class Data: + """Class for wrapping data in a worksheet.""" + + def __init__(self, value): + """Init.""" + # TODO: Investigate quoting string values when exporting to CSV + if re.fullmatch('[+-]?[0-9]+', value): + self._value = int(value) + elif re.fullmatch('[+-]?[0-9.]+', value): + self._value = float(value) + else: + self._value = value + + def __repr__(self): + """Get representation of object.""" + return self._value + + @property + def value(self): + """Provide the value of the data object.""" + return self._value diff --git a/pybuild/zone_controller/__init__.py b/pybuild/zone_controller/__init__.py new file mode 100644 index 0000000..f5a9e61 --- /dev/null +++ b/pybuild/zone_controller/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""pybuild.zone_controller.""" diff --git a/pybuild/zone_controller/calibration.py b/pybuild/zone_controller/calibration.py new file mode 100644 index 0000000..422db56 --- /dev/null +++ b/pybuild/zone_controller/calibration.py @@ -0,0 +1,157 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for handling ZoneController calibration.""" + +from pathlib import Path +from pybuild.problem_logger import ProblemLogger + + +class ZoneControllerCalibration(ProblemLogger): + """Class for handling ZoneController calibration.""" + + calibration_function_step_template = '{swc_name}_ZcCalibrationStep' + trigger_read_rte_cdata_signal = { + 'name_template': 'c{swc_name}_TriggerReadRteCData', + 'data_type': 'Float32' + } + + def __init__(self, build_cfg, calib_data): + """Init. + + Args: + build_cfg (BuildProjConfig): Object with build configuration settings. + calib_data (dict): Dictionary containing calibration data for a ZoneController project. + """ + self.swc_name = build_cfg.get_swc_name() + self.src_code_dst_dir = build_cfg.get_src_code_dst_dir() + self.calibration_variables = calib_data['class_info'] + self.calibration_interface_header = 'calibration_interface.h' + self.calibration_interface_source = 'calibration_interface.c' + self.trigger_read_rte_cdata_signal_name = self.trigger_read_rte_cdata_signal['name_template'].format( + swc_name=self.swc_name + ) + if self.trigger_read_rte_cdata_signal_name in self.calibration_variables: + self.critical(f'Signal {self.trigger_read_rte_cdata_signal_name} already defined in project.') + self.calibration_variables.update({ + self.trigger_read_rte_cdata_signal_name: { + "type": self.trigger_read_rte_cdata_signal['data_type'], + "width": 1, + } + }) + + def _get_header_guard(self): + header_guard_tmp = Path(self.calibration_interface_header).stem + return header_guard_tmp.upper() + '_H' + + def get_header_file_content(self): + """Get content for the calibration header file. + + Returns: + (list(str)): List of lines to write to calibration header file. + """ + lines_to_write = [] + header = [ + f'#ifndef {self._get_header_guard()}\n', + f'#define {self._get_header_guard()}\n', + '#define CVC_CAL\n', + '#include \n', + '#include "tl_basetypes.h"\n', + f'#include "Rte_{self.swc_name}.h"\n', + '\n' + ] + footer = [ + '\n', + f'#endif /* {self._get_header_guard()} */\n' + ] + + lines_to_write.extend([ + f'#define {self.swc_name}_START_SEC_VCC_CAL\n', + f'#include "{self.swc_name}_MemMap.h"\n' + ]) + for signal_name, signal_data in self.calibration_variables.items(): + if isinstance(signal_data["width"], list): + rows, cols = signal_data["width"] + if rows > 1: + declaration = f'extern CVC_CAL {signal_data["type"]} {signal_name}[{rows}][{cols}];\n' + else: + declaration = f'extern CVC_CAL {signal_data["type"]} {signal_name}[{cols}];\n' + else: + declaration = f'extern CVC_CAL {signal_data["type"]} {signal_name};\n' + lines_to_write.append(declaration) + lines_to_write.extend([ + f'#define {self.swc_name}_STOP_SEC_VCC_CAL\n', + f'#include "{self.swc_name}_MemMap.h"\n' + ]) + + lines_to_write.append('\n') + for signal_name, signal_data in self.calibration_variables.items(): + if isinstance(signal_data["width"], list): + # MAPs get typedef:ed to structs and need special data type mapping in calibration.py + if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]: + return_type = f'const {signal_data["autosar_type"]}*' + else: + return_type = f'const {signal_data["type"]}*' + else: + return_type = f'{signal_data["type"]}' + lines_to_write.append(f'extern {return_type} Rte_CData_{self.swc_name}_{signal_name}(void);\n') + + lines_to_write.extend([ + '\n', + f'void {self.calibration_function_step_template.format(swc_name=self.swc_name)}(void);\n' + ]) + + return header + lines_to_write + footer + + def get_source_file_content(self): + """Get content for the calibration source file. + + Returns: + (list(str)): List of lines to write to calibration source file. + """ + trigger_read_calibration_function = f'Rte_CData_{self.swc_name}_{self.trigger_read_rte_cdata_signal_name}()' + + header = [ + f'#include "{self.calibration_interface_header}"\n', + '\n', + f'#define {self.swc_name}_START_SEC_VCC_CAL\n', + f'#include "{self.swc_name}_MemMap.h"\n', + f'CVC_CAL {self.trigger_read_rte_cdata_signal["data_type"]} ' + f'{self.trigger_read_rte_cdata_signal_name} = 0;\n', + f'#define {self.swc_name}_STOP_SEC_VCC_CAL\n', + f'#include "{self.swc_name}_MemMap.h"\n', + '\n', + f'#define {self.swc_name}_START_SEC_CODE\n', + f'#include "{self.swc_name}_MemMap.h"\n', + f'void {self.calibration_function_step_template.format(swc_name=self.swc_name)}(void)\n{{\n' + ] + + body = [f' if ({self.trigger_read_rte_cdata_signal_name} != {trigger_read_calibration_function})\n'] + body.append(' {\n') + for signal_name, signal_data in self.calibration_variables.items(): + if isinstance(signal_data["width"], list): + rte_call = f'Rte_CData_{self.swc_name}_{signal_name}()' + body.append(f' memcpy({rte_call}, &{signal_name}, sizeof({signal_data["type"]}));\n') + else: + body.append(f' {signal_name} = Rte_CData_{self.swc_name}_{signal_name}();\n') + body.append(' }\n') + + footer = [ + '}\n', + f'#define {self.swc_name}_STOP_SEC_CODE\n', + f'#include "{self.swc_name}_MemMap.h"\n' + ] + + return header + body + footer + + def generate_calibration_interface_files(self): + """Generate calibration interface files.""" + header_file_content = self.get_header_file_content() + calibration_interface_header_path = Path(self.src_code_dst_dir, self.calibration_interface_header) + with calibration_interface_header_path.open(mode='w', encoding='utf-8') as file_handler: + file_handler.writelines(header_file_content) + + source_file_content = self.get_source_file_content() + calibration_interface_source_path = Path(self.src_code_dst_dir, self.calibration_interface_source) + with calibration_interface_source_path.open(mode='w', encoding='utf-8') as file_handler: + file_handler.writelines(source_file_content) diff --git a/pybuild/zone_controller/composition_yaml.py b/pybuild/zone_controller/composition_yaml.py new file mode 100644 index 0000000..4ea2bef --- /dev/null +++ b/pybuild/zone_controller/composition_yaml.py @@ -0,0 +1,575 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for handling ZoneController composition yaml generation.""" + +import re +from pathlib import Path +from ruamel.yaml import YAML + +from pybuild.problem_logger import ProblemLogger +from pybuild.types import a2l_range +from pybuild.zone_controller.calibration import ZoneControllerCalibration as ZCC + + +class CompositionYaml(ProblemLogger): + """Class for handling ZoneController composition yaml generation.""" + + def __init__(self, build_cfg, composition_spec, unit_cfg, a2l_axis_data): + """Init. + + Args: + build_cfg (BuildProjConfig): Object with build configuration settings. + composition_spec (dict): Dict with port interface information. + unit_cfg (UnitConfig): Object with unit configurations. + a2l_axis_data (dict): Dict with characteristic axis data from A2L file. + """ + self.tl_to_autosar_base_types = { + "Bool": "boolean", + "Float32": "float32", + "Int16": "sint16", + "Int32": "sint32", + "Int8": "sint8", + "UInt16": "uint16", + "UInt32": "uint32", + "UInt8": "uint8", + } + self.build_cfg = build_cfg + self.unit_src_dirs = build_cfg.get_unit_src_dirs() + self.composition_spec = composition_spec + self.unit_cfg = unit_cfg + self.a2l_axis_data = a2l_axis_data + base_data_types = self.get_base_data_types() # Might not be necessary in the long run + self.data_types = { + **base_data_types, + **self.composition_spec.get("data_types", {}), + } + self.port_interfaces = self.composition_spec.get("port_interfaces", {}) + calibration_variables, measurable_variables = self._get_variables() + self.calibration_init_values = self.get_init_values(calibration_variables) + self.cal_class_info = self._get_class_info(calibration_variables) + self.meas_class_info = self._get_class_info(measurable_variables) + trigger_read_rte_cdata_signal_name = self._get_calibration_trigger_signal_name(calibration_variables) + self.cal_class_info["autosar"]["class_info"].update( + { + trigger_read_rte_cdata_signal_name: { + "type": ZCC.trigger_read_rte_cdata_signal['data_type'], + "access": "READ-WRITE", + "init": 0, + } + } + ) + + @staticmethod + def _cast_init_value(value_str): + """Cast initialization value to correct type. + + Args: + value_str (str): String representation of the value. + Returns: + (int/float): Value casted to correct type. + """ + if value_str.endswith('F'): + return float(value_str[:-1]) + return int(value_str) + + def get_base_data_types(self): + """Create base data types in expected Autosar/yaml2arxml format.""" + base_data_types = { + "Bool": {"type": "ENUMERATION", "enums": {"False": 0, "True": 1}}, + "Float32": { + "type": "FLOAT", + "limits": {"lower": -3.4e38, "upper": 3.4e38}, + }, + } + int_data_types = [data_type for data_type in self.tl_to_autosar_base_types if "Int" in data_type] + for data_type in int_data_types: + lower, upper = a2l_range(data_type) + base_data_types[data_type] = { + "type": "INTEGER", + "limits": {"lower": lower, "upper": upper}, + } + return base_data_types + + def check_unsupported_fields(self, signal_name, signal_data): + """Warn about signal data containing unsupported field values. + + Unsupported fields will not be propagated to the ARXML. + If any signal contains non-default data, PyBuild should fail. + + Args: + signal_name (string): Name of signal to process. + signal_data (dict): signal data. + """ + unsupported_fields = {"lsb": 1, "offset": 0} + for field, default_value in unsupported_fields.items(): + if signal_data[field] != "-" and signal_data[field] != default_value: + self.warning( + "Unsupported configuration: %s -> %s, for signal %s.", + field, + signal_data[field], + signal_name, + ) + + def generate_yaml(self): + """Generates a yaml from project/model information.""" + composition_name = self.build_cfg.get_composition_name() + composition_ending = self.build_cfg.get_composition_ending() + all_info = self.gather_yaml_info() + + output_directory = self.build_cfg.get_src_code_dst_dir() + self.info( + "Writing Yaml into %s/%s.%s", + output_directory, + composition_name, + composition_ending, + ) + Path(output_directory).mkdir(parents=True, exist_ok=True) + + with open( + f"{output_directory}/{composition_name}.{composition_ending}", + "w", + encoding="utf-8", + ) as file: + yaml = YAML() + + def modify_float_representation(s): + return re.sub(r"(\s-?\d+)e(?=\+|-\d)", r"\1.e", s) + + yaml.dump(all_info, file, transform=modify_float_representation) + + def gather_yaml_info(self): + """Creates dict with relevant project/model information. + + Returns: + all_info (dict): Dict to be written to yaml. + """ + software_components, pybuild_data_types = self._get_software_components() + + all_info = { + "ExternalFiles": { + "Composition": self.build_cfg.get_composition_arxml(), + "GenerateExternalImplementationTypes": self.build_cfg.get_gen_ext_impl_type(), + }, + "SoftwareComponents": software_components, + "DataTypes": {**self.data_types, **pybuild_data_types}, + "PortInterfaces": self.port_interfaces, + } + + return all_info + + def get_init_values(self, calibration_variables): + """Get initialization values for calibration variables. + + Args: + calibration_variables (dict): Dict of existing calibration variables. + Returns: + init_values (dict): Dictionary with initialization values for calibration variables. + """ + value_extraction_regexes = [ + ( + re.compile(r'^\s*CVC_CAL[A-Z_]*\s+\w+\s+(?P\w+)\s*=\s*(?P[-\d\.e]+F?)\s*;'), + lambda regex_match, _: self._cast_init_value(regex_match.group('value')) + ), + ( + re.compile(r'^\s*CVC_CAL[A-Z_]*\s+\w+\s+(?P\w+)\[(?P[\d]+)\]\s*=\s*'), + self._get_array_init_values + ), + ( + re.compile( + r'^\s*CVC_CAL[A-Z_]*\s+\w+\s+(?P\w+)\[(?P[\d]+)\]\[(?P[\d]+)\]\s*=\s*' + ), + self._get_matrix_init_values + ) + ] + + init_values = {} + calibration_definitions = self._get_all_calibration_definitions() + calibration_definitions.reverse() # Reverse to pop from the end for performance + while calibration_definitions: + line = calibration_definitions.pop() + for regex, extraction_function in value_extraction_regexes: + regex_match = regex.match(line) + if regex_match is not None and regex_match.group('name') in calibration_variables: + if regex_match.group('name') in init_values: + self.critical('Variable definition for %s already found.', regex_match.group("name")) + init_values[regex_match.group('name')] = extraction_function(regex_match, calibration_definitions) + + missing_init_values = set(calibration_variables) - set(init_values.keys()) + if missing_init_values: + self.critical('Missing init values for calibration variables:\n%s', '\n'.join(missing_init_values)) + + return init_values + + def _get_all_calibration_definitions(self): + """Get all calibration definitions from the source files. + + Returns: + (iter): Iterator with calibration definitions. + """ + calibration_definitions = [] + end_of_definitions_regex = re.compile(r'^void\s*RESTART_.*') + c_files = [Path(src_dir, unit.split("__")[0] + ".c").resolve() for unit, src_dir in self.unit_src_dirs.items()] + for c_file in c_files: + read_lines = '' + with c_file.open(mode='r', encoding='latin-1') as file_handle: + for line in file_handle: + if end_of_definitions_regex.match(line): + break + read_lines += line + calibration_definitions.extend(re.sub(r'/\*.*?\*/', '', read_lines, flags=re.S).splitlines()) + return calibration_definitions + + def _get_array_init_values(self, array_regex_match, definitions_list): + """Get initialization values for an array. + + NOTES: + Modifies the argument definitions_list by popping elements. + Popping from the end since list is reversed. + + Args: + array_regex_match (re.Match): Match object with array definition. + definitions_list (list): List (reversed) with lines to parse. + Returns: + (list): List of initialization values for the array. + """ + array_init_values_str = '' + line = definitions_list.pop() # Skip array definition line + while '};' not in line: + array_init_values_str += line.strip() + line = definitions_list.pop() + array_init_values_str += line.strip() + array_init_values = re.findall(r'([-\d\.e]+F?),?', array_init_values_str) + + if int(array_regex_match.group('size')) != len(array_init_values): + self.critical('Could not parse init values for array definition %s.', array_regex_match.group("name")) + + return [self._cast_init_value(value) for value in array_init_values] + + def _get_matrix_init_values(self, matrix_regex_match, definitions_list): + """Get initialization values for a matrix. + + NOTES: + Modifies the argument definitions_list by popping elements. + Popping from the end since list is reversed. + + Args: + matrix_regex_match (re.Match): Match object with matrix definition. + definitions_list (list): List (reversed) with lines to parse. + Returns: + (list(list)): List of initialization values for the matrix. + """ + matrix_init_values = [] + matrix_init_values_str = '' + line = definitions_list.pop() # Skip matrix definition line + while '};' not in line: + matrix_init_values_str += line.strip() + if '}' in line: + matrix_init_values.append(re.findall(r'([-\d\.e]+F?),?', matrix_init_values_str)) + matrix_init_values_str = '' + line = definitions_list.pop() + + row_check = int(matrix_regex_match.group('rows')) != len(matrix_init_values) + col_check = any(int(matrix_regex_match.group('cols')) != len(row) for row in matrix_init_values) + if row_check or col_check: + self.critical('Could not parse init values for matrix definition %s.', matrix_regex_match.group("name")) + + return [[self._cast_init_value(value) for value in row] for row in matrix_init_values] + + def _get_calibration_trigger_signal_name(self, calibration_variables): + """Get the variable of the calibration trigger. + + Make sure it is not present already. + + Args: + calibration_variables (dict): Dict of existing calibration variables. + Returns: + trigger_signal (str): Name of variable for triggering calibration. + """ + software_component_name = self.build_cfg.get_swc_name() + trigger_signal = ZCC.trigger_read_rte_cdata_signal["name_template"].format(swc_name=software_component_name) + + if trigger_signal in calibration_variables: + self.critical("Signal %s already defined in project.", trigger_signal) + + return trigger_signal + + def _get_ports_info(self): + """Creates a dict containing port information. + + Returns: + ports (dict): Dict containing port information. + """ + ports = self.composition_spec.get("ports", {}) + for call, call_data in self.composition_spec.get("calls", {}).items(): + if call in ports: + continue + ports[call] = { + "interface": call_data.get("interface", call), + "direction": call_data["direction"], + } + return ports + + def _get_runnable_calls_info(self): + """Creates a dict containing desired calls for the SWC. + + Returns: + call_dict(dict): Dict containing runnable calls information. + """ + call_dict = {} + for call, call_data in self.composition_spec.get("calls", {}).items(): + call_dict[call] = {"operation": call_data["operation"]} + if "timeout" in call_data: + call_dict[call]["timeout"] = call_data["timeout"] + return call_dict + + def _get_runnable_info(self): + """Creates a dict containing runnables information. + + Returns: + dict: Dict containing runnables information. + """ + swc_content = {} + swc_name = self.build_cfg.get_swc_name() + autosar_prefix = "AR_" + swc_prefix = self.build_cfg.get_scheduler_prefix() + init_function = autosar_prefix + swc_prefix + "VcExtINI" + calibration_variables = list(self.cal_class_info["autosar"]["class_info"].keys()) + calibration_step_function = autosar_prefix + ZCC.calibration_function_step_template.format(swc_name=swc_name) + + swc_content.update( + { + calibration_step_function: { + "type": "PERIODIC", + "period": 0.1, + "accesses": calibration_variables, + }, + init_function: {"type": "INIT", "accesses": calibration_variables}, + } + ) + + call_dict = self._get_runnable_calls_info() + runnables = self.build_cfg.get_units_raster_cfg()["SampleTimes"] + for runnable, period in runnables.items(): + key = autosar_prefix + swc_prefix + runnable + swc_content[key] = { + "period": period, + "type": "PERIODIC", + "accesses": calibration_variables, + } + if call_dict: + swc_content[key]["calls"] = call_dict + + return swc_content + + def _get_software_components(self): + """Creates a dict with swc information and referred data types. + + Returns: + swcs (dict): SWC information. + data_types (dict): Data types information. + """ + software_component_name = self.build_cfg.get_swc_name() + data_types = { + **self.cal_class_info["autosar"]["data_types"], + **self.meas_class_info["autosar"]["data_types"], + } + swcs = { + software_component_name: { + "type": "SWC", # Other types than swc?? + "template": "ARTCSC", + "runnables": {}, + }, + } + swcs[software_component_name]["runnables"] = self._get_runnable_info() + swcs[software_component_name]["shared"] = self.cal_class_info["autosar"]["class_info"] + swcs[software_component_name]["static"] = self.meas_class_info["autosar"]["class_info"] + swcs[software_component_name]["ports"] = self._get_ports_info() + return swcs, data_types + + def _get_variables(self): + """Get calibration and measurable variables from the unit configuration. + + Returns: + calibration_variables (dict): Dict with calibration variables. + measurable_variables (dict): Dict with measurable variables. + """ + calibration_variables = {} + measurable_variables = {} + config = self.unit_cfg.get_per_cfg_unit_cfg() + valid_configs = ["outports", "local_vars", "calib_consts"] + for valid_config in valid_configs: + for signal_name, unit_info in config.get(valid_config, {}).items(): + if len(unit_info) > 1: + self.critical("Multiple definitions for %s in config json files.", signal_name) + for info in unit_info.values(): + if "CVC_CAL" in info["class"]: + calibration_variables[signal_name] = info + elif "CVC_DISP" in info["class"]: + measurable_variables[signal_name] = info + else: + self.critical("Signal %s has no class defined.", signal_name) + continue + self.check_unsupported_fields(signal_name, info) + return calibration_variables, measurable_variables + + def _get_class_info(self, variable_dict): + """Creates a dict with parameter information and referred data types. + + Args: + variable_dict (dict): Dictionary with variables and data. + Returns: + (dict): Dictionary with variables and data types (Autosar and TL). + """ + autosar_class_info = {} + autosar_data_types = {} + tl_class_info = {} + for signal_name, info in variable_dict.items(): + ( + autosar_class_info, + autosar_data_types, + ) = self._add_autosar_data_types(autosar_class_info, autosar_data_types, signal_name, info) + if signal_name in autosar_class_info: + tl_class_info[signal_name] = { + "type": info["type"], + "autosar_type": autosar_class_info[signal_name]["type"].split("/")[-1], + "width": info["width"], + } + return { + "autosar": { + "class_info": autosar_class_info, + "data_types": autosar_data_types, + }, + "tl": {"class_info": tl_class_info, "data_types": {}}, + } + + def _add_autosar_data_types(self, class_info, data_types, signal_name, info): + """Process a variable for inclusion in composition, adding it's data type to + data_types and the variable to class_info. + + Args: + class_info (dict): Dictionary with variables. + data_types (dict): Dictionary with data types. + signal_name (string): Name of signal to process. + info (dict): signal data. + Returns: + class_info (dict): Updated dictionary with variables. + data_types (dict): Updated dictionary with data types. + """ + if "Bool" in info["type"]: + upper = 1 + lower = 0 + else: + base_type_lower = self.data_types[info['type']]["limits"]["lower"] + base_type_upper = self.data_types[info['type']]["limits"]["upper"] + lower = info["min"] if info["min"] != "-" else base_type_lower + upper = info["max"] if info["max"] != "-" else base_type_upper + if not isinstance(info["width"], list): + class_info[signal_name] = { + "type": info['type'], + "access": "READ-ONLY" if info["class"] == "CVC_DISP" else "READ-WRITE", + "init": self.calibration_init_values.get(signal_name, max(min(0, upper), lower)), + } + return class_info, data_types + + if isinstance(lower, list) or isinstance(upper, list): + if info["width"][0] > 1: + self.critical( + "%s is a multidimentional array of elements with different constraints, not supported.", signal_name + ) + init = [] + for idx in range(info["width"][1]): + lower_val = lower[idx] if isinstance(lower, list) else lower + lower_val = lower_val if lower_val != "-" else base_type_lower + upper_val = upper[idx] if isinstance(upper, list) else upper + upper_val = upper_val if upper_val != "-" else base_type_upper + init.append(max(min(0, upper_val), lower_val)) + else: + init = max(min(0, upper), lower) + if info["width"][0] > 1: + init = [[init] * info["width"][1] for _ in range(info["width"][0])] + else: + init = [init] * info["width"][1] + + init = self.calibration_init_values.get(signal_name, init) + + new_data_type = {} + new_data_type_name = f"dt_{signal_name}" + if signal_name.startswith("t"): + if signal_name.endswith("_x"): + new_data_type_data = { + "type": "COM_AXIS", + "axis-index": 1, + "size": info["width"][1], + "limits": {"lower": lower, "upper": upper}, + "swrecordlayout": { + "name": f"Distr_{signal_name}", + "type": "INDEX_INCR", + "basetype": self.tl_to_autosar_base_types[info["type"]], + "label": "X", + }, + } + else: + axis = self.a2l_axis_data.get(signal_name, {}).get("axes", [signal_name + "_x"])[0] + new_data_type_data = { + "type": "CURVE", + "axis": f"dt_{axis}", + "limits": {"lower": lower, "upper": upper}, + "swrecordlayout": { + "name": f"Curve_{signal_name}", + "type": "COLUMN_DIR", + "basetype": self.tl_to_autosar_base_types[info["type"]], + "label": "Val", + }, + } + elif signal_name.startswith("m"): + new_data_type_data = { + "type": "COM_AXIS", + "size": info["width"][1], + "limits": {"lower": lower, "upper": upper}, + "swrecordlayout": { + "name": f"Distr_{signal_name}", + "type": "INDEX_INCR", + "basetype": self.tl_to_autosar_base_types[info["type"]], + }, + } + if signal_name.endswith("_r"): + new_data_type_data["axis-index"] = 1 + new_data_type_data["swrecordlayout"]["label"] = "X" + elif signal_name.endswith("_c"): + new_data_type_data["axis-index"] = 2 + new_data_type_data["swrecordlayout"]["label"] = "Y" + else: + default_names = [signal_name + "_r", signal_name + "_c"] + axis_r, axis_c = self.a2l_axis_data.get(signal_name, {}).get("axes", default_names) + new_data_type_data = { + "type": "MAP", + "x-axis": f"dt_{axis_r}", + "y-axis": f"dt_{axis_c}", + "limits": {"lower": lower, "upper": upper}, + "swrecordlayout": { + "name": f"Map_{signal_name}", + "type": "COLUMN_DIR", + "basetype": self.tl_to_autosar_base_types[info["type"]], + "label": "Val", + }, + } + elif info["width"][0] == 1: + new_data_type_name = f"dt_{signal_name}_{info['width'][1]}" + new_data_type_data = { + "type": "ARRAY", + "size": info["width"][1], + "element": info['type'], + } + else: + self.critical("Signal config error for %s.", signal_name) + return class_info, data_types + + new_data_type[new_data_type_name] = new_data_type_data + class_info[signal_name] = { + "type": new_data_type_name, + "access": "READ-ONLY" if info["class"] == "CVC_DISP" else "READ-WRITE", + "init": init, + } + data_types = {**data_types, **new_data_type} + return class_info, data_types diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..619c24a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +gitpython >= 3.1.8 +pbr >= 5.5.0 +ruamel.yaml.clib == 0.2.7; python_version == "3.6" +ruamel.yaml == 0.17.21; python_version == "3.6" +ruamel.yaml == 0.18.6; python_version > "3.6" +voluptuous >= 0.14.0; python_version >= "3.7" +voluptuous >= 0.11.7,<0.14.0; python_version < "3.7" +scipy==1.5.4; python_version < "3.8" +scipy==1.9.1; python_version >= "3.8" +importlib-resources==5.4.0; python_version < "3.9" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..f77bb06 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,33 @@ +[metadata] +name = pt-pybuild +author = Henrik Wahlqvist +author-email = henrik.wahlqvist@volvocars.com +summary = A Continuous Integration (CI) build system testing all configurations where a TargetLink model is used. +description-file = README.md +description-content-type = text/x-rst; charset=UTF-8 +license = Apache License, Version 2.0 +classifier = + Development Status :: 5 - Production/Stable + Environment :: Console + Intended Audience :: Developers + License :: Other/Proprietary License + Natural Language :: English + Operating System :: OS Independent + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.10 + Topic :: Software Development :: Build Tools + Topic :: Software Development :: Code Generators + Topic :: Software Development :: Embedded Systems + +[options] +include_package_data = True + +[files] +packages = + pybuild + pybuild.interface + pybuild.lib + pybuild.zone_controller + +[pbr] +skip_git_sdist = 1 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..097b23f --- /dev/null +++ b/setup.py @@ -0,0 +1,14 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Create a python package for pybuild.""" + +from setuptools import setup, find_packages + +setup( + setup_requires=['pbr>=5.5.0'], + pbr=True, + python_requires='>=3.6, <3.11', + include_package_data=True, + +) diff --git a/test-requirements.txt b/test-requirements.txt index d34f985..35a31f7 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,2 +1,5 @@ pytest flake8 +gitpython >= 3.1.8 +ruamel.yaml == 0.17.21; python_version == "3.6" +ruamel.yaml == 0.18.6; python_version > "3.6" diff --git a/test_data/interface/test_generate_hi_interface/expected_result.json b/test_data/interface/test_generate_hi_interface/expected_result.json new file mode 100644 index 0000000..37ee6b6 --- /dev/null +++ b/test_data/interface/test_generate_hi_interface/expected_result.json @@ -0,0 +1,51 @@ +{ + "read": { + "signal_groups": { + "DomainOne": { + "GroupOne": { + "GroupOne": { + "data": { + "PropertyOne": "sVcDummy_D_One", + "PropertyTwo": "sVcDummy_D_Two" + } + } + }, + "PortOne": { + "GroupTwo": { + "data": { + "PropertyThree": "sVcDummy_D_Three", + "PropertyFour": "sVcDummy_D_Four" + } + } + } + } + }, + "signals": { + "DomainTwo": { + "PropertyFive": { + "data": { + "PropertyFive": "sVcDummy_D_Five" + } + } + }, + "DomainThree": { + "PortTwo": { + "data": { + "PropertySix": "sVcDummy_D_Six" + } + } + } + } + }, + "write": { + "signals": { + "DomainThree": { + "PropertySeven": { + "data": { + "PropertySeven": "sVcDummy_D_Seven" + } + } + } + } + } +} diff --git a/test_data/interface/test_generate_hi_interface/test_case.json b/test_data/interface/test_generate_hi_interface/test_case.json new file mode 100644 index 0000000..ba51b4a --- /dev/null +++ b/test_data/interface/test_generate_hi_interface/test_case.json @@ -0,0 +1,162 @@ +{ + "DummyRaster": { + "consumer": [ + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainOne", + "factor": 1, + "group": "GroupOne", + "init": 0, + "length": null, + "offset": 0, + "port_name": null, + "property": "PropertyOne", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_One", + "variable_type": "UInt8" + }, + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainOne", + "factor": 1, + "group": "GroupOne", + "init": 0, + "length": null, + "offset": 0, + "port_name": null, + "property": "PropertyTwo", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_Two", + "variable_type": "UInt8" + }, + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainOne", + "factor": 1, + "group": "GroupTwo", + "init": 0, + "length": null, + "offset": 0, + "port_name": "PortOne", + "property": "PropertyThree", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_Three", + "variable_type": "UInt8" + }, + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainOne", + "factor": 1, + "group": "GroupTwo", + "init": 0, + "length": "PortOne", + "offset": 0, + "port_name": "PortOne", + "property": "PropertyFour", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_Four", + "variable_type": "UInt8" + }, + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainTwo", + "factor": 1, + "group": null, + "init": 0, + "length": null, + "offset": 0, + "port_name": null, + "property": "PropertyFive", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_Five", + "variable_type": "UInt8" + }, + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainThree", + "factor": 1, + "group": null, + "init": 0, + "length": null, + "offset": 0, + "port_name": "PortTwo", + "property": "PropertySix", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_Six", + "variable_type": "UInt8" + } + ], + "producer": [ + { + "debug": false, + "default": null, + "description": "Some description", + "domain": "DomainThree", + "factor": 1, + "group": null, + "init": 0, + "length": null, + "offset": 0, + "port_name": null, + "property": "PropertySeven", + "property_type": "UInt8", + "range": { + "max": 4, + "min": 0 + }, + "strategy": "Always", + "unit": "-", + "variable": "sVcDummy_D_Seven", + "variable_type": "UInt8" + } + ] + } +} diff --git a/test_data/interface/test_simulink/add_api_expected_result.json b/test_data/interface/test_simulink/add_api_expected_result.json new file mode 100644 index 0000000..223061d --- /dev/null +++ b/test_data/interface/test_simulink/add_api_expected_result.json @@ -0,0 +1,14 @@ +[ + { + "name": "VcExt10ms", + "ports": { + "in": { + "sVcModel_B_Boolean": { + "primitive": "appprogint.endpoint.property", + "type": "Bool" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/add_api_with_data_types_expected_result.json b/test_data/interface/test_simulink/add_api_with_data_types_expected_result.json new file mode 100644 index 0000000..cd1aebf --- /dev/null +++ b/test_data/interface/test_simulink/add_api_with_data_types_expected_result.json @@ -0,0 +1,27 @@ +[ + { + "name": "VcExt10ms", + "ports": { + "in": { + "sVcModel_B_CarModes": { + "primitive": "appprogint.endpoint.property", + "type": "CarModes" + } + }, + "out": {} + }, + "types": [ + { + "name": "CarModes", + "kind": "enum", + "enumerators": [ + {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"}, + {"CARMODES_TRANSPORT": "vehiclemodesprovider::types::CarModes::kTransport"}, + {"CARMODES_FACTORY": "vehiclemodesprovider::types::CarModes::kFactory"}, + {"CARMODES_DYNO": "vehiclemodesprovider::types::CarModes::kDyno"} + ], + "default": {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"} + } + ] + } +] diff --git a/test_data/interface/test_simulink/add_dp_expected_result.json b/test_data/interface/test_simulink/add_dp_expected_result.json new file mode 100644 index 0000000..9d932c4 --- /dev/null +++ b/test_data/interface/test_simulink/add_dp_expected_result.json @@ -0,0 +1,27 @@ +[ + { + "name": "VcExt10ms", + "ports": { + "in": { + "sVcModel_D_SignalWithoutGroup": { + "primitive": "signals.domain.SignalWithoutGroup", + "type": "UInt16" + }, + "sVcModel_Z_SignalWithGroup": { + "primitive": "signals.other_domain.Group.Signal", + "type": "Float32" + } + }, + "out": { + "sVcModel_D_OutSignalWithoutGroup": { + "primitive": "signals.domain.OutSignalWithoutGroup", + "type": "UInt16" + }, + "sVcModel_Z_OutSignalWithGroup": { + "primitive": "signals.other_domain.OutGroup.OutSignal", + "type": "Float32" + } + } + } + } +] diff --git a/test_data/interface/test_simulink/add_dp_with_data_types_expected_result.json b/test_data/interface/test_simulink/add_dp_with_data_types_expected_result.json new file mode 100644 index 0000000..778fa3c --- /dev/null +++ b/test_data/interface/test_simulink/add_dp_with_data_types_expected_result.json @@ -0,0 +1,30 @@ +[ + { + "name": "VcExt10ms", + "ports": { + "in": { + "sVcModel_Z_SignalWithGroup": { + "primitive": "signals.other_domain.Group.Signal", + "type": "BlinkerMode" + } + }, + "out": { + "sVcModel_D_OutSignalWithoutGroup": { + "primitive": "signals.domain.OutSignalWithoutGroup", + "type": "BlinkerMode" + } + } + }, + "types": [ + { + "name": "BlinkerMode", + "kind": "enum", + "enumerators": [ + {"BLINKERMODE_OFF": "vehiclemodesprovider::types::BlinkerMode::Off"}, + {"BLINKERMODE_ON": "vehiclemodesprovider::types::BlinkerMode::On"} + ], + "default": {"BLINKERMODE_OFF": "vehiclemodesprovider::types::BlinkerMode::Off"} + } + ] + } +] diff --git a/test_data/interface/test_simulink/add_method_expected_methods.json b/test_data/interface/test_simulink/add_method_expected_methods.json new file mode 100644 index 0000000..408addb --- /dev/null +++ b/test_data/interface/test_simulink/add_method_expected_methods.json @@ -0,0 +1,21 @@ +[ + { + "name": "VcPvcDemo_11_CSPMethodCall", + "primitive_method": "simulinktest", + "namespace": "", + "in": [ + { + "name": "sVcTvdc_Tq_DftlCluTqCpMaxReRi", + "primitive_name": "method2.a", + "type": "Float32" + } + ], + "out": [ + { + "name": "Output1", + "primitive_name": "method2.b", + "type": "Int16" + } + ] + } +] diff --git a/test_data/interface/test_simulink/add_method_expected_result.json b/test_data/interface/test_simulink/add_method_expected_result.json new file mode 100644 index 0000000..09714ca --- /dev/null +++ b/test_data/interface/test_simulink/add_method_expected_result.json @@ -0,0 +1,22 @@ +[ + { + "name": "VcExt10ms_Always", + "ports": { + "in": { + "sVcModel_B_Boolean": { + "primitive": "appprogint.endpoint.property", + "type": "Bool" + } + }, + "out": {} + } + }, + { + "name": "csp_methods", + "ports": { + "in": {}, + "out": {} + }, + "methods": "expected_methods" + } +] diff --git a/test_data/interface/test_simulink/add_method_output.json b/test_data/interface/test_simulink/add_method_output.json new file mode 100644 index 0000000..28cf207 --- /dev/null +++ b/test_data/interface/test_simulink/add_method_output.json @@ -0,0 +1,14 @@ +[ + { + "name": "VcExt10ms_Always", + "ports": { + "in": { + "sVcModel_B_Boolean": { + "primitive": "appprogint.endpoint.property", + "type": "Bool" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/extend_adapters_expected_result.json b/test_data/interface/test_simulink/extend_adapters_expected_result.json new file mode 100644 index 0000000..db3c370 --- /dev/null +++ b/test_data/interface/test_simulink/extend_adapters_expected_result.json @@ -0,0 +1,18 @@ +[ + { + "name": "VcExt10ms", + "ports": { + "in": { + "sVcModel_B_Something": { + "primitive": "appprogint.endpoint.something", + "type": "Float32" + }, + "sVcModel_B_Boolean": { + "primitive": "appprogint.endpoint.property", + "type": "Bool" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/extend_adapters_interface.json b/test_data/interface/test_simulink/extend_adapters_interface.json new file mode 100644 index 0000000..c11f9b9 --- /dev/null +++ b/test_data/interface/test_simulink/extend_adapters_interface.json @@ -0,0 +1,14 @@ +[ + { + "name": "VcExt10ms", + "ports": { + "in": { + "sVcModel_B_Something": { + "primitive": "appprogint.endpoint.something", + "type": "Float32" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/get_interface_dp_expected_result.json b/test_data/interface/test_simulink/get_interface_dp_expected_result.json new file mode 100644 index 0000000..5a68e97 --- /dev/null +++ b/test_data/interface/test_simulink/get_interface_dp_expected_result.json @@ -0,0 +1,43 @@ +[ + { + "name": "VcExt10ms_domain_Always", + "ports": { + "in": { + "sVcModel_D_SignalWithoutGroup": { + "primitive": "signals.domain.SignalWithoutGroup", + "type": "UInt16" + } + }, + "out": { + "sVcModel_D_OutSignalWithoutGroup": { + "primitive": "signals.domain.OutSignalWithoutGroup", + "type": "UInt16" + } + } + } + }, + { + "name": "VcExt10ms_otherdomain_Always", + "ports": { + "in": {}, + "out": { + "sVcModel_Z_OutSignalWithGroup": { + "primitive": "signals.other_domain.OutGroup.OutSignal", + "type": "Float32" + } + } + } + }, + { + "name": "VcExt10ms_otherdomain_OnChanged", + "ports": { + "in": { + "sVcModel_Z_SignalWithGroup": { + "primitive": "signals.other_domain.Group.Signal", + "type": "Float32" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/get_interface_hal_expected_result.json b/test_data/interface/test_simulink/get_interface_hal_expected_result.json new file mode 100644 index 0000000..0fc8412 --- /dev/null +++ b/test_data/interface/test_simulink/get_interface_hal_expected_result.json @@ -0,0 +1,14 @@ +[ + { + "name": "VcExt10ms_AppProgInt_Always", + "ports": { + "in": { + "sVcModel_B_Boolean": { + "primitive": "appprogint.endpoint.property", + "type": "Bool" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/get_interface_sfw_expected_result.json b/test_data/interface/test_simulink/get_interface_sfw_expected_result.json new file mode 100644 index 0000000..0fc8412 --- /dev/null +++ b/test_data/interface/test_simulink/get_interface_sfw_expected_result.json @@ -0,0 +1,14 @@ +[ + { + "name": "VcExt10ms_AppProgInt_Always", + "ports": { + "in": { + "sVcModel_B_Boolean": { + "primitive": "appprogint.endpoint.property", + "type": "Bool" + } + }, + "out": {} + } + } +] diff --git a/test_data/interface/test_simulink/get_interface_with_data_types_expected_result.json b/test_data/interface/test_simulink/get_interface_with_data_types_expected_result.json new file mode 100644 index 0000000..fbe33cf --- /dev/null +++ b/test_data/interface/test_simulink/get_interface_with_data_types_expected_result.json @@ -0,0 +1,50 @@ +[ + { + "name": "VcExt10ms_AppProgInt_Always", + "ports": { + "in": { + "sVcModel_B_CarModes": { + "primitive": "appprogint.endpoint.property", + "type": "CarModes" + } + }, + "out": {} + }, + "types": [ + { + "name": "CarModes", + "kind": "enum", + "enumerators": [ + {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"}, + {"CARMODES_TRANSPORT": "vehiclemodesprovider::types::CarModes::kTransport"}, + {"CARMODES_FACTORY": "vehiclemodesprovider::types::CarModes::kFactory"}, + {"CARMODES_DYNO": "vehiclemodesprovider::types::CarModes::kDyno"} + ], + "default": {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"} + } + ] + }, + { + "name": "VcExt10ms_AppProgIntTwo_Always", + "ports": { + "in": { + "sVcModel_B_BlinkerMode": { + "primitive": "appproginttwo.endpoint.property", + "type": "BlinkerMode" + } + }, + "out": {} + }, + "types": [ + { + "name": "BlinkerMode", + "kind": "enum", + "enumerators": [ + {"BLINKERMODE_OFF": "vehiclemodesprovider::types::BlinkerMode::Off"}, + {"BLINKERMODE_ON": "vehiclemodesprovider::types::BlinkerMode::On"} + ], + "default": {"BLINKERMODE_OFF": "vehiclemodesprovider::types::BlinkerMode::Off"} + } + ] + } +] diff --git a/test_data/interface/test_simulink/get_interface_with_double_enum_expected_result.json b/test_data/interface/test_simulink/get_interface_with_double_enum_expected_result.json new file mode 100644 index 0000000..e098e2e --- /dev/null +++ b/test_data/interface/test_simulink/get_interface_with_double_enum_expected_result.json @@ -0,0 +1,52 @@ +[ + { + "name": "VcExt10ms_AppProgInt_Always", + "ports": { + "in": { + "sVcModel_B_CarModes": { + "primitive": "appprogint.endpoint.property", + "type": "CarModes" + } + }, + "out": {} + }, + "types": [ + { + "name": "CarModes", + "kind": "enum", + "enumerators": [ + {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"}, + {"CARMODES_TRANSPORT": "vehiclemodesprovider::types::CarModes::kTransport"}, + {"CARMODES_FACTORY": "vehiclemodesprovider::types::CarModes::kFactory"}, + {"CARMODES_DYNO": "vehiclemodesprovider::types::CarModes::kDyno"} + ], + "default": {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"} + } + ] + }, + { + "name": "VcExt10ms_AppProgIntTwo_Always", + "ports": { + "in": { + "sVcModel_B_CarModesTwo": { + "primitive": "appproginttwo.endpoint.property", + "type": "CarModes" + } + }, + "out": {} + }, + "types": [ + { + "name": "CarModes", + "kind": "enum", + "enumerators": [ + {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"}, + {"CARMODES_TRANSPORT": "vehiclemodesprovider::types::CarModes::kTransport"}, + {"CARMODES_FACTORY": "vehiclemodesprovider::types::CarModes::kFactory"}, + {"CARMODES_DYNO": "vehiclemodesprovider::types::CarModes::kDyno"} + ], + "default": {"CARMODES_NORMAL": "vehiclemodesprovider::types::CarModes::kNormal"} + } + ] + } +] diff --git a/test_data/interface/test_simulink/split_interface_expected_result.json b/test_data/interface/test_simulink/split_interface_expected_result.json new file mode 100644 index 0000000..f00d1fd --- /dev/null +++ b/test_data/interface/test_simulink/split_interface_expected_result.json @@ -0,0 +1,50 @@ +{ + "VcExt10ms_domain_Always": { + "consumer": [ + { + "domain": "domain", + "group": null, + "property": "SignalWithoutGroup", + "variable": "sVcModel_D_SignalWithoutGroup", + "variable_type": "UInt16", + "strategy": "Always" + } + ], + "producer": [ + { + "domain": "domain", + "group": null, + "property": "OutSignalWithoutGroup", + "variable": "sVcModel_D_OutSignalWithoutGroup", + "variable_type": "UInt16", + "strategy": "Always" + } + ] + }, + "VcExt10ms_otherdomain_Always": { + "consumer": [], + "producer": [ + { + "domain": "other_domain", + "group": "OutGroup", + "property": "OutSignal", + "variable": "sVcModel_Z_OutSignalWithGroup", + "variable_type": "Float32", + "strategy": "Always" + } + ] + }, + "VcExt10ms_otherdomain_OnChanged": { + "consumer": [ + { + "domain": "other_domain", + "group": "Group", + "property": "Signal", + "variable": "sVcModel_Z_SignalWithGroup", + "variable_type": "Float32", + "strategy": "OnChanged" + } + ], + "producer": [] + } +} diff --git a/test_data/interface/test_simulink/test_case.json b/test_data/interface/test_simulink/test_case.json new file mode 100644 index 0000000..c62b97d --- /dev/null +++ b/test_data/interface/test_simulink/test_case.json @@ -0,0 +1,213 @@ +{ + "DP": { + "VcExt10ms": { + "consumer": [ + { + "domain": "domain", + "group": null, + "property": "SignalWithoutGroup", + "variable": "sVcModel_D_SignalWithoutGroup", + "variable_type": "UInt16", + "strategy": "Always" + }, + { + "domain": "other_domain", + "group": "Group", + "property": "Signal", + "variable": "sVcModel_Z_SignalWithGroup", + "variable_type": "Float32", + "strategy": "OnChanged" + } + ], + "producer": [ + { + "domain": "domain", + "group": null, + "property": "OutSignalWithoutGroup", + "variable": "sVcModel_D_OutSignalWithoutGroup", + "variable_type": "UInt16", + "strategy": "Always" + }, + { + "domain": "other_domain", + "group": "OutGroup", + "property": "OutSignal", + "variable": "sVcModel_Z_OutSignalWithGroup", + "variable_type": "Float32", + "strategy": "Always" + } + ] + } + }, + "DP_ENUM": { + "VcExt10ms": { + "consumer": [ + { + "domain": "other_domain", + "group": "Group", + "property": "Signal", + "variable": "sVcModel_Z_SignalWithGroup", + "variable_type": "BlinkerMode", + "strategy": "Always" + } + ], + "producer": [ + { + "domain": "domain", + "group": null, + "property": "OutSignalWithoutGroup", + "variable": "sVcModel_D_OutSignalWithoutGroup", + "variable_type": "BlinkerMode", + "strategy": "Always" + } + ] + } + }, + "API": { + "VcExt10ms": { + "consumer": [ + { + "api": "AppProgInt", + "endpoint": "EndPoint", + "property": "Property", + "variable": "sVcModel_B_Boolean", + "variable_type": "Bool", + "variant": "properties", + "strategy": "Always" + } + ] + } + }, + "API_ENUM": { + "VcExt10ms": { + "consumer": [ + { + "api": "AppProgInt", + "endpoint": "EndPoint", + "property": "Property", + "variable": "sVcModel_B_CarModes", + "variable_type": "CarModes", + "variant": "properties", + "strategy": "Always" + } + ] + } + }, + "API_ENUMS": { + "VcExt10ms": { + "consumer": [ + { + "api": "AppProgInt", + "endpoint": "EndPoint", + "property": "Property", + "variable": "sVcModel_B_CarModes", + "variable_type": "CarModes", + "variant": "properties", + "strategy": "Always" + }, + { + "api": "AppProgIntTwo", + "endpoint": "EndPoint", + "property": "Property", + "variable": "sVcModel_B_BlinkerMode", + "variable_type": "BlinkerMode", + "variant": "properties", + "strategy": "Always" + } + ] + } + }, + "API_DOUBLE_ENUM": { + "VcExt10ms": { + "consumer": [ + { + "api": "AppProgInt", + "endpoint": "EndPoint", + "property": "Property", + "variable": "sVcModel_B_CarModes", + "variable_type": "CarModes", + "variant": "properties", + "strategy": "Always" + }, + { + "api": "AppProgIntTwo", + "endpoint": "EndPoint", + "property": "Property", + "variable": "sVcModel_B_CarModesTwo", + "variable_type": "CarModes", + "variant": "properties", + "strategy": "Always" + } + ] + } + }, + "INTERFACE_DATA_TYPES": { + "enums": { + "CarModes": [ + { + "item": "Normal", + "in": "CARMODES_NORMAL", + "out": "vehiclemodesprovider::types::CarModes::kNormal" + }, + { + "item": "Transport", + "in": "CARMODES_TRANSPORT", + "out": "vehiclemodesprovider::types::CarModes::kTransport" + }, + { + "item": "Factory", + "in": "CARMODES_FACTORY", + "out": "vehiclemodesprovider::types::CarModes::kFactory" + }, + { + "item": "Dyno", + "in": "CARMODES_DYNO", + "out": "vehiclemodesprovider::types::CarModes::kDyno" + }, + { + "default": "Normal", + "in": "CARMODES_NORMAL", + "out": "vehiclemodesprovider::types::CarModes::kNormal" + } + ], + "BlinkerMode": [ + { + "item": "Off", + "in": "BLINKERMODE_OFF", + "out": "vehiclemodesprovider::types::BlinkerMode::Off" + }, + { + "item": "On", + "in": "BLINKERMODE_ON", + "out": "vehiclemodesprovider::types::BlinkerMode::On" + }, + { + "default": "Off", + "in": "BLINKERMODE_OFF", + "out": "vehiclemodesprovider::types::BlinkerMode::Off" + } + ] + } + }, + "METHODS": { + "VcPvcDemo_11_CSPMethodCall": { + "name": "VcPvcDemo_11_CSPMethodCall", + "primitive": "simulinktest", + "namespace": "", + "ports": { + "in": { + "sVcTvdc_Tq_DftlCluTqCpMaxReRi": { + "primitive": "method2.a", + "type": "Float32" + } + }, + "out": { + "Output1": { + "primitive": "method2.b", + "type": "Int16" + } + } + } + } + } +} diff --git a/test_data/interface/test_update_call_sources/test_case.json b/test_data/interface/test_update_call_sources/test_case.json new file mode 100644 index 0000000..16e7603 --- /dev/null +++ b/test_data/interface/test_update_call_sources/test_case.json @@ -0,0 +1,47 @@ +[ + { + "name": "VcExt10ms_tvdc_Always", + "ports": { + "in": { + "sVcTvdc_Tq_DftlCluTqCpMaxReRi": { + "primitive": "signals.tvdc.DftlCluTqCpMaxReRi", + "type": "Float32" + } + }, + "out": { + "sVcPvcDemo_Tq_DftlCluTqCpReqReRi": { + "primitive": "signals.tvdc.DftlCluTqCpReqReRi", + "type": "Float32" + } + } + } + }, + { + "name": "csp_methods", + "ports": { + "in": {}, + "out": {} + }, + "methods": [ + { + "in": [ + { + "name": "sVcIem_U_WhlMotSysUdc", + "primitive_name": "request", + "type": "Float32" + } + ], + "out": [ + { + "name": "sVcPvcDemo_X_11CSPMethodCall2Output1", + "primitive_name": "out_prim", + "type": "Int8" + } + ], + "name": "VcPvcDemo_11_CSPMethodCall2", + "primitive_method": "brakecontrol.requestelectronicparkingbrake", + "namespace": "adapterwrapper" + } + ] + } +] diff --git a/test_data/zone_controller/test_composition_yaml/composition_yaml.py b/test_data/zone_controller/test_composition_yaml/composition_yaml.py new file mode 100644 index 0000000..0e16ea7 --- /dev/null +++ b/test_data/zone_controller/test_composition_yaml/composition_yaml.py @@ -0,0 +1,39 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test data for pybuild.zone_controller.composition_yaml.""" + +from test_data.zone_controller.test_composition_yaml import composition_yaml_setup + +expected_result = { + "SoftwareComponents": { + "testName_SC": { + "type": "SWC", + "template": "ARTCSC", + "runnables": { + "AR_prefix_VcExtINI": { + "type": "INIT", + "accesses": composition_yaml_setup.base_accesses + }, + "AR_prefix_testRunnable": { + "period": 10, + "type": "PERIODIC", + "accesses": composition_yaml_setup.base_accesses + }, + "AR_testName_SC_ZcCalibrationStep": { + "period": 0.1, + "type": "PERIODIC", + "accesses": composition_yaml_setup.base_accesses + } + }, + "static": composition_yaml_setup.base_static, + "shared": composition_yaml_setup.base_shared, + "ports": { + "GlobSignNme": {"direction": "IN", "interface": "PIGlobSignNme"} + }, + } + }, + "DataTypes": composition_yaml_setup.base_data_types, + "PortInterfaces": composition_yaml_setup.base_port_interfaces, + "ExternalFiles": composition_yaml_setup.base_configuration +} diff --git a/test_data/zone_controller/test_composition_yaml/composition_yaml_setup.py b/test_data/zone_controller/test_composition_yaml/composition_yaml_setup.py new file mode 100644 index 0000000..564994c --- /dev/null +++ b/test_data/zone_controller/test_composition_yaml/composition_yaml_setup.py @@ -0,0 +1,371 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test setup data for pybuild.zone_controller.composition_yaml.""" + +base_configuration = { + "Composition": "some_arxml.arxml", + "GenerateExternalImplementationTypes": True +} + +base_port_interfaces = { + "ExtraPortInterface": { + "type": "SENDER-RECIEVER-INTERFACE", + "elements": "ExtraType" + } +} + +base_accesses = [ + "tVcGpaDemo_X_DummyOne_x", + "tVcGpaDemo_X_DummyOne", + "mVcGpaDemo_X_DummyTwo_r", + "mVcGpaDemo_X_DummyTwo_c", + "mVcGpaDemo_X_DummyTwo", + "ctestName_SC_TriggerReadRteCData" +] + +base_shared = { + "ctestName_SC_TriggerReadRteCData": { + "access": "READ-WRITE", + "type": "Float32", + "init": 0 + }, + "tVcGpaDemo_X_DummyOne_x": { + "access": "READ-WRITE", + "type": "dt_tVcGpaDemo_X_DummyOne_x", + "init": [0.0, 0.0, 0.0, 0.0, 0.0] + }, + "tVcGpaDemo_X_DummyOne": { + "access": "READ-WRITE", + "type": "dt_tVcGpaDemo_X_DummyOne", + "init": [0.0, 0.0, 0.0, 0.0, 0.0] + }, + "mVcGpaDemo_X_DummyTwo_r": { + "access": "READ-WRITE", + "type": "dt_mVcGpaDemo_X_DummyTwo_r", + "init": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + "mVcGpaDemo_X_DummyTwo_c": { + "access": "READ-WRITE", + "type": "dt_mVcGpaDemo_X_DummyTwo_c", + "init": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + "mVcGpaDemo_X_DummyTwo": { + "access": "READ-WRITE", + "type": "dt_mVcGpaDemo_X_DummyTwo", + "init": [ + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + ] + } +} + +base_static = { + "sVcGpaDemo_D_BrkCtrlr": { + "access": "READ-ONLY", + "type": "UInt8", + "init": 0 + } +} + +base_data_types = { + "Bool": { + "type": "ENUMERATION", + "enums": { + "False": 0, + "True": 1 + } + }, + "Float32": { + "type": "FLOAT", + "limits": { + "lower": -3.4e38, + "upper": 3.4e38 + } + }, + "Int16": { + "type": "INTEGER", + "limits": { + "lower": -32768, + "upper": 32767 + } + }, + "Int32": { + "type": "INTEGER", + "limits": { + "lower": -2147483648, + "upper": 2147483647 + } + }, + "Int8": { + "type": "INTEGER", + "limits": { + "lower": -128, + "upper": 127 + } + }, + "UInt16": { + "type": "INTEGER", + "limits": { + "lower": 0, + "upper": 65535 + } + }, + "UInt32": { + "type": "INTEGER", + "limits": { + "lower": 0, + "upper": 4294967295 + } + }, + "UInt8": { + "type": "INTEGER", + "limits": { + "lower": 0, + "upper": 255 + } + }, + "ExtraType": { + "type": "RECORD", + "elements": { + "structElem": "UInt8" + } + }, + "dt_tVcGpaDemo_X_DummyOne_x": { + "type": "COM_AXIS", + "axis-index": 1, + "size": 5, + "limits": {"lower": 0, "upper": 10}, + "swrecordlayout": { + "name": "Distr_tVcGpaDemo_X_DummyOne_x", + "type": "INDEX_INCR", + "basetype": "float32", + "label": "X" + } + }, + "dt_tVcGpaDemo_X_DummyOne": { + "type": "CURVE", + "axis": "dt_tVcGpaDemo_X_DummyOne_x", + "limits": {"lower": -10, "upper": 10}, + "swrecordlayout": { + "name": "Curve_tVcGpaDemo_X_DummyOne", + "type": "COLUMN_DIR", + "basetype": "float32", + "label": "Val" + } + }, + "dt_mVcGpaDemo_X_DummyTwo_r": { + "type": "COM_AXIS", + "axis-index": 1, + "size": 10, + "limits": {"lower": 0, "upper": 255}, + "swrecordlayout": { + "name": "Distr_mVcGpaDemo_X_DummyTwo_r", + "type": "INDEX_INCR", + "basetype": "uint8", + "label": "X" + } + }, + "dt_mVcGpaDemo_X_DummyTwo_c": { + "type": "COM_AXIS", + "axis-index": 2, + "size": 25, + "limits": {"lower": 0, "upper": 255}, + "swrecordlayout": { + "name": "Distr_mVcGpaDemo_X_DummyTwo_c", + "type": "INDEX_INCR", + "basetype": "uint8", + "label": "Y" + } + }, + "dt_mVcGpaDemo_X_DummyTwo": { + "type": "MAP", + "x-axis": "dt_mVcGpaDemo_X_DummyTwo_r", + "y-axis": "dt_mVcGpaDemo_X_DummyTwo_c", + "limits": {"lower": 5, "upper": 10}, + "swrecordlayout": { + "name": "Map_mVcGpaDemo_X_DummyTwo", + "type": "COLUMN_DIR", + "basetype": "uint8", + "label": "Val" + } + } +} + +calibration_definitions = [ + "#ifndef something", + "#define something", + "", + '#include "somefile.h"', + "CVC_DISP UInt8 sVcGpaDemo_D_BrkCtrlr = 5;", + "CVC_CAL Float32 tVcGpaDemo_X_DummyOne_x[5] = ", + "{", + " 0.F, 0.F, 0.F, 0.F, 0.F", + "};", + "CVC_CAL Float32 tVcGpaDemo_X_DummyOne[5] = ", + "{", + " 0.F, 0.F, 0.F, 0.F, 0.F", + "};", + "CVC_CAL UInt8 mVcGpaDemo_X_DummyTwo_r[10] = ", + "{", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0", + "};", + "CVC_CAL UInt8 mVcGpaDemo_X_DummyTwo_c[25] = ", + "{", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ", + " 0, 0, 0, 0, 0 ", + "};", + "CVC_CAL UInt8 mVcGpaDemo_X_DummyTwo[10][25] = ", + "{", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " }", + "};", + "", + "#endif" +] + +get_per_cfg_unit_cfg_return_value = { + "outports": {}, + "calib_consts": { + "tVcGpaDemo_X_DummyOne_x": { + "VcGpaDemo": { + "name": "tVcGpaDemo_X_DummyOne_x", + "type": "Float32", + "class": "CVC_CAL", + "min": 0, + "max": 10, + "lsb": 1, + "offset": 0, + "width": [1, 5] + } + }, + "tVcGpaDemo_X_DummyOne": { + "VcGpaDemo": { + "name": "tVcGpaDemo_X_DummyOne", + "type": "Float32", + "class": "CVC_CAL", + "min": -10, + "max": 10, + "lsb": 1, + "offset": 0, + "width": [1, 5] + } + }, + "mVcGpaDemo_X_DummyTwo_r": { + "VcGpaDemo": { + "name": "mVcGpaDemo_X_DummyTwo_r", + "type": "UInt8", + "class": "CVC_CAL", + "min": 0, + "max": 255, + "lsb": 1, + "offset": 0, + "width": [1, 10] + } + }, + "mVcGpaDemo_X_DummyTwo_c": { + "VcGpaDemo": { + "name": "mVcGpaDemo_X_DummyTwo_c", + "type": "UInt8", + "class": "CVC_CAL", + "min": "-", + "max": "-", + "lsb": 1, + "offset": 0, + "width": [1, 25] + } + }, + "mVcGpaDemo_X_DummyTwo": { + "VcGpaDemo": { + "name": "mVcGpaDemo_X_DummyTwo", + "type": "UInt8", + "class": "CVC_CAL", + "min": 5, + "max": 10, + "lsb": 1, + "offset": 0, + "width": [10, 25] + } + } + }, + "local_vars": { + "sVcGpaDemo_D_BrkCtrlr": { + "VcGpaDemo": { + "name": "sVcGpaDemo_D_BrkCtrlr", + "type": "UInt8", + "class": "CVC_DISP", + "min": "-", + "max": "-", + "lsb": 1, + "offset": 0, + "width": 1 + } + } + }, + "inports": {} +} + +zc_spec = { + "ports": { + "GlobSignNme": {"direction": "IN", "interface": "PIGlobSignNme"} + }, + "port_interfaces": { + "ExtraPortInterface": { + "type": "SENDER-RECIEVER-INTERFACE", + "elements": "ExtraType" + } + }, + "data_types": { + "ExtraType": { + "type": "RECORD", + "elements": {"structElem": "UInt8"} + } + } +} diff --git a/test_data/zone_controller/test_composition_yaml/composition_yaml_with_a2l_axis_data.py b/test_data/zone_controller/test_composition_yaml/composition_yaml_with_a2l_axis_data.py new file mode 100644 index 0000000..f732dea --- /dev/null +++ b/test_data/zone_controller/test_composition_yaml/composition_yaml_with_a2l_axis_data.py @@ -0,0 +1,365 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test data for pybuild.zone_controller.composition_yaml with a2l axis data.""" + +from test_data.zone_controller.test_composition_yaml import composition_yaml_setup + +get_per_cfg_unit_cfg_return_value = { + "outports": {}, + "calib_consts": { + "tVcGpaDemo_X_DummyOne_x": { + "VcGpaDemo": { + "name": "tVcGpaDemo_X_DummyOne_x", + "type": "Float32", + "class": "CVC_CAL", + "min": 0, + "max": 10, + "lsb": 1, + "offset": 0, + "width": [1, 5] + } + }, + "tVcGpaDemo_X_NotSameAsAxisOne": { + "VcGpaDemo": { + "name": "tVcGpaDemo_X_NotSameAsAxisOne", + "type": "Float32", + "class": "CVC_CAL", + "min": -10, + "max": 10, + "lsb": 1, + "offset": 0, + "width": [1, 5] + }, + }, + "mVcGpaDemo_X_DummyTwo_r": { + "VcGpaDemo": { + "name": "mVcGpaDemo_X_DummyTwo_r", + "type": "UInt8", + "class": "CVC_CAL", + "min": 0, + "max": 255, + "lsb": 1, + "offset": 0, + "width": [1, 10] + } + }, + "mVcGpaDemo_X_DummyTwo_c": { + "VcGpaDemo": { + "name": "mVcGpaDemo_X_DummyTwo_c", + "type": "UInt8", + "class": "CVC_CAL", + "min": "-", + "max": "-", + "lsb": 1, + "offset": 0, + "width": [1, 25] + } + }, + "mVcGpaDemo_X_NotSameAsAxisTwo": { + "VcGpaDemo": { + "name": "mVcGpaDemo_X_NotSameAsAxisTwo", + "type": "UInt8", + "class": "CVC_CAL", + "min": 5, + "max": 10, + "lsb": 1, + "offset": 0, + "width": [10, 25] + } + } + }, + "local_vars": { + "sVcGpaDemo_D_BrkCtrlr": { + "VcGpaDemo": { + "name": "sVcGpaDemo_D_BrkCtrlr", + "type": "UInt8", + "class": "CVC_DISP", + "min": "-", + "max": "-", + "lsb": 1, + "offset": 0, + "width": 1, + } + } + }, + "inports": {}, +} + +a2l_axis_data = { + "tVcGpaDemo_X_NotSameAsAxisOne": { + "axes": ["tVcGpaDemo_X_DummyOne_x"], + }, + "mVcGpaDemo_X_NotSameAsAxisTwo": { + "axes": ["mVcGpaDemo_X_DummyTwo_r", "mVcGpaDemo_X_DummyTwo_c"], + }, +} + +calibration_definitions = [ + "CVC_CAL Float32 tVcGpaDemo_X_NotSameAsAxisOne[5] = ", + "{", + " 0.F, 0.F, 0.F, 0.F, 0.F", + "};", + "CVC_CAL UInt8 mVcGpaDemo_X_NotSameAsAxisTwo[10][25] = ", + "{", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " },", + " {", + " 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ", + " 5, 5, 5, 5, 5 ", + " }", + "};" + "", +] + +expected_result = { + "SoftwareComponents": { + "testName_SC": { + "type": "SWC", + "template": "ARTCSC", + "runnables": { + "AR_prefix_VcExtINI": { + "type": "INIT", + "accesses": [ + "tVcGpaDemo_X_DummyOne_x", + "tVcGpaDemo_X_NotSameAsAxisOne", + "mVcGpaDemo_X_DummyTwo_r", + "mVcGpaDemo_X_DummyTwo_c", + "mVcGpaDemo_X_NotSameAsAxisTwo", + "ctestName_SC_TriggerReadRteCData" + ] + }, + "AR_prefix_testRunnable": { + "period": 10, + "type": "PERIODIC", + "accesses": [ + "tVcGpaDemo_X_DummyOne_x", + "tVcGpaDemo_X_NotSameAsAxisOne", + "mVcGpaDemo_X_DummyTwo_r", + "mVcGpaDemo_X_DummyTwo_c", + "mVcGpaDemo_X_NotSameAsAxisTwo", + "ctestName_SC_TriggerReadRteCData" + ] + }, + "AR_testName_SC_ZcCalibrationStep": { + "period": 0.1, + "type": "PERIODIC", + "accesses": [ + "tVcGpaDemo_X_DummyOne_x", + "tVcGpaDemo_X_NotSameAsAxisOne", + "mVcGpaDemo_X_DummyTwo_r", + "mVcGpaDemo_X_DummyTwo_c", + "mVcGpaDemo_X_NotSameAsAxisTwo", + "ctestName_SC_TriggerReadRteCData" + ] + } + }, + "static": composition_yaml_setup.base_static, + "shared": { + "ctestName_SC_TriggerReadRteCData": { + "access": "READ-WRITE", + "type": "Float32", + "init": 0 + }, + "tVcGpaDemo_X_DummyOne_x": { + "access": "READ-WRITE", + "type": "dt_tVcGpaDemo_X_DummyOne_x", + "init": [0.0, 0.0, 0.0, 0.0, 0.0] + }, + "tVcGpaDemo_X_NotSameAsAxisOne": { + "access": "READ-WRITE", + "type": "dt_tVcGpaDemo_X_NotSameAsAxisOne", + "init": [0.0, 0.0, 0.0, 0.0, 0.0] + }, + "mVcGpaDemo_X_DummyTwo_r": { + "access": "READ-WRITE", + "type": "dt_mVcGpaDemo_X_DummyTwo_r", + "init": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + "mVcGpaDemo_X_DummyTwo_c": { + "access": "READ-WRITE", + "type": "dt_mVcGpaDemo_X_DummyTwo_c", + "init": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + "mVcGpaDemo_X_NotSameAsAxisTwo": { + "access": "READ-WRITE", + "type": "dt_mVcGpaDemo_X_NotSameAsAxisTwo", + "init": [ + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + ] + } + }, + "ports": { + "GlobSignNme": {"direction": "IN", "interface": "PIGlobSignNme"} + }, + } + }, + "DataTypes": { + "Bool": { + "type": "ENUMERATION", + "enums": { + "False": 0, + "True": 1 + } + }, + "Float32": { + "type": "FLOAT", + "limits": { + "lower": -3.4e38, + "upper": 3.4e38 + } + }, + "Int16": { + "type": "INTEGER", + "limits": { + "lower": -32768, + "upper": 32767 + } + }, + "Int32": { + "type": "INTEGER", + "limits": { + "lower": -2147483648, + "upper": 2147483647 + } + }, + "Int8": { + "type": "INTEGER", + "limits": { + "lower": -128, + "upper": 127 + } + }, + "UInt16": { + "type": "INTEGER", + "limits": { + "lower": 0, + "upper": 65535 + } + }, + "UInt32": { + "type": "INTEGER", + "limits": { + "lower": 0, + "upper": 4294967295 + } + }, + "UInt8": { + "type": "INTEGER", + "limits": { + "lower": 0, + "upper": 255 + } + }, + "ExtraType": { + "type": "RECORD", + "elements": { + "structElem": "UInt8" + } + }, + "dt_tVcGpaDemo_X_DummyOne_x": { + "type": "COM_AXIS", + "axis-index": 1, + "size": 5, + "limits": {"lower": 0, "upper": 10}, + "swrecordlayout": { + "name": "Distr_tVcGpaDemo_X_DummyOne_x", + "type": "INDEX_INCR", + "basetype": "float32", + "label": "X" + } + }, + "dt_tVcGpaDemo_X_NotSameAsAxisOne": { + "type": "CURVE", + "axis": "dt_tVcGpaDemo_X_DummyOne_x", + "limits": {"lower": -10, "upper": 10}, + "swrecordlayout": { + "name": "Curve_tVcGpaDemo_X_NotSameAsAxisOne", + "type": "COLUMN_DIR", + "basetype": "float32", + "label": "Val" + } + }, + "dt_mVcGpaDemo_X_DummyTwo_r": { + "type": "COM_AXIS", + "axis-index": 1, + "size": 10, + "limits": {"lower": 0, "upper": 255}, + "swrecordlayout": { + "name": "Distr_mVcGpaDemo_X_DummyTwo_r", + "type": "INDEX_INCR", + "basetype": "uint8", + "label": "X" + } + }, + "dt_mVcGpaDemo_X_DummyTwo_c": { + "type": "COM_AXIS", + "axis-index": 2, + "size": 25, + "limits": {"lower": 0, "upper": 255}, + "swrecordlayout": { + "name": "Distr_mVcGpaDemo_X_DummyTwo_c", + "type": "INDEX_INCR", + "basetype": "uint8", + "label": "Y" + } + }, + "dt_mVcGpaDemo_X_NotSameAsAxisTwo": { + "type": "MAP", + "x-axis": "dt_mVcGpaDemo_X_DummyTwo_r", + "y-axis": "dt_mVcGpaDemo_X_DummyTwo_c", + "limits": {"lower": 5, "upper": 10}, + "swrecordlayout": { + "name": "Map_mVcGpaDemo_X_NotSameAsAxisTwo", + "type": "COLUMN_DIR", + "basetype": "uint8", + "label": "Val" + } + } + }, + "PortInterfaces": composition_yaml_setup.base_port_interfaces, + "ExternalFiles": composition_yaml_setup.base_configuration +} diff --git a/test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_all_fields.py b/test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_all_fields.py new file mode 100644 index 0000000..c50d61c --- /dev/null +++ b/test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_all_fields.py @@ -0,0 +1,46 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test data for pybuild.zone_controller.composition_yaml with calls using all fields.""" + +from test_data.zone_controller.test_composition_yaml import composition_yaml_setup + +expected_result = { + "SoftwareComponents": { + "testName_SC": { + "type": "SWC", + "template": "ARTCSC", + "runnables": { + "AR_prefix_VcExtINI": { + "type": "INIT", + "accesses": composition_yaml_setup.base_accesses + }, + "AR_prefix_testRunnable": { + "period": 10, + "type": "PERIODIC", + "accesses": composition_yaml_setup.base_accesses, + "calls": { + "CallOne": { + "operation": "OperationOne", + "timeout": 0.1, + } + } + }, + "AR_testName_SC_ZcCalibrationStep": { + "period": 0.1, + "type": "PERIODIC", + "accesses": composition_yaml_setup.base_accesses + } + }, + "static": composition_yaml_setup.base_static, + "shared": composition_yaml_setup.base_shared, + "ports": { + "GlobSignNme": {"direction": "IN", "interface": "PIGlobSignNme"}, + "CallOne": {"direction": "IN", "interface": "InterfaceOne"} + } + } + }, + "DataTypes": composition_yaml_setup.base_data_types, + "PortInterfaces": composition_yaml_setup.base_port_interfaces, + "ExternalFiles": composition_yaml_setup.base_configuration +} diff --git a/test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_no_optional_fields.py b/test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_no_optional_fields.py new file mode 100644 index 0000000..cec2106 --- /dev/null +++ b/test_data/zone_controller/test_composition_yaml/composition_yaml_with_calls_no_optional_fields.py @@ -0,0 +1,45 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test data for pybuild.zone_controller.composition_yaml with calls no optional fields.""" + +from test_data.zone_controller.test_composition_yaml import composition_yaml_setup + +expected_result = { + "SoftwareComponents": { + "testName_SC": { + "type": "SWC", + "template": "ARTCSC", + "runnables": { + "AR_prefix_VcExtINI": { + "type": "INIT", + "accesses": composition_yaml_setup.base_accesses + }, + "AR_prefix_testRunnable": { + "period": 10, + "type": "PERIODIC", + "accesses": composition_yaml_setup.base_accesses, + "calls": { + "CallOne": { + "operation": "OperationOne", + } + } + }, + "AR_testName_SC_ZcCalibrationStep": { + "period": 0.1, + "type": "PERIODIC", + "accesses": composition_yaml_setup.base_accesses + } + }, + "static": composition_yaml_setup.base_static, + "shared": composition_yaml_setup.base_shared, + "ports": { + "GlobSignNme": {"direction": "IN", "interface": "PIGlobSignNme"}, + "CallOne": {"direction": "IN", "interface": "CallOne"} + } + } + }, + "DataTypes": composition_yaml_setup.base_data_types, + "PortInterfaces": composition_yaml_setup.base_port_interfaces, + "ExternalFiles": composition_yaml_setup.base_configuration +} diff --git a/tests/__init__.py b/tests/__init__.py index e69de29..02c0d22 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -0,0 +1,2 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. diff --git a/tests/interface/__init__.py b/tests/interface/__init__.py new file mode 100644 index 0000000..937ff95 --- /dev/null +++ b/tests/interface/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""pybuild.interface unit tests.""" diff --git a/tests/interface/test_export_global_vars.py b/tests/interface/test_export_global_vars.py new file mode 100644 index 0000000..30a786d --- /dev/null +++ b/tests/interface/test_export_global_vars.py @@ -0,0 +1,46 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for export_global_vars.py.""" + +from unittest import TestCase, mock + +from pybuild.interface.export_global_vars import get_global_variables + + +class TestGlobalVarsExport(TestCase): + """Test the `export_global_vars.py` script.""" + + def test_get_global_variables(self): + """Test export_global_variables.get_global_variables.""" + dummy_project_name = "dummy_project" + dummy_pybuild_return = ( + dummy_project_name, + { + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": {"sVcOut_D_One": {"unit": {"type": "dummy_type"}}}, + "inports": {"not_interesting": {"dummy": "data"}}, + "core": {"not_interesting": {"dummy": "data"}}, + "dids": {"not_interesting": {"dummy": "data"}}, + "nvm": {"sVcNvm_D_One": {"unit": {"type": "dummy_type"}}}, + "pre_procs": {"not_interesting": {"dummy": "data"}}, + "local_vars": {"sVcLocal_D_One": {"unit": {"type": "dummy_type"}}}, + "calib_consts": { + "sVcCalib_D_One": {"unit": {"type": "dummy_type"}}, + "sVcCalib_D_Two": {"unit": {"type": "dummy_type"}}, + }, + }, + ) + with mock.patch("pybuild.interface.export_global_vars._get_project_data", return_value=dummy_pybuild_return): + result = get_global_variables("Dummy") + expected_variables = [ + {"name": "sVcOut_D_One", "type": "dummy_type"}, + {"name": "sVcNvm_D_One", "type": "dummy_type"}, + {"name": "sVcLocal_D_One", "type": "dummy_type"}, + {"name": "sVcCalib_D_One", "type": "dummy_type"}, + {"name": "sVcCalib_D_Two", "type": "dummy_type"}, + ] + self.assertEqual(dummy_project_name, result["name"]) + self.assertCountEqual(expected_variables, result["variables"]) diff --git a/tests/interface/test_generate_hi_interface.py b/tests/interface/test_generate_hi_interface.py new file mode 100644 index 0000000..03af19b --- /dev/null +++ b/tests/interface/test_generate_hi_interface.py @@ -0,0 +1,36 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for unit testing generate_hi_interface.py.""" + + +import json +import os +from argparse import Namespace +from pathlib import Path +from unittest import TestCase +from ruamel.yaml import YAML +from pybuild.interface.generate_hi_interface import generate_hi_interface + + +class TestHIManifestParser(TestCase): + """Test cases for HI Manifest Parser.""" + + def test_generate_hi_interface(self): + """Test case for generate_hi_interface.""" + base_path = "test_data/interface/test_generate_hi_interface" + + with open(os.path.join(base_path, "test_case.json"), encoding="utf-8") as json_file: + hi_interface = json.load(json_file) + with open(os.path.join(base_path, "expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + + yaml_tmp = Path("yaml_tmp.yaml") + args = Namespace() + args.output = yaml_tmp + generate_hi_interface(args, hi_interface) + with yaml_tmp.open(encoding="utf-8") as fh: + yaml = YAML(typ='safe', pure=True) + result = yaml.load(fh) + self.assertDictEqual(expected, result) + yaml_tmp.unlink() diff --git a/tests/interface/test_generation_utils.py b/tests/interface/test_generation_utils.py new file mode 100644 index 0000000..3b057c4 --- /dev/null +++ b/tests/interface/test_generation_utils.py @@ -0,0 +1,226 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Test cases for the generation utils.""" + +import unittest +from unittest import mock + +from pybuild.interface import generation_utils +from pybuild.interface.application import Application, Raster +from pybuild.interface.base import Signal +from pybuild.interface.hal import HALA + + +class TestGenerationUtils(unittest.TestCase): + """Test cases for the generation utils.""" + + @mock.patch('pybuild.interface.application.Raster.insignals', new_callable=mock.PropertyMock) + @mock.patch('pybuild.interface.application.Raster.outsignals', new_callable=mock.PropertyMock) + @mock.patch('pybuild.interface.csp_api.CspApi.read_translation') + @mock.patch('pybuild.interface.hal.HALA.get_map_file') + @mock.patch('pybuild.interface.hal.HALA._get_hal_translation') + def test_get_interface(self, mock_hal_translation, mock_hal_file, mock_read_file, raster_out, raster_in): + """Test get_interface method.""" + # Setup signals + mocked_app_1 = mock.MagicMock() + mocked_app_2 = mock.MagicMock() + mocked_app_1.get_signal_properties.return_value = { + 'configs': 'dummy', + 'type': 'Bool', + 'description': 'Dummy description', + 'min': 0, + 'max': 5, + 'init': 0, + 'unit': 'Nm', + 'offset': 1, + 'factor': 2, + 'lsb': 1 + } + mocked_app_2.get_signal_properties.return_value = { + 'configs': 'dummy', + 'type': 'Float32', + 'description': 'Dummy description', + 'min': 0, + 'max': 5, + 'init': 0, + 'unit': 'Nm', + 'offset': 1, + 'factor': 2, + 'lsb': 1 + } + hal_to_app = Signal('hal_to_app', mocked_app_1) + app_to_hal = Signal('app_to_hal', mocked_app_2) + unrelated_signal_1 = Signal('unrelated_signal_1', None) + unrelated_signal_2 = Signal('unrelated_signal_2', None) + + # Setup dummy project + app = Application() + app.name = 'DummyApp' + app.pybuild['unit_vars'] = {} + app.pybuild['feature_cfg'] = mock.MagicMock() + app.pybuild['build_cfg'] = mock.MagicMock() + app.pybuild['user_defined_types'] = mock.MagicMock() + app.pybuild['unit_vars'] = { + 'dummy_model': { + 'inports': { + 'hal_to_app': { + 'configs': 'dummy', + 'type': 'Bool', + 'description': 'Dummy description', + 'min': 0, + "max": 5, + 'init': 0, + 'unit': 'Nm', + 'offset': 1, + 'factor': 2 + } + }, + 'outports': { + 'app_to_hal': { + 'type': 'Float32', + 'configs': 'dummy', + 'description': 'Dummy description', + 'min': 0, + "max": 5, + 'init': 0, + 'unit': 'Nm', + 'offset': 1, + 'factor': 2 + } + } + } + } + app.get_map_file = mock.MagicMock() + app.get_translation_files = mock.MagicMock(return_value=['dummy_file']) + raster_in.return_value = [hal_to_app, unrelated_signal_1] + raster_out.return_value = [app_to_hal, unrelated_signal_2] + dummy_raster = Raster(app) + dummy_raster.name = 'DummyRaster' + app.get_rasters = mock.MagicMock(return_value=[dummy_raster]) + + # Setup dummy hal + mock_read_file.return_value = { + 'hal': { + 'dummy_hal1': [{ + 'hal_set': + [{ + 'outsignal': 'app_to_hal', + }], + 'hal_get': + [{ + 'insignal': 'hal_to_app' + }] + }], + 'dummy2': [{ + 'HalGroup1': [ + { + 'property': 'hal_set', + 'outsignal': 'app_to_hal' + }, + { + 'property': 'hal_get', + 'insignal': 'hal_to_app' + } + ] + }] + } + } + mock_hal_translation.return_value = { + 'dummy1': 'DummyHal1', + 'dummy2': 'DummyHal2' + } + # Verify results + hala = HALA(app) + result = generation_utils.get_interface(app, hala) + expected_result = { + 'relocatable_language': 'C', + 'DummyRaster': { + 'consumer': [ + { + 'variable': 'hal_to_app', + 'variable_type': 'Bool', + 'property': None, + 'property_type': 'Bool', + 'default': None, + 'length': None, + 'offset': 1, + 'factor': 1, + 'range': {'min': 0, 'max': 5}, + 'init': 0, + 'description': 'Dummy description', + 'unit': 'Nm', + 'endpoint': 'hal_get', + 'api': 'DummyHal1', + 'variant': 'hals', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + }, + { + 'variable': 'hal_to_app', + 'variable_type': 'Bool', + 'property': 'hal_get', + 'property_type': 'Bool', + 'default': None, + 'length': None, + 'offset': 1, + 'factor': 1, + 'range': {'min': 0, 'max': 5}, + 'init': 0, + 'description': 'Dummy description', + 'unit': 'Nm', + 'endpoint': 'HalGroup1', + 'api': 'DummyHal2', + 'variant': 'hals', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + } + ], + 'producer': [ + { + 'variable': 'app_to_hal', + 'variable_type': 'Float32', + 'property': 'hal_set', + 'property_type': 'Float32', + 'default': None, + 'length': None, + 'offset': 1, + 'factor': 1, + 'range': {'min': 0, 'max': 5}, + 'init': 0, + 'description': 'Dummy description', + 'unit': 'Nm', + 'endpoint': 'HalGroup1', + 'api': 'DummyHal2', + 'variant': 'hals', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + }, + { + 'variable': 'app_to_hal', + 'variable_type': 'Float32', + 'property': None, + 'property_type': 'Float32', + 'default': None, + 'length': None, + 'offset': 1, + 'factor': 1, + 'range': {'min': 0, 'max': 5}, + 'init': 0, + 'description': 'Dummy description', + 'unit': 'Nm', + 'endpoint': 'hal_set', + 'api': 'DummyHal1', + 'variant': 'hals', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + } + ] + } + } + self.assertCountEqual(result['DummyRaster']['consumer'], expected_result['DummyRaster']['consumer']) + self.assertCountEqual(result['DummyRaster']['producer'], expected_result['DummyRaster']['producer']) diff --git a/tests/interface/test_interface.py b/tests/interface/test_interface.py new file mode 100644 index 0000000..dc5dd8d --- /dev/null +++ b/tests/interface/test_interface.py @@ -0,0 +1,176 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module to test the interface module""" + + +import unittest +from unittest import mock + +from pybuild.interface.base import Domain, Interface, MultipleProducersError, Signal + + +class DummyApp: + """Dummy application class""" + + def __init__(self, name, properties=None): + self.name = name + self._insignals = [] + self._outsignals = [] + self._properties = properties if properties is not None else {} + + @property + def insignals(self): + """Get insignals""" + return self._insignals + + @property + def outsignals(self): + """Get outsignals""" + return self._outsignals + + def get_signal_properties(self, *args): + """Dummy properties""" + return self._properties + + +def create_dummies(): + """Create dummy applications and signals""" + dummy_apps = [] + signals = [] + for i in range(0, 3): + dummy_app_name = "dummy" + str(i) + signal_properties = {"prop_from_" + str(i): dummy_app_name} + dummy_app = DummyApp("dummy" + str(i), signal_properties) + dummy_apps.append(dummy_app) + signals.append(Signal("signal_" + str(i * 2), dummy_app)) + signals.append(Signal("signal_" + str(i * 2 + 1), dummy_app)) + dummy_apps[0]._outsignals = [signals[0], signals[1]] + dummy_apps[0]._insignals = [signals[2], signals[4]] # 1 from dummy1, 1 from elsewhere + dummy_apps[1]._outsignals = [signals[2], signals[3]] + dummy_apps[1]._insignals = [signals[0], signals[5]] # 1 from dummy0, 1 from elsewhere + return signals, dummy_apps + + +class TestSignal(unittest.TestCase): + """Unit tests for the Signal class.""" + + def test_init(self): + """Test the initialization of a Signal instance.""" + signal = Signal("test_name", None) + self.assertEqual(signal.name, "test_name") + self.assertDictEqual(signal.applications, {}) + + def test_consumers(self): + """Test the consumers property of a Signal instance.""" + signal = Signal("test_name", None) + signal.consumers = "Consumer_1" + signal.consumers = "Consumer_2" + self.assertSetEqual(signal.consumers, set(["Consumer_1", "Consumer_2"])) + + def test_producer(self): + """Test the producer property of a Signal instance.""" + signal = Signal("test_name", None) + signal.producer = "Producer_1" + self.assertSetEqual(signal.producer, {"Producer_1"}) + + def test_multiple_producer(self): + """Test the behavior of a Signal instance when multiple producers are set.""" + signal = Signal("test_name", None) + signal.producer = "Producer_1" + signal.producer = "Producer_1" + with self.assertRaises(MultipleProducersError): + signal.set_producer("Producer_2") + + def test_force_producers(self): + """Test the force_producer method of a Signal instance.""" + signal = Signal("test_name", None) + signal.producer = "Producer_1" + signal.force_producer("Producer_2") + self.assertSetEqual(signal.producer, set(["Producer_1", "Producer_2"])) + + def test_properties(self): + """Test the properties property of a Signal instance.""" + dummy = mock.MagicMock() + properties = {"type": "dummy", "description": "DUMMY"} + dummy.get_signal_properties.return_value = properties + signal = Signal("test_name", dummy) + self.assertDictEqual(signal.properties, properties) + + +class TestInterface(unittest.TestCase): + """Unit tests for the Interface class.""" + + def setUp(self): + """Set up the test case by creating dummy signals and apps.""" + signals, apps = create_dummies() + self.signals = signals + self.apps = apps + + def test_init(self): + """Test the initialization of the Interface class.""" + interface = Interface(self.apps[0], self.apps[1]) + self.assertEqual(interface.name, "dummy0_dummy1") + + def test_signals_current_to_corresponding(self): + """Test the get_produced_signals, get_consumed_signals, and get_directional_signals methods.""" + interface = Interface(self.apps[0], self.apps[1]) + self.assertListEqual(interface.get_produced_signals(self.apps[0].name), [self.signals[0]]) + self.assertListEqual(interface.get_consumed_signals(self.apps[1].name), [self.signals[0]]) + self.assertListEqual( + interface.get_directional_signals(consumer=self.apps[1], producer=self.apps[0]), [self.signals[0]] + ) + + def test_signals_corresponding_to_current(self): + """Test the get_produced_signals, get_consumed_signals, and get_directional_signals methods.""" + interface = Interface(self.apps[0], self.apps[1]) + self.assertListEqual(interface.get_produced_signals(self.apps[1].name), [self.signals[2]]) + self.assertListEqual(interface.get_consumed_signals(self.apps[0].name), [self.signals[2]]) + self.assertListEqual( + interface.get_directional_signals(consumer=self.apps[0], producer=self.apps[1]), [self.signals[2]] + ) + + def test_properties(self): + """Test the properties of the signals.""" + properties = {"prop_from_0": "dummy0"} + self.assertDictEqual(self.signals[0].properties, properties) + interface = Interface(self.apps[0], self.apps[1]) + properties.update({"prop_from_1": "dummy1"}) + for signal in interface.get_directional_signals(self.apps[0], self.apps[1]): + self.assertDictEqual(signal.properties, properties) + self.assertDictEqual(self.signals[0].properties, properties) + + +class TestDomain(unittest.TestCase): + """Unit tests for the Domain class.""" + + def setUp(self): + """Set up the test case by creating dummy signals and apps, and initializing interfaces.""" + signals, apps = create_dummies() + self.signals = signals + self.apps = apps + self.interfaces = [ + Interface(self.apps[0], self.apps[1]), + Interface(self.apps[0], self.apps[2]), + Interface(self.apps[1], self.apps[2]), + ] + + def test_add_interface(self): + """Test the add_interface method of the Domain class.""" + domain = Domain() + domain.set_name("test") + domain.add_interface(self.interfaces[0]) + self.assertSetEqual(domain.clients, set(["dummy0", "dummy1"])) + self.assertSetEqual(set(domain.signals.keys()), set(["signal_0", "signal_2"])) + self.assertSetEqual(domain.signals["signal_0"].consumers, set(["dummy1"])) + self.assertSetEqual(domain.signals["signal_2"].consumers, set(["dummy0"])) + + def test_create_groups(self): + """Test the create_groups method of the Domain class.""" + domain = Domain() + domain.set_name("test") + domain.add_interface(self.interfaces[0]) + groups = domain.create_groups() + expected_signals = {"dummy0": ["signal_0"], "dummy1": ["signal_2"]} + for group_name, group in groups.items(): + self.assertCountEqual([s.name for s in group], expected_signals[group_name]) diff --git a/tests/interface/test_interface_application.py b/tests/interface/test_interface_application.py new file mode 100644 index 0000000..6976035 --- /dev/null +++ b/tests/interface/test_interface_application.py @@ -0,0 +1,194 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +import pathlib +import unittest +from unittest import mock + +from pybuild.interface.application import Application, Raster, Model +from pybuild.interface.base import Signal + + +class TestApplication(unittest.TestCase): + def test_parse_definition(self): + # Tested in pybuild. + pass + + def test_parse_ports(self): + app = Application() + app._insignals = set() + app._outsignals = set() + defined_ports = {'inports': set(), 'outports': set()} + port_data = { + 'inports': { + 'signal_1': { + 'configs': 'dummy' + } + }, + 'outports': { + 'signal_2': { + 'configs': 'dummy' + } + } + } + feature_cfg = mock.MagicMock() + feature_cfg.check_if_active_in_config.return_value = True + app.parse_ports(port_data, defined_ports, feature_cfg, 'model_1') + expected_data = { + 'inports': {'signal_1'}, + 'outports': {'signal_2'} + } + self.assertDictEqual(defined_ports, expected_data) + self.assertSetEqual({s.name for s in app.insignals}, expected_data['inports']) + self.assertSetEqual({s.name for s in app.outsignals}, expected_data['outports']) + + @mock.patch.object(Raster, 'parse_definition') + def test_get_rasters(self, raster_parser): + pybuild_raster_definition = { + 'SampleTimes': {'raster1': '0.01', 'raster2': '0.02'}, + 'Scheduled': { + 'raster1': ['model_1', 'model_2'], + 'raster2': ['model_3', 'model_4'] + } + } + app = Application() + app.pybuild['build_cfg'] = mock.MagicMock() + app.pybuild['build_cfg'].get_units_raster_cfg.return_value = pybuild_raster_definition + app._insignals = {'signal1'} + app._outsignals = set() + app._signals = {'signal1': {}} + app.pybuild['unit_vars'] = { + 'model_1': { + }, + 'model_2': { + } + } + rasters = app.get_rasters() + raster_parser.assert_any_call(('raster1', ['model_1', 'model_2'], {'signal1': {}})) + raster_parser.assert_any_call(('raster2', ['model_3', 'model_4'], {'signal1': {}})) + self.assertEqual(len(rasters), 2) + + def test_signals(self): + app = Application() + app.pybuild['unit_vars'] = { + 'model_1': { + 'outports': { + 'signal_1_1': { + 'configs': 'dummy' + }, + 'signal_1_2': { + 'configs': 'dummy' + }, + }, + 'inports': { + 'signal_2_1': { + 'configs': 'dummy' + }, + 'extern_1': { + 'configs': 'dummy' + }, + 'extern_2': { + 'configs': 'dummy' + }, + } + }, + 'model_2': { + 'outports': { + 'signal_2_1': { + 'configs': 'dummy' + }, + 'signal_2_2': { + 'configs': 'dummy' + }, + }, + 'inports': { + 'signal_1_1': { + 'configs': 'dummy' + }, + 'extern_2': { + 'configs': 'dummy' + }, + 'extern_3': { + 'configs': 'dummy' + }, + } + } + } + app.pybuild['feature_cfg'] = mock.MagicMock() + app.pybuild['feature_cfg'].check_if_active_in_config.return_value = True + self.assertSetEqual({s.name for s in app.insignals}, {'extern_1', 'extern_2', 'extern_3'}) + self.assertSetEqual({s.name for s in app.outsignals}, {'signal_1_1', 'signal_1_2', 'signal_2_1', 'signal_2_2'}) + + def test_signal_properties(self): + app = Application() + app.pybuild['build_cfg'] = mock.MagicMock() + app._insignals = set() + app._outsignals = {'signal1'} + signal_def = Signal('signal1', app) + signal_def.producer = 'model_1' + app._signals = {'signal1': signal_def} + app.pybuild['unit_vars'] = { + 'model_1': { + 'outports': { + 'signal1': { + 'configs': 'dummy', + }, + } + } + } + self.assertEqual(app.outsignals[0].properties['configs'], 'dummy') + + def test_get_name(self): + app = Application() + app.name = 'test' + self.assertEqual(app.get_name('dummy_path'), 'test') + + +class TestRaster(unittest.TestCase): + def test_parse_definition(self): + raster = Raster(None) + raster.parse_definition(('raster_name', ['model1', 'model2'], {})) + self.assertSetEqual(raster.models, {'model1', 'model2'}) + + def test_signals(self): + signals = {'signal1': Signal('signal1', None), + 'signal2': Signal('signal2', None), + 'signal3': Signal('signal3', None)} + signals['signal1'].producer = 'model1' + signals['signal2'].producer = 'model2' + signals['signal2'].consumers = 'model1' + signals['signal3'].consumers = 'model2' + raster = Raster(None) + raster.parse_definition(('raster_name', ['model1', 'model2'], signals)) + self.assertSetEqual(raster.models, {'model1', 'model2'}) + self.assertSetEqual({s.name for s in raster.insignals}, {'signal3'}) + self.assertSetEqual({s.name for s in raster.outsignals}, {'signal1', 'signal2'}) + + +class TestModel(unittest.TestCase): + def test_parse_definition(self): + model = Model(None) + dummy_model_config = {'inports': {'mdl_signal': {'name': 'mdl_signal'}}, 'outports': {}} + model._load_json = mock.MagicMock() + model._load_json.side_effect = [dummy_model_config] + model.parse_definition(('test', pathlib.Path('path', 'to', 'a', 'file'))) + self.assertSetEqual(model._insignals, set(['mdl_signal'])) + self.assertSetEqual(model._outsignals, set()) + + dummy_model_config_mdl = {'inports': {'mdl_signal': {'name': 'mdl_signal'}}, + 'outports': {}, + 'includes': ['dummy_model_c']} + dummy_model_config_c = {'inports': {'c_isignal': {'name': 'c_isignal'}}, + 'outports': {'c_osignal': {'name': 'c_osignal'}}} + model._load_json = mock.MagicMock() + model._load_json.side_effect = [dummy_model_config_mdl, dummy_model_config_c] + model.parse_definition(('test', pathlib.Path('path', 'to', 'a', 'file'))) + self.assertSetEqual(model._insignals, set(['mdl_signal', 'c_isignal'])) + self.assertSetEqual(model._outsignals, set(['c_osignal'])) + + def test_get_signal_properties(self): + model = Model(None) + signal_properties = {'a': 1, 'b': 2} + model._signal_specs = {'test': signal_properties} + signal = Signal('test', model) + self.assertDictEqual(signal.properties, signal_properties) diff --git a/tests/interface/test_interface_device_proxy.py b/tests/interface/test_interface_device_proxy.py new file mode 100644 index 0000000..295eea9 --- /dev/null +++ b/tests/interface/test_interface_device_proxy.py @@ -0,0 +1,689 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +import unittest +from unittest import mock + +from pybuild.interface.base import Signal +from pybuild.interface.device_proxy import DPAL, BadYamlFormat + + +class TestDPAL(unittest.TestCase): + def setUp(self): + self.interface_spec = { + "default": 3, + "domain": "test_domain", + "factor": 2, + "length": 4, + "offset": 1, + "property": "test_property", + "property_type": "Float32", + "variable": "test_signal", + "variable_type": "float32", + "range": {"min": 0, "max": 5}, + "init": 0, + "description": "Dummy description", + "unit": "Nm", + "group": None, + "strategy": "Always", + 'debug': False, + 'dependability': False, + 'port_name': None + } + self.signal_definition = { + "insignal": "test_signal", + "property": "test_property", + "type": "float32", + "offset": 1, + "factor": 2, + "default": 3, + "length": 4, + "min": 0, + "max": 5, + "enum": None, + "init": 0, + "description": "Dummy description", + "unit": "Nm", + "group": None, + "strategy": "Always", + 'dependability': False, + 'debug': False + } + self.dep_signal_definition = { + "insignal": "test_e2e_signal", + "property": "test_property", + "type": "float32", + "offset": 1, + "factor": 2, + "default": 3, + "length": 4, + "min": 0, + "max": 5, + "enum": None, + "init": 0, + "description": "Dummy description", + "unit": "Nm", + "group": "test_group", + "strategy": "Always", + 'dependability': True, + 'debug': False + } + self.e2e_sts_signal_definition = { + "insignal": "sVctest_domain_D_test_groupE2eSts", + "property": "test_property", + "type": "float32", + "offset": 1, + "factor": 2, + "default": 3, + "length": 4, + "min": 0, + "max": 5, + "enum": None, + "init": 255, + "description": "Dummy description", + "unit": "Nm", + "group": "test_group", + "strategy": "Always", + 'dependability': True, + 'debug': False + } + self.signal_spec = ( + "enum_0", + "test_domain", + "test_property", + "float32", + "Float32", + "Float32", + 1, + 2, + 3, + 4, + 0, + 5, + None, + 0, + "Dummy description", + "Nm", + None, + "Always", + False, + False, + None + ) + self.dep_signal_spec = ( + "enum_0", + "test_domain", + "test_property", + "float32", + "Float32", + "Float32", + 1, + 2, + 3, + 4, + 0, + 5, + None, + 0, + "Dummy description", + "Nm", + "test_group", + "Always", + False, + True, + None + ) + self.e2e_sts_signal_spec = ( + "enum_0", + "test_domain", + "test_groupE2eSts", + "UInt8", + "UInt8", + "UInt8", + 0, + 1, + None, + None, + 0, + 255, + None, + 255, + "E2E status code for E2E protected signal (group) test_e2e_signal.", + None, + "test_group", + "Always", + False, + True, + None + ) + self.signal_yaml = { + "default": 3, + "length": 4, + "name": "test_property", + "type": "Float32", + "range": {"min": 0, "max": 5}, + "description": "Dummy description", + "unit": "Nm" + } + self.outsignals = [ + { + "outsignal": "outsignal", + "property": "test_property", + "type": "Float32", + "offset": 1, + "factor": 2, + "default": 3, + "length": 4, + "min": 0, + "max": 5, + "enum": None, + "init": 0, + "description": "Dummy description", + "unit": "Nm", + "group": None, + "strategy": "Always", + "debug": False, + "dependability": False + }, + { + "outsignal": "outsignal_bad_strategy", + "property": "test_property", + "type": "Float32", + "offset": 1, + "factor": 2, + "default": 3, + "length": 4, + "min": 0, + "max": 5, + "enum": None, + "init": 0, + "description": "Dummy description", + "unit": "Nm", + "group": None, + "strategy": "OnChanged", + "debug": False, + "dependability": False + }, + { + "outsignal": "outsignal_nonexistent_strategy", + "property": "test_property", + "type": "Float32", + "offset": 1, + "factor": 2, + "default": 3, + "length": 4, + "min": 0, + "max": 5, + "enum": None, + "init": 0, + "description": "Dummy description", + "unit": "Nm", + "group": None, + "strategy": "NonExistent", + "debug": False, + "dependability": False + } + ] + app = mock.MagicMock() + app.get_domain_mapping.return_value = {"test": "test_domain"} + app.pybuild['build_cfg'].get_ecu_info.return_value = ("HI", None) + self.dummy_app = app + self.maxDiff = None + + def test_add_signals(self): + dpal = DPAL(self.dummy_app) + insignal1 = Signal("test_name_in1", None) + insignal2 = Signal("test_name_in2", None) + outsignal = Signal("test_name_out", None) + dpal.dp_translations = {"test_name_in1": {self.signal_spec}, + "test_name_in2": {self.signal_spec}, + "test_name_in_e2e": {self.dep_signal_spec}, + "test_name_out": {self.signal_spec}, } + dpal.e2e_sts_signals.add("test_name_in_e2e") + + dpal.add_signals([insignal1], "insignals") + expected = { + "other": {"insignals": {"test_name_in1", "test_name_in_e2e"}, "outsignals": set()}, + "dp": {"insignals": set(), "outsignals": {"test_property"}}, + } + expected_signal_primitives_list = ["test_domain.test_property.insignals"] + self.assertDictEqual(expected, dpal.signal_names) + self.assertListEqual(expected_signal_primitives_list, dpal.signal_primitives_list) + + dpal.add_signals([outsignal], "outsignals") + expected = { + "other": { + "insignals": {"test_name_in1", "test_name_in_e2e"}, + "outsignals": {"test_name_out"}, + }, + "dp": {"insignals": {"test_property"}, + "outsignals": {"test_property"}}, + } + expected_signal_primitives_list = ["test_domain.test_property.insignals", + "test_domain.test_property.outsignals"] + self.assertDictEqual(expected, dpal.signal_names) + self.assertListEqual(expected_signal_primitives_list, dpal.signal_primitives_list) + + exception_msg = "You can't write test_domain.test_property.insignals"\ + " as insignals since this primitive has been used."\ + " Run model_yaml_verification to identify exact models." + with self.assertRaises(Exception) as context: + dpal.add_signals([insignal2], "insignals") + self.assertEqual(exception_msg, str(context.exception)) + + def test_check_group_mixed_signals(self): + dpal = DPAL(self.dummy_app) + test_signal = list(self.signal_spec) + test_signal[16] = "signal_group_a" + test_signal_1 = tuple(test_signal) + test_signal[16] = "signal_group_a" + test_signal_2 = tuple(test_signal) + + dpal.dp_translations = {"test_signal_1": {test_signal_1}, + "test_signal_2": {test_signal_2} + } + + dpal.signal_names["other"]["insignals"] = { + "test_signal_1", + } + dpal.signal_names["other"]["outsignals"] = { + "test_signal_2", + } + expected_message = "Signal group signal_group_a for test_domain contains both consumed and produced signals" + + with self.assertRaises(AssertionError) as context: + dpal.check_groups() + self.assertEqual(expected_message, str(context.exception)) + + def test_check_group_mixed_signals_mixed_signal_groups(self): + dpal = DPAL(self.dummy_app) + test_signal = list(self.signal_spec) + test_signal[16] = "signal_group_a" + test_signal_1 = tuple(test_signal) + test_signal[16] = "signal_group_b" + test_signal_2 = tuple(test_signal) + test_signal[16] = "signal_group_b" + test_signal_1 = tuple(test_signal) + + dpal.dp_translations = {"test_signal_1": {test_signal_1}, + "test_signal_2": {test_signal_2} + } + + dpal.signal_names["other"]["insignals"] = { + "test_signal_1", + } + dpal.signal_names["other"]["outsignals"] = { + "test_signal_2", + } + expected_message = "Signal group signal_group_b for test_domain contains both consumed and produced signals" + + with self.assertRaises(AssertionError) as context: + dpal.check_groups() + self.assertEqual(expected_message, str(context.exception)) + + def test_clear_signal_names(self): + dpal = DPAL(self.dummy_app) + insignal1 = Signal("test_name_in1", None) + insignal2 = Signal("test_name_in2", None) + outsignal = Signal("test_name_out", None) + + dpal.add_signals([insignal1, insignal2], "insignals") + expected = { + "other": {"insignals": {"test_name_in1"}, "outsignals": set()}, + "dp": {"insignals": set(), "outsignals": set()}, + } + + dpal.add_signals([outsignal], "outsignals") + dpal.clear_signal_names() + expected = { + "other": {"insignals": set(), "outsignals": set()}, + "dp": {"insignals": set(), "outsignals": set()}, + } + self.assertDictEqual(expected, dpal.signal_names) + + def test_parse_signal_definitions(self): + signal_definitions = {"test": [self.signal_definition]} + app = self.dummy_app + app.insignals = [Signal("test_signal", None)] + app.get_signal_properties.return_value = {"type": "Float32"} + dpal = DPAL(app) + dpal.parse_signal_definitions(signal_definitions) + expected = {"test_signal": {self.signal_spec}} + self.assertDictEqual(dpal.dp_translations, expected) + + def test_parse_e2e_group_signal_definitions(self): + signal_definitions = {"test": [self.dep_signal_definition]} + app = self.dummy_app + app.insignals = [Signal("test_e2e_signal", None)] + app.get_signal_properties.return_value = {"type": "Float32"} + dpal = DPAL(app) + dpal.parse_signal_definitions(signal_definitions, 'test_group') + expected = { + "test_e2e_signal": {self.dep_signal_spec}, + "sVctest_domain_D_test_groupE2eSts": {self.e2e_sts_signal_spec} + } + self.assertDictEqual(dpal.dp_translations, expected) + + def test_parse_bad_signal_definition(self): + """E2E status signals cannot be in any yaml interface file.""" + signal_definitions = {"test": [self.e2e_sts_signal_definition]} + app = self.dummy_app + app.insignals = [Signal("sVctest_domain_D_test_groupE2eSts", None)] + app.get_signal_properties.return_value = {"type": "Float32"} + dpal = DPAL(app) + with self.assertRaises(BadYamlFormat): + dpal.parse_signal_definitions(signal_definitions, 'test_group') + + def test_parse_signal_definitions_output_strategies(self): + signal_definitions = {"test": self.outsignals} + app = self.dummy_app + outsignal1 = Signal("outsignal", None) + outsignal2 = Signal("outsignal_bad_strategy", None) + outsignal3 = Signal("outsignal_nonexistent_strategy", None) + app.outsignals = [outsignal1, outsignal2, outsignal3] + app.get_signal_properties.return_value = {"type": "Float32"} + dpal = DPAL(app) + dpal.parse_signal_definitions(signal_definitions) + expected = { + "outsignal": {( + "enum_0", + "test_domain", + "test_property", + "Float32", + "Float32", + "Float32", + 1, + 2, + 3, + 4, + 0, + 5, + None, + 0, + "Dummy description", + "Nm", + None, + "Always", + False, + False, + None + )}, + "outsignal_bad_strategy": {( + "enum_0", + "test_domain", + "test_property", + "Float32", + "Float32", + "Float32", + 1, + 2, + 3, + 4, + 0, + 5, + None, + 0, + "Dummy description", + "Nm", + None, + "Always", + False, + False, + None + )}, + "outsignal_nonexistent_strategy": {( + "enum_0", + "test_domain", + "test_property", + "Float32", + "Float32", + "Float32", + 1, + 2, + 3, + 4, + 0, + 5, + None, + 0, + "Dummy description", + "Nm", + None, + "Always", + False, + False, + None + )} + } + self.assertDictEqual(dpal.dp_translations, expected) + + def test_dp_spec_to_dict(self): + result = DPAL(self.dummy_app).dp_spec_to_dict(self.signal_spec, "test_signal") + self.assertDictEqual(result, self.interface_spec) + + def test_insignals_dp_manifest_signals(self): + dpal = DPAL(self.dummy_app) + suffix = "unittest" + dpal.dp_translations = {"test_signal": {self.signal_spec}} + dpal.signal_names["other"]["insignals"] = { + "test_signal", + } + result = dpal.insignals_dp_manifest(suffix) + expected = [{"name": "unittest", "signal_groups": [{"name": self.signal_yaml["name"]}]}] + self.assertListEqual(result, expected) + + def test_insignals_dp_manifest_signal_groups(self): + dpal = DPAL(self.dummy_app) + suffix = "unittest" + test_signal = list(self.signal_spec) + test_signal[16] = "signal_group_a" + test_signal_1 = tuple(test_signal) + + dpal.dp_translations = {"test_signal_1": {test_signal_1}, + } + dpal.signal_names["other"]["insignals"] = { + "test_signal_1", + } + result = dpal.insignals_dp_manifest(suffix) + expected = [{"name": "unittest", "signal_groups": [{"name": "signal_group_a"}]}] + self.assertListEqual(result, expected) + + def test_outsignal_dp_manifest_signals(self): + dpal = DPAL(self.dummy_app) + suffix = "unittest" + dpal.dp_translations = {"test_signal": {self.signal_spec}} + dpal.signal_names["other"]["outsignals"] = { + "test_signal", + } + result = dpal.outsignals_dp_manifest(suffix) + expected = [{"name": "unittest", "signals": [self.signal_yaml], "signal_groups": []}] + self.assertListEqual(result, expected) + + def test_outsignal_dp_manifest_signal_groups(self): + dpal = DPAL(self.dummy_app) + suffix = "unittest" + test_signal = list(self.signal_spec) + test_signal[16] = "signal_group_a" + test_signal_1 = tuple(test_signal) + + dpal.dp_translations = {"test_signal_1": {test_signal_1}, + } + dpal.signal_names["other"]["outsignals"] = { + "test_signal_1", + } + result = dpal.outsignals_dp_manifest(suffix) + expected = [{ + "name": "unittest", + "signals": [], + "signal_groups": [{"name": "signal_group_a", "signals": [self.signal_yaml]}]}] + self.assertListEqual(result, expected) + + def test_cleanup_dp_manifest_signal_group(self): + dpal = DPAL(self.dummy_app) + dpal.dp_translations = {"test_signal": {self.signal_spec}} + dpal.signal_names["other"]["outsignals"] = { + "test_signal", + } + client = { + "name": "unittest", + "consumes": [{"name": "unittest", "signal_groups": []}], + "produces": [{"name": "unittest", "signals": [self.signal_yaml], "signal_groups": []}] + } + dpal.cleanup_dp_manifest(client) + expected = {"name": "unittest", "produces": [{"name": "unittest", "signals": [self.signal_yaml]}]} + self.assertDictEqual(client, expected) + + def test_cleanup_dp_manifest_signals(self): + dpal = DPAL(self.dummy_app) + test_signal = list(self.signal_spec) + test_signal[16] = "signal_group_a" + test_signal_1 = tuple(test_signal) + test_signal[16] = "signal_group_b" + test_signal_2 = tuple(test_signal) + + dpal.dp_translations = {"test_signal_1": {test_signal_1}, "test_signal_2": {test_signal_2}} + dpal.signal_names["other"]["insignals"] = { + "test_signal_1", + } + dpal.signal_names["other"]["outsignals"] = { + "test_signal_2", + } + client = { + "name": "unittest", + "consumes": [{"name": "unittest", "signal_groups": [{"name": "signal_group_a"}]}], + "produces": [{ + "name": "unittest", "signals": [], + "signal_groups": [{"name": "signal_group_b", "signals": [self.signal_yaml]}]}] + } + dpal.cleanup_dp_manifest(client) + expected = {"name": "unittest", + "consumes": [{"name": "unittest", "signal_groups": [{"name": "signal_group_a"}]}], + "produces": [{"name": "unittest", "signal_groups": [{"name": "signal_group_b", + "signals": [self.signal_yaml]}]}] + } + self.assertDictEqual(client, expected) + + def test_to_manifest_signal_groups(self): + dpal = DPAL(self.dummy_app) + client_name = "unittest" + test_signal = list(self.signal_spec) + test_signal[16] = "signal_group_a" + test_signal_1 = tuple(test_signal) + test_signal[16] = "signal_group_b" + test_signal_2 = tuple(test_signal) + + dpal.dp_translations = {"test_signal_1": {test_signal_1}, "test_signal_2": {test_signal_2}} + dpal.signal_names["other"]["insignals"] = { + "test_signal_1", + } + dpal.signal_names["other"]["outsignals"] = { + "test_signal_2", + } + result = dpal.to_manifest(client_name) + expected = { + "signal_info": { + "clients": [ + { + "name": "unittest", + "produces": [{ + "name": "unittest", + "signal_groups": [ + { + "name": "signal_group_b", + "signals": [ + { + "default": 3, + "length": 4, + "name": "test_property", + "type": "Float32", + "range": {"min": 0, "max": 5}, + "description": "Dummy description", + "unit": "Nm" + }, ] + }], + }], + "consumes": [{"name": "unittest", "signal_groups": [{"name": "signal_group_a"}, ]}] + } + ], + "version": 0.2, + } + } + + self.assertDictEqual(result, expected) + + def test_to_manifest_signals(self): + dpal = DPAL(self.dummy_app) + client_name = "unittest" + dpal.dp_translations = {"test_signal": {self.signal_spec}} + dpal.signal_names["other"]["outsignals"] = { + "test_signal", + } + result = dpal.to_manifest(client_name) + expected = { + "signal_info": { + "clients": [ + { + "name": "unittest", + "produces": [{ + "name": "unittest", + "signals": [ + { + "default": 3, + "length": 4, + "name": "test_property", + "type": "Float32", + "range": {"min": 0, "max": 5}, + "description": "Dummy description", + "unit": "Nm" + } + ], + }], + } + ], + "version": 0.2, + } + } + + self.assertDictEqual(result, expected) + + def test_domain_filter(self): + dpal = DPAL(self.dummy_app) + dpal.domain_filter = ["test_domain"] # Matches self.signal_spec + client_name = "unittest" + # Modify signal_spec to not match filter + domain_position = dpal.dp_position.domain.value + property_position = dpal.dp_position.property.value + signal_spec2 = self.signal_spec[:domain_position] + \ + ("another_domain",) + \ + self.signal_spec[domain_position+1:property_position] + \ + ("another_property",) + \ + self.signal_spec[property_position+1:] + dpal.dp_translations = {"test_signal1": {self.signal_spec}, + "test_signal2": {signal_spec2}} + dpal.signal_names["other"]["outsignals"] = { + "test_signal1", + "test_signal2", + } + result = dpal.to_manifest(client_name) + expected = { + "signal_info": { + "clients": [ + { + "name": "unittest", + "produces": [{ + "name": "unittest", + "signals": [self.signal_yaml] + }], + } + ], + "version": 0.2, + } + } + self.assertDictEqual(result, expected) + + def test_empty_manifest(self): + # If we have no matching signals, don't create a manifest + dpal = DPAL(self.dummy_app) + client_name = "unittest" + dpal.device_filter = ["no_match"] + self.assertIsNone(dpal.to_manifest(client_name)) diff --git a/tests/interface/test_interface_hal.py b/tests/interface/test_interface_hal.py new file mode 100644 index 0000000..f1becc9 --- /dev/null +++ b/tests/interface/test_interface_hal.py @@ -0,0 +1,153 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Test cases for the HAL interface.""" + +import unittest +from unittest import mock + +from pybuild.interface.base import Signal +from pybuild.interface.hal import HALA + +SIGNAL_SPEC = ( + "enum_0", # enum padding + "property1", # property + "float", # property_interface_type + "Float32", # variable_type + 0, # offset + 1, # factor + 0, # default + 1, # length + -100, # min + 100, # max + False, # enum + 0, # init + "Description", # description + "Nm", # unit + "API", # endpoint + "interface", # api + "properties", # variant +) + + +class TestHal(unittest.TestCase): + """Test cases for the HAL interface.""" + + def setUp(self): + dummy_app = mock.MagicMock() + self.hal = HALA(dummy_app) + + def test_add_signals(self): + """Test add_signals method.""" + insignal1 = Signal("test_name_in1", None) + insignal2 = Signal("test_name_in2", None) + outsignal = Signal("test_name_out", None) + signal_spec = SIGNAL_SPEC + + test_signal1 = list(signal_spec) + test_signal1[14] = "endpoint1" + test_signal_1 = tuple(test_signal1) + + test_signal2 = list(signal_spec) + test_signal2[14] = "endpoint1" + test_signal_2 = tuple(test_signal2) + + test_signal3 = list(signal_spec) + test_signal3[14] = "endpoint3" + test_signal_3 = tuple(test_signal3) + self.hal.translations = { + "test_name_in1": {test_signal_1}, + "test_name_in2": {test_signal_2}, + "test_name_out": {test_signal_3}, + } + + self.hal.add_signals([insignal1], "insignals") + expected = { + "app": {"insignals": {"test_name_in1"}, "outsignals": set()}, + "api": {"insignals": set(), "outsignals": {"property1"}}, + } + expected_signal_primitives_list = ["interface.properties.endpoint1.property1.insignals"] + self.assertDictEqual(expected, self.hal.signal_names) + self.assertListEqual(expected_signal_primitives_list, self.hal.signal_primitives_list) + + self.hal.add_signals([outsignal], "outsignals") + expected = { + "app": { + "insignals": {"test_name_in1"}, + "outsignals": {"test_name_out"}, + }, + "api": {"insignals": {"property1"}, "outsignals": {"property1"}}, + } + self.assertDictEqual(expected, self.hal.signal_names) + expected_signal_primitives_list = ["interface.properties.endpoint1.property1.insignals", + "interface.properties.endpoint3.property1.outsignals"] + self.assertDictEqual(expected, self.hal.signal_names) + self.assertListEqual(expected_signal_primitives_list, self.hal.signal_primitives_list) + + exception_msg = "You can't write interface.properties.endpoint1.property1.insignals"\ + " as insignals since this primitive has been used."\ + " Run model_yaml_verification to identify exact models." + with self.assertRaises(Exception) as context: + self.hal.add_signals([insignal2], "insignals") + self.assertEqual(exception_msg, str(context.exception)) + + def test_extract_definition(self): + """Test extract_definition method.""" + # Old hals + definition = [{ + 'ClutchModeRequest': [ + { + 'outsignal': 'sVcScOut_D_DftlCluModReqReLe', + 'property': 'rear_left' + }, + { + 'outsignal': 'sVcScOut_D_DftlCluModReqReRi', + 'property': 'rear_right' + } + ], + 'ClutchTorqueCapacityRequest': [ + { + 'outsignal': 'sVcScOut_Tq_DftlCluTqCpReqReLe', + 'property': 'rear_left' + }, + { + 'outsignal': 'sVcScOut_Tq_DftlCluTqCpReqReRi', + 'property': 'rear_right' + } + ] + }] + expected = {'hals': definition} + result = self.hal.extract_definition(definition) + self.assertDictEqual(expected, result) + + # New HALs (as of 2021-07-08) supporting methods (and properties) + definition = { + 'methods': [{ + 'RequestClutchMode': [ + { + 'outsignal': 'sVcScOut_D_DftlCluModReqReLe', + 'property': 'rear_left' + }, + { + 'outsignal': 'sVcScOut_D_DftlCluModReqReRi', + 'property': 'rear_right' + } + ], + 'RequestClutchTorque': [ + { + 'outsignal': 'sVcScOut_Tq_DftlCluTqCpReqReLe', + 'property': 'rear_left' + }, + { + 'outsignal': 'sVcScOut_Tq_DftlCluTqCpReqReRi', + 'property': 'rear_right' + } + ] + }] + } + expected = { + 'properties': [], + 'methods': definition['methods'] + } + result = self.hal.extract_definition(definition) + self.assertDictEqual(expected, result) diff --git a/tests/interface/test_interface_service.py b/tests/interface/test_interface_service.py new file mode 100644 index 0000000..08f76ec --- /dev/null +++ b/tests/interface/test_interface_service.py @@ -0,0 +1,786 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +import unittest +from unittest import mock +from pathlib import Path + +from pybuild.interface.base import Signal +from pybuild.interface.service import ServiceFramework, get_service_list +from pybuild.interface.csp_api import MissingApi + + +SIGNAL_SPEC = ( + "enum_0", # enum padding + "property1", # property + "Float32", # property_interface_type + "Float32", # variable_type + 0, # offset + 1, # factor + 0, # default + 1, # length + -100, # min + 100, # max + False, # enum + 0, # init + "Description", # description + "Nm", # unit + "API", # endpoint + "interface", # api + "properties", # variant + "Always", # strategy + False, # debug + False, # dependability +) + + +class TestFunctions(unittest.TestCase): + def test_get_service_list(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock( + return_value={'interface': 'service'} + ) + service_list = get_service_list(dummy_app) + expected_services = ("LIST(APPEND extra_libraries" + " ${SERVICE_LIBINTERFACE_SERVICE_PROXY})\n" + "LIST(APPEND EXTRA_INCLUDE_DIRS" + " ${SERVICE_INCLUDE_DIR})\n") + + self.assertEqual(expected_services, service_list) + + +class TestSfw(unittest.TestCase): + def test_parse_definition(self): + spec = { + 'services': {} + } + dummy_app = mock.MagicMock() + sfw = ServiceFramework(dummy_app) + sfw.read_translation = mock.MagicMock(return_value=spec) + sfw.parse_definition('no_file') + self.assertDictEqual(sfw.translations, {}) + + def test_add_signals(self): + dummy_app = mock.MagicMock() + sfw = ServiceFramework(dummy_app) + insignal1 = Signal("test_name_in1", None) + insignal2 = Signal("test_name_in2", None) + outsignal = Signal("test_name_out", None) + signal_spec = SIGNAL_SPEC + + test_signal1 = list(signal_spec) + test_signal1[14] = "endpoint1" + test_signal_1 = tuple(test_signal1) + + test_signal2 = list(signal_spec) + test_signal2[14] = "endpoint2" + test_signal_2 = tuple(test_signal2) + + test_signal3 = list(signal_spec) + test_signal3[14] = "endpoint3" + test_signal_3 = tuple(test_signal3) + sfw.translations = { + "test_name_in1": {test_signal_1}, + "test_name_in2": {test_signal_2}, + "test_name_out": {test_signal_3}, + } + + sfw.add_signals([insignal1], "insignals") + expected = { + "app": {"insignals": {"test_name_in1"}, "outsignals": set()}, + "api": {"insignals": set(), "outsignals": {"property1"}}, + } + expected_signal_primitives_list = ["interface.properties.endpoint1.property1.insignals"] + self.assertDictEqual(expected, sfw.signal_names) + self.assertListEqual(expected_signal_primitives_list, sfw.signal_primitives_list) + + sfw.add_signals([insignal2], "insignals") + expected = { + "app": { + "insignals": {"test_name_in1", "test_name_in2"}, + "outsignals": set(), + }, + "api": {"insignals": set(), "outsignals": {"property1"}}, + } + self.assertDictEqual(expected, sfw.signal_names) + expected_signal_primitives_list = ["interface.properties.endpoint1.property1.insignals", + "interface.properties.endpoint2.property1.insignals"] + self.assertDictEqual(expected, sfw.signal_names) + self.assertListEqual(expected_signal_primitives_list, sfw.signal_primitives_list) + + sfw.add_signals([outsignal], "outsignals") + expected = { + "app": { + "insignals": {"test_name_in1", "test_name_in2"}, + "outsignals": {"test_name_out"}, + }, + "api": {"insignals": {"property1"}, "outsignals": {"property1"}}, + } + self.assertDictEqual(expected, sfw.signal_names) + expected_signal_primitives_list = ["interface.properties.endpoint1.property1.insignals", + "interface.properties.endpoint2.property1.insignals", + "interface.properties.endpoint3.property1.outsignals"] + self.assertDictEqual(expected, sfw.signal_names) + self.assertListEqual(expected_signal_primitives_list, sfw.signal_primitives_list) + + def test_check_group_mixed_signals(self): + dummy_app = mock.MagicMock() + sfw = ServiceFramework(dummy_app) + signal_spec = SIGNAL_SPEC + test_signal = list(signal_spec) + test_signal_1 = tuple(test_signal) + test_signal_2 = tuple(test_signal) + + sfw.translations = { + "test_signal_1": {test_signal_1}, + "test_signal_2": {test_signal_2} + } + + sfw.signal_names["app"]["insignals"] = { + "test_signal_1", + } + sfw.signal_names["app"]["outsignals"] = { + "test_signal_2", + } + expected_message = "Signal endpoint API for interface contains both consumed and produced signals" + + with self.assertRaises(AssertionError) as context: + sfw.check_endpoints() + self.assertEqual(expected_message, str(context.exception)) + + def test_missing_service(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'other_interface': 'service'}) + dummy_app.get_services_file = mock.MagicMock(return_value=Path('file')) + insignal1 = Signal("signal1", dummy_app) + insignal2 = Signal("signal2", dummy_app) + dummy_app.insignals = [insignal1, insignal2] + dummy_app.get_signal_properties = mock.MagicMock( + side_effect=[ + {'type': 'Float32'}, + {'type': 'Float32'} + ] + ) + sfw = ServiceFramework(dummy_app) + service_definitions = { + "interface": { + "properties": [ + { + "API": [ + { + "insignal": "signal1", + "property": "property1" + }, + { + "insignal": "signal2", + "property": "property2" + }, + ] + } + ] + } + } + expected_message = "Api interface missing from file" + with self.assertRaises(MissingApi) as context: + sfw.parse_api_definitions(service_definitions) + self.assertEqual(expected_message, context.exception.message) + + def test_parse_api_definitions(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + dummy_app.insignals = [ + Signal("signal1", None), + Signal("signal2", None), + Signal("signal3", None), + Signal("signal4", None), + Signal("signal5", None) + ] + dummy_app.get_signal_properties = mock.MagicMock( + side_effect=[ + {'type': 'Float32'}, + {'type': 'Float32'}, + {'type': 'Float32'}, + {'type': 'Float32'}, + {'type': 'Float32'} + ] + ) + sfw = ServiceFramework(dummy_app) + service_definitions = { + "interface": { + "properties": [ + { + "API": [ + { + "insignal": "signal1", + "property": "property1" + }, + { + "insignal": "signal2", + "property": "property2" + }, + ], + "RAW_0": [ + { + "insignal": "signal3", + } + ], + "RAW_1": [ + { + "insignal": "signal4", + "property": None + } + ], + "RAW_2": [ + { + "insignal": "signal5", + "property": "" + } + ], + } + ] + } + } + sfw.parse_api_definitions(service_definitions) + expected = { + 'signal1': {('enum_0', 'property1', 'Float32', None, None, None, None, None, None, None, + None, 0, None, None, 'API', 'interface', 'properties', 'Always', False, False)}, + 'signal2': {('enum_0', 'property2', 'Float32', None, None, None, None, None, None, None, + None, 0, None, None, 'API', 'interface', 'properties', 'Always', False, False)}, + 'signal3': {('enum_0', None, 'Float32', None, None, None, None, None, None, None, + None, 0, None, None, 'RAW_0', 'interface', 'properties', 'Always', False, False)}, + 'signal4': {('enum_0', None, 'Float32', None, None, None, None, None, None, None, + None, 0, None, None, 'RAW_1', 'interface', 'properties', 'Always', False, False)}, + 'signal5': {('enum_0', None, 'Float32', None, None, None, None, None, None, None, + None, 0, None, None, 'RAW_2', 'interface', 'properties', 'Always', False, False)} + } + self.assertDictEqual(sfw.translations, expected) + + def test_parse_property_definitions_output_strategies(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + outsignal1 = Signal("signal1", None) + outsignal2 = Signal("signal2", None) + outsignal3 = Signal("signal3", None) + dummy_app.get_signal_properties = mock.MagicMock( + side_effect=[ + {'type': 'Float32'}, + {'type': 'Float32'}, + {'type': 'Float32'} + ] + ) + dummy_app.outsignals = [outsignal1, outsignal2, outsignal3] + sfw = ServiceFramework(dummy_app) + signal_definitions = { + "interface": [ + { + "outsignal": "signal1", + "strategy": "Always" # Correct + }, + { + "outsignal": "signal2", + "strategy": "OnChanged" # Not allowed for outsignals + }, + { + "outsignal": "signal3", + "strategy": "NonExistent" # Invalid strategy + } + ] + } + + sfw.parse_property_definitions(signal_definitions, 'API', 'properties') + expected = { + 'signal1': {( + 'enum_0', + None, + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + )}, + 'signal2': {( + 'enum_0', + None, + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + )}, + 'signal3': {( + 'enum_0', + None, + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + )} + } + self.assertEqual(sfw.translations, expected) + + def test_parse_property_definitions_level_0(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + insignal1 = Signal("signal1", None) + dummy_app.get_signal_properties = mock.MagicMock( + side_effect=[ + {'type': 'Float32'}, + ] + ) + dummy_app.insignals = [insignal1] + sfw = ServiceFramework(dummy_app) + signal_definitions = { + "interface": [ + { + "insignal": "signal1", + }, + ] + } + + sfw.parse_property_definitions(signal_definitions, 'API', 'properties') + expected = { + 'signal1': {( + 'enum_0', + None, + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + )} + } + self.assertEqual(sfw.translations, expected) + + def test_parse_property_definitions_level_1(self): + dummy_app = mock.MagicMock() + insignal1 = Signal("signal1", None) + insignal2 = Signal("signal2", None) + dummy_app.get_signal_properties = mock.MagicMock( + side_effect=[ + {'type': 'Float32'}, + {'type': 'Float32'} + ] + ) + dummy_app.insignals = [insignal1, insignal2] + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + sfw = ServiceFramework(dummy_app) + signal_definitions = { + "interface": [ + { + "insignal": "signal1", + "property": "property1" + }, + { + "insignal": "signal2", + "property": "property2" + } + ] + } + + sfw.parse_property_definitions(signal_definitions, 'API', 'properties') + expected = { + 'signal1': {( + 'enum_0', + 'property1', + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + )}, + 'signal2': {( + 'enum_0', + 'property2', + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + )} + } + self.assertEqual(sfw.translations, expected) + + def test_parse_property_definitions_level_x(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + dummy_app.get_signal_properties = mock.MagicMock( + return_value={'type': 'Float32'} + ) + dummy_app.insignals = [ + Signal("signal1", dummy_app), + Signal("signal2", dummy_app), + Signal("signal3", dummy_app), + Signal("signal4", dummy_app), + ] + sfw = ServiceFramework(dummy_app) + signal_definitions = { + "interface": [ + { + "insignal": "signal1", + "property": "property0.member0" + }, + { + "insignal": "signal2", + "property": "property0.member1" + }, + { + "insignal": "signal3", + "property": "property1.member0.member0" + }, + { + "insignal": "signal4", + "property": "property1.member1.member0.member0" + }, + ] + } + + sfw.parse_property_definitions(signal_definitions, 'API', 'properties') + expected = { + 'signal1': { + ( + 'enum_0', + 'property0.member0', + 'Float32', + None, + None, + None, + None, + None, + None, + None, + None, + 0, + None, + None, + 'API', + 'interface', + 'properties', + 'Always', + False, + False + ) + }, + 'signal2': {( + 'enum_0', 'property0.member1', 'Float32', None, None, None, None, None, None, None, + None, 0, None, None, 'API', 'interface', 'properties', 'Always', False, False + )}, + 'signal3': {( + 'enum_0', 'property1.member0.member0', 'Float32', None, None, None, None, None, None, + None, None, 0, None, None, 'API', 'interface', 'properties', 'Always', False, False + )}, + 'signal4': {( + 'enum_0', 'property1.member1.member0.member0', 'Float32', None, None, None, None, None, None, + None, None, 0, None, None, 'API', 'interface', 'properties', 'Always', False, False + )} + } + self.assertEqual(sfw.translations, expected) + + def test_spec_to_dict(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + sfw = ServiceFramework(dummy_app) + result = sfw.spec_to_dict( + SIGNAL_SPEC, + 'signal1' + ) + expected = { + 'api': 'interface', + 'property_type': 'Float32', + 'endpoint': 'API', + 'default': 0, + 'description': 'Description', + 'factor': 1, + 'init': 0, + 'length': 1, + 'offset': 0, + 'property': 'property1', + 'range': {'max': 100, 'min': -100}, + 'unit': 'Nm', + 'variable': 'signal1', + 'variable_type': 'Float32', + 'variant': 'properties', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + } + self.assertDictEqual(result, expected) + + def test_to_dict(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + dummy_app.get_signal_properties = mock.MagicMock( + return_value={'type': 'Float32'} + ) + insignal1 = Signal("signal1", dummy_app) + insignal2 = Signal("signal2", dummy_app) + dummy_app.insignals = [insignal1, insignal2] + sfw = ServiceFramework(dummy_app) + service_definitions = { + "interface": { + "properties": [ + { + "API": [ + { + "insignal": "signal1", + "property": "property1" + }, + { + "insignal": "signal2", + "property": "property2" + }, + ] + } + ] + } + } + sfw.parse_api_definitions(service_definitions) + sfw.add_signals([insignal1, insignal2], 'insignals') + result = sfw.to_dict() + expected = { + 'consumer': [ + { + 'api': 'interface', + 'property_type': 'Float32', + 'endpoint': 'API', + 'default': None, + 'description': None, + 'factor': None, + 'init': 0, + 'length': None, + 'offset': None, + 'property': 'property1', + 'range': {'max': None, 'min': None}, + 'unit': None, + 'variable': 'signal1', + 'variable_type': None, + 'variant': 'properties', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + }, + { + 'api': 'interface', + 'property_type': 'Float32', + 'endpoint': 'API', + 'default': None, + 'description': None, + 'factor': None, + 'init': 0, + 'length': None, + 'offset': None, + 'property': 'property2', + 'range': {'max': None, 'min': None}, + 'unit': None, + 'variable': 'signal2', + 'variable_type': None, + 'variant': 'properties', + 'strategy': 'Always', + 'debug': False, + 'dependability': False + } + ], + 'producer': [] + } + self.assertDictEqual(expected, result) + + def test_to_model(self): + dummy_app = mock.MagicMock() + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + insignal1 = Signal("signal1", dummy_app) + insignal2 = Signal("signal2", dummy_app) + dummy_app.insignals = [insignal1, insignal2] + dummy_app.get_signal_properties = mock.MagicMock( + return_value={ + 'type': 'Float32', + 'description': 'test description', + 'unit': 'test unit' + } + ) + + dummy_app.insignals = [insignal1, insignal2] + sfw = ServiceFramework(dummy_app) + inherit_properties = [ + {"destination": "description", "source": "description"}, + {"destination": "unit", "source": "unit"}, + ] + + service_definitions = { + "interface": { + "properties": [ + { + "API": [ + { + "insignal": "signal1", + "property": "property1" + }, + { + "insignal": "signal2", + "property": "property2" + }, + ], + "API2": [ + { + "insignal": "signal1", + } + ] + } + ] + } + } + sfw.parse_api_definitions(service_definitions) + sfw.add_signals([insignal1, insignal2], 'insignals', inherit_properties) + expected = { + 'description': { + 'brief': 'Internal interface for associated application.', + 'full': 'This interface should only be used by the associated application.' + }, + 'name': '', + 'properties': [ + { + 'accessors': 'r-', + 'description': { + 'brief': 'API2', + 'full': 'test description'}, + 'name': 'API2', + 'type': 'Float32', + 'unit': 'test unit' + }, + { + 'accessors': 'r-', + 'description': { + 'brief': 'API', + 'full': 'Generated from project without custom ' + 'description'}, + 'name': 'API', + 'type': 'API', + 'unit': 'struct' + }, + ], + 'types': [ + { + 'description': { + 'brief': 'API', + 'full': 'Generated from project without custom ' + 'description'}, + 'kind': 'struct', + 'members': [{'name': 'property1', 'type': 'Float32'}, + {'name': 'property2', 'type': 'Float32'}], + 'name': 'API'}], + 'version': '${SERVICE_VERSION}' + } + result = sfw.to_model('internal') + self.assertDictEqual(result, expected) + + def test_properties_service_model(self): + dummy_app = mock.MagicMock() + dummy_app.get_signal_properties = mock.MagicMock( + return_value={'type': 'Float32'} + ) + dummy_app.get_service_mapping = mock.MagicMock(return_value={'interface': 'service'}) + insignal1 = Signal("signal1", dummy_app) + dummy_app.insignals = [insignal1] + sfw = ServiceFramework(dummy_app) + sfw.signal_names["app"]["insignals"] = {'signal1'} + sfw.translations = { + "signal1": {SIGNAL_SPEC}, + } + properties, types = sfw.properties_service_model('internal') + expected_properties = [{ + 'name': 'API', + 'type': 'API', + 'unit': 'struct', + 'accessors': 'r-', + 'description': { + 'brief': 'API', + 'full': 'Generated from project without custom description' + } + }] + expected_types = [{ + 'name': 'API', + 'kind': 'struct', + 'description': { + 'brief': 'API', + 'full': 'Generated from project without custom description'}, + 'members': [{'name': 'property1', 'type': 'Float32'}] + }] + self.assertCountEqual(properties, expected_properties) + self.assertCountEqual(types, expected_types) diff --git a/tests/interface/test_model_yaml_verification.py b/tests/interface/test_model_yaml_verification.py new file mode 100644 index 0000000..820b62a --- /dev/null +++ b/tests/interface/test_model_yaml_verification.py @@ -0,0 +1,318 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module to test the ModelYmlVerification class.""" + + +import unittest +from unittest import mock + +from pybuild.interface.model_yaml_verification import ModelYmlVerification + + +class TestModelYamlVerification(unittest.TestCase): + """Unit tests for the ModelYmlVerification class.""" + + def test_verify_outsignals(self): + """Test the verify_signals method with outsignals.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.app_outsignals = {} + modelyamlver.raw = {"dummy_dp": [{"property": "test_outsignal", "outsignal": "test_outsignal"}]} + exception_msg = "ERROR:root:test_outsignal is not defined as an outsignal in json file\n" + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Different properties connected to the same outsignal in the same device proxy. + modelyamlver.app_outsignals = ["test_outsignal"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "outsignal": "test_outsignal"}, + {"property": "test_property2", "outsignal": "test_outsignal"}, + ] + } + + exception_msg = ( + "ERROR:root:You can't connect a signal test_outsignal in dummy_model model to the same " + "interface (dummy_dp) twice. It's already connected as " + "dummy_dp.test_property.test_outsignal in model dummy_model.\n" + ) + + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Different properties connected to the same outsignal in different device proxies. + modelyamlver.app_outsignals = ["test_outsignal"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "outsignal": "test_outsignal"}, + ], + "dummy_dp2": [{"property": "test_property2", "outsignal": "test_outsignal"}], + } + + expected_signal_properties = { + "dummy_model": ["dummy_dp.test_property.test_outsignal", "dummy_dp2.test_property2.test_outsignal"], + } + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(expected_signal_properties, modelyamlver.signal_properties) + + # Different properties connected to the same outsignal in different device proxies. + modelyamlver.app_outsignals = ["test_outsignal2", "test_outsignal"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property2", "outsignal": "test_outsignal2"}, + {"property": "test_property", "outsignal": "test_outsignal"}, + ] + } + + expected_signal_properties = { + "dummy_model": ["dummy_dp.test_property2.test_outsignal2", "dummy_dp.test_property.test_outsignal"], + } + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(expected_signal_properties, modelyamlver.signal_properties) + + # Different outsignals connected to the same property + modelyamlver.app_outsignals = ["test_outsignal", "test_outsignal2"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "outsignal": "test_outsignal"}, + {"property": "test_property", "outsignal": "test_outsignal2"}, + ] + } + exception_msg = ( + "ERROR:root:You can't connect another signal to the existing property " + "dummy_dp.test_property.test_outsignal2" + " in dummy_model model, because it is already defined in dummy_model model.\n" + ) + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Same outsignal connected to the same property several times + modelyamlver.app_outsignals = ["test_outsignal", "test_outsignal2"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "outsignal": "test_outsignal"}, + {"property": "test_property", "outsignal": "test_outsignal"}, + ] + } + exception_msg = "ERROR:root:You can't connect signal test_outsignal in dummy_model model twice.\n" + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + def test_verify_insignals(self): + """Test the verify_signals method with insignals.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + modelyamlver.app_insignals = {} + modelyamlver.raw = {"dummy_dp": [{"property": "test_property", "insignal": "test_insignal"}]} + exception_msg = "ERROR:root:test_insignal is not defined as an insignal in json file\n" + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Different properties connected to the same insignal + modelyamlver.app_insignals = ["test_insignal"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "insignal": "test_insignal"}, + {"property": "test_property2", "insignal": "test_insignal"}, + ] + } + exception_msg = ( + "ERROR:root:You can't connect a signal test_insignal in dummy_model model to two" + " different primitives. It's already connected in dummy_model model\n" + ) + + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Different insignals connected to the same property + modelyamlver.app_insignals = ["test_insignal", "test_insignal2"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "insignal": "test_insignal"}, + {"property": "test_property", "insignal": "test_insignal2"}, + ] + } + exception_msg = ( + "ERROR:root:You can't connect another signal to the existing property " + "dummy_dp.test_property.test_insignal2" + " in dummy_model model, because it is already defined in dummy_model model.\n" + ) + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Different insignals connected to the same property in different models, should give an error message + modelyamlver.signal_properties = {"dummy_model": [], "dummy_model2": []} + modelyamlver.app_insignals = ["test_insignal", "test_insignal2"] + model_signal = {"dummy_model": "test_insignal", "dummy_model2": "test_insignal2"} + for model in ["dummy_model", "dummy_model2"]: + modelyamlver.model_name = model + modelyamlver.raw = {"dummy_dp": [{"property": "test_property", "insignal": model_signal[model]}]} + exception_msg = ( + "ERROR:root:You can't connect another signal to the existing property " + "dummy_dp.test_property.test_insignal2" + " in dummy_model2 model, because it is already defined in dummy_model model.\n" + ) + try: + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + except AssertionError: + warn_info = None + if not hasattr(warn_info, "output"): + raise AssertionError("no logs of level INFO or higher triggered on root") + self.assertEqual(warn_info.output, [exception_msg]) + + # Same insignal connected to the same property several times + modelyamlver.app_insignals = ["test_insignal", "test_insignal2"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.model_name = "dummy_model" + modelyamlver.raw = { + "dummy_dp": [ + {"property": "test_property", "insignal": "test_insignal"}, + {"property": "test_property", "insignal": "test_insignal"}, + ] + } + exception_msg = "ERROR:root:You can't connect signal test_insignal in dummy_model model twice.\n" + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, [exception_msg]) + + # Same insignal connected to the same property in different models, this should not give an error message + modelyamlver.signal_properties = {"dummy_model": [], "dummy_model2": []} + modelyamlver.app_insignals = ["test_insignal"] + for model in ["dummy_model", "dummy_model2"]: + modelyamlver.model_name = model + modelyamlver.raw = {"dummy_dp": [{"property": "test_property", "insignal": "test_insignal"}]} + exception_msg = ( + "ERROR:root:You can't write dummy_dp.test_property in dummy_model2 model." + " It already exists in dummy_model model\n" + ) + try: + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + except AssertionError: + continue + raise AssertionError(f"Error raised: {warn_info.output}") + + def test_verify_hal_struct(self): + """Test the verify_signals method for hal struct.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + modelyamlver.app_insignals = {} + modelyamlver.raw = { + "insignal_struct": [ + {"insignal": "test_insignal", "property": "test_insignal"}, + {"property": "test_insignal2", "insignal": "test_insignal2"}, + ] + } + exception_msg = [ + "ERROR:root:test_insignal is not defined as an insignal in json file\n", + "ERROR:root:test_insignal2 is not defined as an insignal in json file\n", + ] + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw) + self.assertEqual(warn_info.output, exception_msg) + + def test_verify_hal_signals(self): + """Test the verify_signals method for hal signals.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + modelyamlver.app_insignals = {} + modelyamlver.raw = {"insignal_property": [{"insignal": "test_insignal"}]} + exception_msg = "ERROR:root:test_insignal is not defined as an insignal in json file\n" + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.verify_signals(modelyamlver.raw, is_hal=True, is_service=False, group="dummy_grp") + self.assertEqual(warn_info.output, [exception_msg]) + + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + modelyamlver.app_insignals = ["test_insignal"] + modelyamlver.raw = {"insignal_property": [{"insignal": "test_insignal"}]} + modelyamlver.signal_properties = {"dummy_model": ["dummy_dp.property_outsignal"]} + modelyamlver.verify_signals(modelyamlver.raw, is_hal=True, is_service=False, group="dummy_grp") + expected_signal_properties = { + "dummy_model": ["dummy_dp.property_outsignal", "insignal_property.dummy_grp.test_insignal"] + } + self.assertEqual(modelyamlver.signal_properties, expected_signal_properties) + + def test_parse_service_definitions(self): + """Test the parse_service_definitions method.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + modelyamlver.app_insignals = ["test_insignal"] + modelyamlver.signal_properties = {"dummy_model": []} + modelyamlver.raw = { + "dummy_service": { + "methods": [ + { + "dummy_endpoint1": [{"insignal": "test_insignal"}], + "dummy_endpoint2": [{"insignal": "test_insignal"}], + } + ] + } + } + exception_msg = [ + "ERROR:root:You can't connect a signal test_insignal in dummy_model model to two " + "different primitives. It's already connected in dummy_model model\n" + ] + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.parse_service_definitions(modelyamlver.raw) + self.assertEqual(warn_info.output, exception_msg) + + def test_validate_dp_signal_schema(self): + """Test the validate_signal_schema method.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model" + signal_spec = {"insignal": "test_insignal"} + exception_msg = "ERROR:root:required key not provided @ data['property'] in dummy_model\n" + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.validate_signal_schema(signal_spec, "insignal", is_hal=False, is_service=False) + self.assertEqual(warn_info.output, [exception_msg]) + + def test_check_dp_property(self): + """Test the verify_primitive method.""" + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model2" + modelyamlver.signal_properties = {"dummy_model1": ["dummy_dp.property_outsignal.signal"], "dummy_model2": []} + exception_msg = ( + "ERROR:root:You can't connect another signal to the existing property " + "dummy_dp.property_outsignal.signal2" + " in dummy_model2 model, because it is already defined in dummy_model1 model.\n" + ) + with self.assertLogs(level="INFO") as warn_info: + modelyamlver.check_property("dummy_dp.property_outsignal.signal2") + self.assertEqual(warn_info.output, [exception_msg]) + + app = mock.MagicMock() + modelyamlver = ModelYmlVerification(app) + modelyamlver.model_name = "dummy_model2" + modelyamlver.signal_properties = {"dummy_model1": ["dummy_dp.property_outsignal"], "dummy_model2": []} + expected_signal_properties = { + "dummy_model1": ["dummy_dp.property_outsignal"], + "dummy_model2": ["dummy_dp.property_insignal.signal"], + } + modelyamlver.verify_primitive("dummy_dp.property_insignal.signal", "outsignal") + self.assertEqual(expected_signal_properties, modelyamlver.signal_properties) diff --git a/tests/interface/test_simulink.py b/tests/interface/test_simulink.py new file mode 100644 index 0000000..3154ae4 --- /dev/null +++ b/tests/interface/test_simulink.py @@ -0,0 +1,150 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Test cases for the Simulink interface module.""" + + +import json +import os +import unittest + +from pybuild.interface import simulink + + +class TestSimulink(unittest.TestCase): + """Unit tests for the Simulink interface module.""" + + def setUp(self): + self.base_path = "test_data/interface/test_simulink/" + with open(self.base_path + "test_case.json", encoding="utf-8") as test_file: + data = json.load(test_file) + self.dp = data.get("DP", {}) + self.dp_enum = data.get("DP_ENUM", {}) + self.api = data.get("API", {}) + self.api_enum = data.get("API_ENUM", {}) + self.api_enums = data.get("API_ENUMS", {}) + self.api_double_enum = data.get("API_DOUBLE_ENUM", {}) + self.interface_data_types = data.get("INTERFACE_DATA_TYPES", {}) + self.methods = data.get("METHODS", {}) + + def test_split_interface(self): + """Test split_interface method.""" + result = simulink.split_interface(self.dp) + with open(os.path.join(self.base_path, "split_interface_expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + self.assertDictEqual(result, expected) + + def test_get_interface_dp(self): + """Test get_interface method with DP.""" + output = simulink.get_interface({}, self.dp, {}, {}, {}) + with open(os.path.join(self.base_path, "get_interface_dp_expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + self.assertCountEqual(output, expected) + + def test_add_dp(self): + """Test add_dp method.""" + output = [] + result = simulink.add_dp(output, {}, self.dp) + with open(os.path.join(self.base_path, "add_dp_expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + self.assertListEqual(result, expected) + + def test_get_interface_hal(self): + """Test get_interface method with HAL.""" + output = simulink.get_interface({}, {}, self.api, {}, {}) + with open( + os.path.join(self.base_path, "get_interface_hal_expected_result.json"), encoding="utf-8" + ) as json_file: + expected = json.load(json_file) + self.assertCountEqual(output, expected) + + def test_add_api(self): + """Test add_api method.""" + output = [] + result = simulink.add_api(output, {}, self.api) + with open(os.path.join(self.base_path, "add_api_expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + self.assertListEqual(result, expected) + + def test_extend_adapter(self): + """Test add_api method with adapter.""" + with open(os.path.join(self.base_path, "extend_adapters_interface.json"), encoding="utf-8") as json_file: + interface = json.load(json_file) + result = simulink.add_api(interface, {}, self.api) + with open(os.path.join(self.base_path, "extend_adapters_expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + self.assertListEqual(result, expected) + + def test_get_interface_sfw(self): + """Test get_interface method with SFW.""" + output = simulink.get_interface({}, {}, {}, self.api, {}) + with open( + os.path.join(self.base_path, "get_interface_sfw_expected_result.json"), encoding="utf-8" + ) as json_file: + expected = json.load(json_file) + self.assertCountEqual(output, expected) + + def test_add_method(self): + """Test that add_method adds new adapters.""" + with open(os.path.join(self.base_path, "add_method_output.json"), encoding="utf-8") as json_file: + output = json.load(json_file) + result = simulink.add_methods(output, {}, self.methods) + with open(os.path.join(self.base_path, "add_method_expected_methods.json"), encoding="utf-8") as json_file: + expected_methods = json.load(json_file) + with open(os.path.join(self.base_path, "add_method_expected_result.json"), encoding="utf-8") as json_file: + expected = json.load(json_file) + expected[1]["methods"] = expected_methods + self.assertCountEqual(result, expected) + + def test_get_interface_with_data_types(self): + """Test get_interface method adding interface_data_types.""" + output = simulink.get_interface(self.interface_data_types, {}, {}, self.api_enums, {}) + with open( + os.path.join(self.base_path, "get_interface_with_data_types_expected_result.json"), encoding="utf-8" + ) as json_file: + expected = json.load(json_file) + self.assertCountEqual(output, expected) + + def test_get_interface_with_double_enum(self): + """Test get_interface method adding interface data types and double enum.""" + output = simulink.get_interface(self.interface_data_types, {}, {}, self.api_double_enum, {}) + with open( + os.path.join(self.base_path, "get_interface_with_double_enum_expected_result.json"), encoding="utf-8" + ) as json_file: + expected = json.load(json_file) + self.assertCountEqual(output, expected) + + def test_add_api_with_data_types(self): + """Test add_api method adding interface_data_types.""" + output = [] + result = simulink.add_api(output, self.interface_data_types, self.api_enum) + with open( + os.path.join(self.base_path, "add_api_with_data_types_expected_result.json"), encoding="utf-8" + ) as json_file: + expected = json.load(json_file) + self.assertListEqual(result, expected) + + def test_add_dp_with_data_types(self): + """Test add_dp method adding interface_data_types.""" + output = [] + result = simulink.add_dp(output, self.interface_data_types, self.dp_enum) + with open( + os.path.join(self.base_path, "add_dp_with_data_types_expected_result.json"), encoding="utf-8" + ) as json_file: + expected = json.load(json_file) + self.assertListEqual(result, expected) + + def test_ensure_raster(self): + """Test ensure_raster method.""" + raster = "Vc10ms" + output = [] + result = simulink.ensure_raster(output, raster) + expected = [{"name": "Vc10ms", "ports": {"in": {}, "out": {}}}] + self.assertListEqual(result, expected) + + def test_get_adapter(self): + """Test get_adapter method.""" + interface = [{"name": "Vc10ms", "ports": {"in": {}, "out": {}}}] + result = simulink.get_adapter(interface, "Vc10ms") + expected = {"name": "Vc10ms", "ports": {"in": {}, "out": {}}} + self.assertDictEqual(result, expected) diff --git a/tests/interface/test_update_call_sources.py b/tests/interface/test_update_call_sources.py new file mode 100644 index 0000000..0ac9260 --- /dev/null +++ b/tests/interface/test_update_call_sources.py @@ -0,0 +1,89 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for testing the update_call_sources.py module.""" + + +import json +import unittest + +from pybuild.interface import update_call_sources + +# C-Code chunks +CHUNK_0 = ( + '/* Used for running spm without csp, such as silver\n' + ' This code should be replaced when using csp. */\n' +) +CHUNK_1 = ( + '#include "VcHmiRx_CSPMethodCall.h"\n' + '\n' + '#include "CVC_CODE_START.h"\n' + 'Bool VcHmiRx_CSPMethodCall( Float32 sVcScOut_Tq_WhlMotSysTqReq )\n' + '{\n' +) +CHUNK_2 = ( + ' /* CSP method call\n' + ' csp::afw::core::ErrorCode errorCode = ADAPTER->METHOD();\n' +) +CHUNK_3 = ( + ' switch(errorCode) {\n' + ' case csp::afw::core::ErrorCode::kSuccess :\n' + ' return 0;\n' + ' default :\n' + ' return 1;\n' + ' }\n' +) +CHUNK_4 = ' CSP method call end*/\n' +CHUNK_5 = ( + ' /* C dummy call*/\n' + ' return 1;\n' + ' /* C dummy call end*/\n' +) +CHUNK_6 = '}' + + +class TestUpdateCallSources(unittest.TestCase): + """Unit tests for the update_call_sources module.""" + + def setUp(self): + base_path = 'test_data/interface/test_update_call_sources/' + with open(base_path + 'test_case.json', encoding="utf-8") as test_file: + self.adapters = json.load(test_file) + + def test_is_method_adapter(self): + """Test is_method_adapter method.""" + no_methods_adapter = update_call_sources.is_method_adapter(self.adapters[0]) + one_method_adapter = update_call_sources.is_method_adapter(self.adapters[1]) + self.assertTrue(one_method_adapter) + self.assertFalse(no_methods_adapter) + + def test_generate_src_code(self): + """Test generate_src_code method.""" + adapter = self.adapters[1] + method = adapter['methods'][0] + method_config = {"method_call_wrapper": {"pre": "", "post": ""}} + c_code = ''.join([CHUNK_0, CHUNK_1, CHUNK_2, CHUNK_3, CHUNK_4, CHUNK_5, CHUNK_6]) + new_c = update_call_sources.generate_src_code(adapter, method, c_code, method_config) + exp_c2 = ( + ' csp::afw::core::ErrorCode errorCode = ' + 'adapterwrapper::Csp_Methods->VcPvcDemo_11_CSPMethodCall2();\n' + ) + exp_c = ''.join([CHUNK_1, exp_c2, CHUNK_3, CHUNK_6]) + self.assertEqual(exp_c, new_c) + + def test_generate_header_code(self): + """Test generate_header_code method.""" + old_header = ( + r'#include "not_adapter_wrapper.hh"\n' + r'#include "adapter_wrapper.hh"' + ) + method_config = {'adapter_declarations_change': None} + new_header = update_call_sources.generate_header_code(method_config, old_header) + self.assertEqual(old_header, new_header) + method_config = {'adapter_declarations_change': 'changed_adapter_header.h'} + new_header = update_call_sources.generate_header_code(method_config, old_header) + expected_header = ( + r'#include "not_adapter_wrapper.hh"\n' + r'#include "changed_adapter_header.h"' + ) + self.assertEqual(expected_header, new_header) diff --git a/tests/interface/test_update_model_yaml.py b/tests/interface/test_update_model_yaml.py new file mode 100644 index 0000000..d9f4551 --- /dev/null +++ b/tests/interface/test_update_model_yaml.py @@ -0,0 +1,50 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module to test the update_model_yaml.py module.""" + + +import unittest +from unittest import mock + +from pybuild.interface.update_model_yaml import BadYamlFormat, UpdateYmlFormat + + +class TestUpdateYamlFormat(unittest.TestCase): + """Unit tests for the UpdateYmlFormat class.""" + + def setUp(self): + app = mock.MagicMock() + self.update_yml_format = UpdateYmlFormat(app) + self.update_yml_format.app_insignals = ["in_signal1", "in_signal2"] + self.update_yml_format.app_outsignals = ["out_signal1", "out_signal2"] + + def test_check_signals_insignal(self): + """Test check_signals method with insignal.""" + signals_definition = {"spec1": [{"insignal": "in_signal1", "property": "prop1"}]} + self.update_yml_format.check_signals(signals_definition) + self.assertEqual(signals_definition, {"spec1": [{"insignal": "in_signal1", "property": "prop1"}]}) + + def test_check_signals_outsignal(self): + """Test check_signals method with outsignal.""" + signals_definition = {"spec1": [{"outsignal": "out_signal1", "property": "prop1"}]} + self.update_yml_format.check_signals(signals_definition) + self.assertEqual(signals_definition, {"spec1": [{"outsignal": "out_signal1", "property": "prop1"}]}) + + def test_check_signals_no_insignal(self): + """Test check_signals method without insignal.""" + signals_definition = {"spec1": [{"signal": "in_signal1", "property": "prop1"}]} + self.update_yml_format.check_signals(signals_definition) + self.assertEqual(signals_definition, {"spec1": [{"insignal": "in_signal1", "property": "prop1"}]}) + + def test_check_signals_no_outsignal(self): + """Test check_signals method without outsignal.""" + signals_definition = {"spec1": [{"signal": "out_signal1", "property": "prop1"}]} + self.update_yml_format.check_signals(signals_definition) + self.assertEqual(signals_definition, {"spec1": [{"outsignal": "out_signal1", "property": "prop1"}]}) + + def test_check_signals_bad_yaml(self): + """Test check_signals method with wrong signal.""" + signals_definition = {"spec1": [{"signal": "bad_signal", "property": "prop1"}]} + with self.assertRaises(BadYamlFormat): + self.update_yml_format.check_signals(signals_definition) diff --git a/tests/lib/__init__.py b/tests/lib/__init__.py new file mode 100644 index 0000000..fbb6ed9 --- /dev/null +++ b/tests/lib/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""pybuild.lib unit tests.""" diff --git a/tests/lib/test_helper_functions.py b/tests/lib/test_helper_functions.py new file mode 100644 index 0000000..38476aa --- /dev/null +++ b/tests/lib/test_helper_functions.py @@ -0,0 +1,136 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unittests for helper_functions.""" +import unittest +from pybuild.lib import helper_functions as HF + + +class TestHelperFunctions(unittest.TestCase): + """Test cases for helper functions.""" + + def setUp(self): + """Set up common data structures.""" + self.basic_dict1 = { + "Bananas": 2, + "Oranges": { + "String": "test" + }, + "Apples": 4, + } + self.basic_dict2 = { + "Pears": 1, + "Apples": 2, + "Balls": 2, + "Oranges": {} + } + + self.nested_dict1 = { + "Bananas": { + "Type": "Blue", + "Size": 3, + "Countries": ["Denmark"] + }, + "Apples": { + "Type": "Granny Smith", + "Colour": "Green", + "Size": 9 + }, + "Cheese": { + "Comment": "I love cheese!" + } + } + self.nested_dict2 = { + "Bananas": { + "Destination": "Unknown", + "Size": 7, + "Countries": ["Sweden", "Norway"] + }, + "Pears": { + "Type": "Green ones", + "Size": "Regular" + }, + "Apples": { + "Size": 51 + }, + "Cheese": { + "Comment": "!!" + } + } + + def test_merge_dicts(self): + """Test basic dict merging.""" + expected = { + "Bananas": 2, + "Oranges": { + "String": "test" + }, + "Apples": 4, + "Pears": 1, + "Balls": 2 + } + result = HF.merge_dicts(self.basic_dict1, self.basic_dict2) + self.assertDictEqual(result, expected) + + def test_merge_dicts_handle_collision(self): + """Test dict merging with custom collision handling.""" + expected = { + "Bananas": 2, + "Oranges": "COLLISION", + "Apples": "COLLISION", + "Pears": 1, + "Balls": 2 + } + result = HF.merge_dicts(self.basic_dict1, self.basic_dict2, lambda a, b: "COLLISION") + self.assertDictEqual(result, expected) + + def test_merge_dicts_recursively(self): + """Test nested dict merging recursively.""" + expected = { + "Bananas": { + "Type": "Blue", + "Size": 3, + "Destination": "Unknown", + "Countries": ["Denmark"] + }, + "Apples": { + "Type": "Granny Smith", + "Colour": "Green", + "Size": 9 + }, + "Cheese": { + "Comment": "I love cheese!" + }, + "Pears": { + "Type": "Green ones", + "Size": "Regular" + } + } + + result = HF.merge_dicts(self.nested_dict1, self.nested_dict2, merge_recursively=True) + self.assertDictEqual(result, expected) + + def test_merge_dicts_handle_collision_recursively(self): + """Test nested dict merging with custom collision handling.""" + expected = { + "Bananas": { + "Type": "Blue", + "Size": 10, + "Destination": "Unknown", + "Countries": ["Denmark", "Sweden", "Norway"] + }, + "Apples": { + "Type": "Granny Smith", + "Colour": "Green", + "Size": 60 + }, + "Cheese": { + "Comment": "I love cheese!!!" + }, + "Pears": { + "Type": "Green ones", + "Size": "Regular" + }, + } + result = HF.merge_dicts(self.nested_dict1, self.nested_dict2, lambda a, b: a + b, True) + self.assertDictEqual(result, expected) diff --git a/tests/lib/test_logger.py b/tests/lib/test_logger.py new file mode 100644 index 0000000..43b404a --- /dev/null +++ b/tests/lib/test_logger.py @@ -0,0 +1,10 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for logger module.""" +from pybuild.lib import logger + + +def test_parse_log_level_default_on_error(): + """Invalid log level string should result in DEBUG level.""" + assert logger.parse_log_level('COOL_LOG_LEVEL_BRO') == logger.LEVELS[logger.LEVEL_DEBUG] diff --git a/tests/pybuild/.pylintrc b/tests/pybuild/.pylintrc new file mode 100644 index 0000000..b573ef6 --- /dev/null +++ b/tests/pybuild/.pylintrc @@ -0,0 +1,561 @@ +[MASTER] +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore= + +# Pickle collected data for later comparisons. +persistent=no + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. +jobs=1 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + invalid-unicode-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + deprecated-operator-function, + deprecated-urllib-function, + xreadlines-attribute, + deprecated-sys-function, + exception-escape, + comprehension-escape, + #Added. Remove one by one as code is fixed. + duplicate-code, + line-too-long, + protected-access, + too-many-branches, + too-many-instance-attributes, + invalid-name, + too-many-lines, + missing-docstring, + wildcard-import, + no-self-use, + no-else-return, + eval-used, + bad-continuation, + redefined-builtin, + too-many-locals, + too-many-arguments, + too-many-statements, + too-many-public-methods, + too-many-nested-blocks, + pointless-string-statement, + missing-final-newline + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio).You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=optparse.Values,sys.exit + + +[BASIC] + +# Naming style matching correct argument names +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style +#argument-rgx= + +# Naming style matching correct attribute names +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style +#class-attribute-rgx= + +# Naming style matching correct class names +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming-style +#class-rgx= + +# Naming style matching correct constant names +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma +good-names=i, + j, + k, + ex, + Run, + _ + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Naming style matching correct inline iteration names +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style +#inlinevar-rgx= + +# Naming style matching correct method names +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style +#method-rgx= + +# Naming style matching correct module names +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style +#variable-rgx= + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=120 + +# Maximum number of lines in a module +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=logging + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes= + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,io,builtins + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + +# Maximum number of branch for function / method body +max-branches=12 + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of statements in function / method body +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/tests/pybuild/__init__.py b/tests/pybuild/__init__.py new file mode 100644 index 0000000..23c510c --- /dev/null +++ b/tests/pybuild/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""pybuild unit tests.""" diff --git a/tests/pybuild/a2l_merge_data.py b/tests/pybuild/a2l_merge_data.py new file mode 100644 index 0000000..9736f7f --- /dev/null +++ b/tests/pybuild/a2l_merge_data.py @@ -0,0 +1,10207 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Merge test results""" + +A2L_MERGED_1 = { + 'AXIS_PTS': {'mVcAesTrboM_rt_TrboMonrTgtLim_c': ' /begin AXIS_PTS\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_c\t' + '/* Name */\n' + ' "Target turbo ' + 'pressure ratio limit for low ' + 'boost, engine speed ' + 'breakpoints"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t' + '/* InputQuantity */\n' + ' UWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_0_25\t/* ' + 'Conversion */\n' + ' 10\t/* MaxAxisPoints ' + '*/\n' + ' 0\t/* LowerLimit */\n' + ' 10000\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'mVcAesTrboM_rt_TrboMonrTgtLim_r': ' /begin AXIS_PTS\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_r\t' + '/* Name */\n' + ' "Target turbo ' + 'pressure ratio limit for low ' + 'boost, Trq breakpoints"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t' + '/* InputQuantity */\n' + ' SWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_0_015625\t/* ' + 'Conversion */\n' + ' 10\t/* MaxAxisPoints ' + '*/\n' + ' -500\t/* LowerLimit ' + '*/\n' + ' 500\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesTrboM_n_EngSpdMinLim_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesTrboM_n_EngSpdMinLim_x\t' + '/* Name */\n' + ' "Pressure upstream ' + 'turbo compressor breakpoint ' + 'data "\t/* LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_1_a\t/* ' + 'Conversion */\n' + ' 4\t/* MaxAxisPoints */\n' + ' 0\t/* LowerLimit */\n' + ' 110\t/* UpperLimit */\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x\t' + '/* Name */\n' + ' "Pressure ' + 'upstream turbo ' + 'compressor breakpoint ' + 'data "\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' EQ_LSB_1_a\t/* ' + 'Conversion */\n' + ' 4\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 110\t/* ' + 'UpperLimit */\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_PTS'}, + 'CHARACTERISTIC': {'cVcAesSupM_B_dcl_mimic': ' /begin ' + 'CHARACTERISTIC ' + 'cVcAesSupM_B_dcl_mimic ' + '/* Name */\n' + ' "Mimics ' + 'hand coded a2l ' + 'files"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_B_dcl_mimic ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_B_SupMonrHiCluOnSw': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_B_SupMonrHiCluOnSw\t' + '/* Name */\n' + ' "Switch to ' + 'bypass SC clutch on ' + 'flag, supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_B_SupMonrHiCluOnSw ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP\t' + '/* Name */\n' + ' ' + '"Use ' + 'absolute ' + 'pressure in ' + 'peak ' + 'monitor"\t' + '/* ' + 'LongIdentifier ' + '*/\n' + ' ' + 'VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 ' + '/* address: ' + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t' + '/* Deposit ' + '*/\n' + ' 0\t' + '/* MaxDiff ' + '*/\n' + ' ' + 'EQ_LSB_1_d\t' + '/* ' + 'Conversion ' + '*/\n' + ' 0\t' + '/* ' + 'LowerLimit ' + '*/\n' + ' 1\t' + '/* ' + 'UpperLimit ' + '*/\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesTrboM_B_IsObdExeSpm': ' /begin CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_IsObdExeSpm\t' + '/* Name */\n' + ' "Defines where is ' + 'the obd exe flag coming from ' + '(1 if coming from SPM)"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type */\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesTrboM_B_IsObdExeSpm ' + '*/\n' + ' UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_1_d\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesTrboM_B_PpLkExhFiMPerm': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkExhFiMPerm\t' + '/* Name */\n' + ' "Switch to bypass ' + 'FiM permission"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesTrboM_B_PpLkExhFiMPerm ' + '*/\n' + ' UBYTE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_1_d\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC'}, + 'COMPU_METHOD': {'EQ_LSB_0_000244140625': ' /begin COMPU_METHOD\n' + ' EQ_LSB_0_000244140625\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ' + 'ConversionType */\n' + ' "%15.12"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 ' + '0.000244140625\n' + ' /end COMPU_METHOD', + 'EQ_LSB_0_015625': ' /begin COMPU_METHOD\n' + ' EQ_LSB_0_015625\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%10.6"\t/* Format */\n' + ' "Nm"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 0.015625\n' + ' /end COMPU_METHOD', + 'EQ_LSB_0_25': ' /begin COMPU_METHOD\n' + ' EQ_LSB_0_25\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%8.2"\t/* Format */\n' + ' "rpm"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 0.25\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_a': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_a\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "kPa"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_b': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_b\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "rpm"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_c': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_c\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_d': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_d\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_e': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_e\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%3.0"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_f': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_f\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%3.0"\t/* Format */\n' + ' "deg C"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_g': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_g\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%3.0"\t/* Format */\n' + ' "s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_j': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_j\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' "deg C"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_k': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_k\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "deg C"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_l': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_l\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' "s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_m': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_m\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "kPa/s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_n': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_n\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "g/s2"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_0': ' /begin COMPU_METHOD\n' + ' Scaling_0 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%15.12" /* Format */\n' + ' "g/rev" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.000244140625\n' + ' /end COMPU_METHOD', + 'Scaling_1': ' /begin COMPU_METHOD\n' + ' Scaling_1 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.8" /* Format */\n' + ' "kPa" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.00390625\n' + ' /end COMPU_METHOD', + 'Scaling_10': ' /begin COMPU_METHOD\n' + ' Scaling_10 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "g/rev" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_11': ' /begin COMPU_METHOD\n' + ' Scaling_11 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_12': ' /begin COMPU_METHOD\n' + ' Scaling_12 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%1.0" /* Format */\n' + ' "%" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_13': ' /begin COMPU_METHOD\n' + ' Scaling_13 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "%" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_14': ' /begin COMPU_METHOD\n' + ' Scaling_14 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "%/s" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_15': ' /begin COMPU_METHOD\n' + ' Scaling_15 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%16.14" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 6.103515625e-05\n' + ' /end COMPU_METHOD', + 'Scaling_16': ' /begin COMPU_METHOD\n' + ' Scaling_16 /* Name */\n' + ' "Void scaling for unscaled ' + 'variables" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%1.0" /* Format */\n' + ' "" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_17': ' /begin COMPU_METHOD\n' + ' Scaling_17 /* Name */\n' + ' "Void scaling for unscaled ' + 'variables" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_2': ' /begin COMPU_METHOD\n' + ' Scaling_2 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%10.5" /* Format */\n' + ' "K" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.03125\n' + ' /end COMPU_METHOD', + 'Scaling_3': ' /begin COMPU_METHOD\n' + ' Scaling_3 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%8.2" /* Format */\n' + ' "rpm" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.25\n' + ' /end COMPU_METHOD', + 'Scaling_4': ' /begin COMPU_METHOD\n' + ' Scaling_4 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "kPa" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_5': ' /begin COMPU_METHOD\n' + ' Scaling_5 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "K" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_6': ' /begin COMPU_METHOD\n' + ' Scaling_6 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "rpm" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_7': ' /begin COMPU_METHOD\n' + ' Scaling_7 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "s" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_8': ' /begin COMPU_METHOD\n' + ' Scaling_8 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "kPa/s" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_9': ' /begin COMPU_METHOD\n' + ' Scaling_9 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%1.0" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'VOID_SCALING': ' /begin COMPU_METHOD\n' + ' VOID_SCALING\t/* Name */\n' + ' "Void scaling for unscaled ' + 'variables"\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' ""\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'VOID_SCALING_h': ' /begin COMPU_METHOD\n' + ' VOID_SCALING_h\t/* Name */\n' + ' "Void scaling for unscaled ' + 'variables"\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' ""\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD'}, + 'FUNCTION': {'SAesSupM__g5_11_SupChrgrSys': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g5_11_SupChrgrSys\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_B_SupMonrHiCluOnSw\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_B_dcl_mimic\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrSCTarDly\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesSupM__g29_Avg1\t' + '/* Identifier */\n' + ' SAesSupM__g30_Avg2\t' + '/* Identifier */\n' + ' ' + 'SAesSupM__g35_141_CoreHiBoost\t' + '/* Identifier */\n' + ' ' + 'SAesSupM__g36_142_CoreLoBoost\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM101_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM101_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM102_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM102_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrRnkMax\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM103_1431_CoreLPHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM103_1431_CoreLPHiBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrLPHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM123_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM104_1432_CoreHPHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM104_1432_CoreHPHiBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrHPHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM133_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM105_1433_CoreLPLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM105_1433_CoreLPLoBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrLPLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM143_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM106_1434_CoreHPLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM106_1434_CoreHPLoBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrHPLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM153_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM123_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM123_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM128_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM127_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM127_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM127_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM128_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM128_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM133_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM133_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM138_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM137_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM137_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM137_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM138_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM138_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM143_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM143_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM148_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM147_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM147_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM147_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM148_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM148_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM153_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM153_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM158_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM157_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM157_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM157_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM158_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM158_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM159_21_PPeakTest': ' /begin FUNCTION\n' + ' SAesTrboM159_21_PPeakTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakHealLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_EngProtnTrboPeakErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_EngProtnTrboPeakHealDly\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_EngProtnTrboPPeakRnk\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_ObdExe\t' + '/* Identifier */\n' + ' ' + 'yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM172_Vc_SetRanking\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM168_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM168_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM168_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMin\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM174_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM173_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM172_Vc_SetRanking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM172_Vc_SetRanking\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_EngProtnTrboPPeakRnk\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM173_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM173_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMin\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM174_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM174_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM175_31_StuckTest': ' /begin FUNCTION\n' + ' SAesTrboM175_31_StuckTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpValveStuckNoPump\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpValveStuck\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckHealDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckOkDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpValveStuckMinPres\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckRefResetDly\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStkExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckUnfiltErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckOkExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckErr\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpValveStuckPDiff\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpValveStuckPDiffMax\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckEnable\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM191_41_LeakTest': ' /begin FUNCTION\n' + ' SAesTrboM191_41_LeakTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkUseMaxtimeout\t/* ' + 'Identifier */\n' + ' cVcAesTrboM_p_PpLkLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLeakPlsDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLeakTimeOut\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkErrDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkHealDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkOkDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkPumpReqTimeOut\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkPumpAct\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_PpLkExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkFltFlagUnfiltd\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_PpLkOk\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpLkTstValue\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkMaxPumpReqTimeOut\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_PpLkErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkFltFlag\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkPumpActDly\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpLkInitPres\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM192_42_LeakExhTest': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM192_42_LeakExhTest\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkExhNoPumpUse\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpLkExhLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhAftStrt\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhErrDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhHealDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhOkDly\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhFltFlagUnfiltd\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhFtlFlag\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpLkExhTstValue\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM19_111_PressureRt': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM19_111_PressureRt\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim\t/* ' + 'Identifier */\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_r\t' + '/* Identifier */\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_c\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrTgtTqNLim\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrTgtLim\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrSnsr\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrTgt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM215_51_PpSmalLeakTest': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM215_51_PpSmalLeakTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpSmLkNotUseCmprOk\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Te_PpSmLkMinTempEna\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpSmLkMaxDrop\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkHealDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkMaxLastCompRun\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkMinLastCompRun\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkOkDly\t/* ' + 'Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkFltFlagUnfiltd\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmalLeakExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkPreErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpSmLkTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkFltFlag\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpSmLkInitPres\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_t_PpSmLkCompRun\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM227_61_RelayStuckTest': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM227_61_RelayStuckTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_Rly1StkLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_Rly2StkLim\t/* ' + 'Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkRly1Act\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkRly2Act\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly2StkTstValue\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly1StkTstValue\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly2StkInitPres\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly1StkInitPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM249_621_CoreVntDp': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM249_621_CoreVntDp\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboVntDpRst\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpHiNrmLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpHiRstVal\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpLoNrmLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpLoRstVal\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsCntMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsCntMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKHI\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKInc\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKLO\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsOK\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsOKDec\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpLoTmp\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpHiTmp\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpLoTmpNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpHiTmpErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpLoTmpErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntStsLoErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntStsHiErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpStsLoOk\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpStsHiOk\t' + '/* Identifier */\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsLoCnt\t' + '/* Identifier */\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsHiCnt\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM264_WriteNVM\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM261_WriteNVM\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM261_WriteNVM': ' /begin FUNCTION\n' + ' SAesTrboM261_WriteNVM\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsHiCnt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM264_WriteNVM': ' /begin FUNCTION\n' + ' SAesTrboM264_WriteNVM\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsLoCnt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM29_123_2T': ' /begin FUNCTION\n' + ' SAesTrboM29_123_2T\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_n_TrboMonrHPEngSpdMax\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_n_TrboMonrLPEngSpdMin\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_TrboMonrLoExe\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM3_1_TrboMonr': ' /begin FUNCTION\n' + ' SAesTrboM3_1_TrboMonr\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly\t/* ' + 'Identifier */\n' + ' ' + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x\t' + '/* Identifier */\n' + ' ' + 'tVcAesTrboM_n_EngSpdMinLim\t/* ' + 'Identifier */\n' + ' ' + 'tVcAesTrboM_n_EngSpdMinLim_x\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLoAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrBypFiMPerm\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_Te_TrboMonrEngClntMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrCmprBypCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrCmprPUsCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM0\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM1\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM2\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM3\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM4\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM5\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoRegDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrSCCluCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrTrboActvLoDsbl\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Te_TrboMonrLoRegMin\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrPTrjDFilMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrPTrjDFilMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrIntkBoostPTrjMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrSCPMaxLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLoRegDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrPTrjStabDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_tc_TrboMonrTiConPTrjDFil\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM0\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM1\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM2\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM3\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM4\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM5\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiRegDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrTrboActvHiDsbl\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Te_TrboMonrHiRegMin\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrHiPTrjDFilMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrHiPTrjDFilMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrThrMFlowDMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_n_TrboMonrNEngMaxLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrAmbPDifMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrCacPDifMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiPTrjStabDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiRegDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_tc_TrboMonrHiTiConPTrjDFil\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_tc_TrboMonrThrMFlowDFil\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrBoostPCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrSCPCfg\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoErr\t/* ' + 'Identifier */\n' + ' ' + 'sVcAesTrboM_p_TrboMonrAmbPDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrGetPerm\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrEngClntEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoPTrjStab\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoRegEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoCmprBypActvEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrActvLoEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoRegActv\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoIntkBoostTrjEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoEngSpdEna\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrIntkBoostPTrjAmbDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrSCAmbPDiff\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrPCmprUs\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoRegDly\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrPTrjStabEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoDynEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSCPEna\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrPTrjDFil\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiPTrjStab\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiRegActv\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiRegEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrActvHiEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrCacPTrjDifEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrThrFlowDEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrNEngEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrPAmbDiffEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiRegDly\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiPTrjStabEna\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_Z_TrboThrMFlowDFild\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrHiPTrjDFil\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM19_111_PressureRt\t/* ' + 'Identifier */\n' + ' SAesTrboM73_143_2T\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM72_142_CoreLoBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM71_141_CoreHiBoost\t/* ' + 'Identifier */\n' + ' SAesTrboM53_Avg2\t/* ' + 'Identifier */\n' + ' SAesTrboM52_Avg1\t/* ' + 'Identifier */\n' + ' SAesTrboM51_131_2T\t/* ' + 'Identifier */\n' + ' SAesTrboM29_123_2T\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM4_2_EngProtnTrboPPeak': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM4_2_EngProtnTrboPPeak\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMonrPPeakBypFiMPerm\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM159_21_PPeakTest\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM51_131_2T': ' /begin FUNCTION\n' + ' SAesTrboM51_131_2T\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPLoAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM58_LPLoTstVal\t/* ' + 'Identifier */\n' + ' SAesTrboM57_LPHiTstVal\t/* ' + 'Identifier */\n' + ' SAesTrboM56_HPLoTstVal\t/* ' + 'Identifier */\n' + ' SAesTrboM55_HPHiTstVal\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM52_Avg1': ' /begin FUNCTION\n' + ' SAesTrboM52_Avg1\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesTrboM_t_TrboMonrHiAvgTi\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM68_Subsystem\t/* ' + 'Identifier */\n' + ' SAesTrboM67_EnabledSubsystem\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM53_Avg2': ' /begin FUNCTION\n' + ' SAesTrboM53_Avg2\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesTrboM_t_TrboMonrLoAvgTi\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t/* ' + 'Identifier */\n' + ' rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM70_Subsystem\t/* ' + 'Identifier */\n' + ' SAesTrboM69_EnabledSubsystem\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM55_HPHiTstVal': ' /begin FUNCTION\n' + ' SAesTrboM55_HPHiTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM60_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM59_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM56_HPLoTstVal': ' /begin FUNCTION\n' + ' SAesTrboM56_HPLoTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM62_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM61_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM57_LPHiTstVal': ' /begin FUNCTION\n' + ' SAesTrboM57_LPHiTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM64_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM63_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM58_LPLoTstVal': ' /begin FUNCTION\n' + ' SAesTrboM58_LPLoTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM66_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM65_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM59_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM59_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM5_3_PPvalveStuckClosed': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM5_3_PPvalveStuckClosed\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM175_31_StuckTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM60_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM60_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM61_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM61_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM62_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM62_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM63_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM63_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM64_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM64_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM65_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM65_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM66_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM66_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM67_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM67_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM68_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM68_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM69_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM69_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM6_4_PpLeakage': ' /begin FUNCTION\n' + ' SAesTrboM6_4_PpLeakage\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkExhFiMPerm\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_PpLkFiMPerm\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM192_42_LeakExhTest\t/* ' + 'Identifier */\n' + ' SAesTrboM191_41_LeakTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM70_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM70_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM71_141_CoreHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM71_141_CoreHiBoost\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrSHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiErr\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM83_Pr__rtional_Ranking\t' + '/* Identifier */\n' + ' ' + 'SAesTrboM75_1411_Mode06\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM72_142_CoreLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM72_142_CoreLoBoost\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrSLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoErr\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM97_Pr__rtional_Ranking\t' + '/* Identifier */\n' + ' ' + 'SAesTrboM89_1421_Mode06\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM73_143_2T': ' /begin FUNCTION\n' + ' SAesTrboM73_143_2T\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMUseIndHeal\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_TrboMonrSHiErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_TrboMonrSLoErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiErr\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrLoErr\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrLoOk\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiOk\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM106_1434_CoreHPLoBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM105_1433_CoreLPLoBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM104_1432_CoreHPHiBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM103_1431_CoreLPHiBoost\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM75_1411_Mode06': ' /begin FUNCTION\n' + ' SAesTrboM75_1411_Mode06\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMonrMode6Enbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM85_Dem_SetDTR\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM7_5_PpSmallLeakage': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM7_5_PpSmallLeakage\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpSmLkBypFiMPerm\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM215_51_PpSmalLeakTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM83_Pr__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM83_Pr__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM88_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM87_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM85_Dem_SetDTR': ' /begin FUNCTION\n' + ' SAesTrboM85_Dem_SetDTR\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /end FUNCTION', + 'SAesTrboM87_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM87_FaultFree\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM88_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM88_WithFault\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrRnkMax\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM89_1421_Mode06': ' /begin FUNCTION\n' + ' SAesTrboM89_1421_Mode06\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMonrMode6Enbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM8_6_PpRelay': ' /begin FUNCTION\n' + ' SAesTrboM8_6_PpRelay\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpRlyStkFiMPerm\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM227_61_RelayStuckTest\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM97_Pr__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM97_Pr__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM102_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM101_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM9_6_VNTAdp': ' /begin FUNCTION\n' + ' SAesTrboM9_6_VNTAdp\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboVntAdpnActDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboVntDpFiMPerm\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboVntEngIdleDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKHI\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKLO\t/* ' + 'Identifier */\n' + ' cVcAesTrboM_D_TrboVntStsOK\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrVntExeFlk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrVntAdpDone\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrVntExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM249_621_CoreVntDp\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'VcAesTrboM': ' /begin FUNCTION\n' + ' VcAesTrboM\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesTrboM_B_IsObdExeSpm\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' sVcAesTrboM_p_TrboMonrAmbPDif\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_ObdExe\t/* Identifier ' + '*/\n' + ' /end LOC_MEASUREMENT\n' + ' /begin OUT_MEASUREMENT\n' + ' yVcAesTrboM_B_TrboMonrSHiErr\t/* ' + 'Identifier */\n' + ' yVcAesTrboM_B_TrboMonrSLoErr\t/* ' + 'Identifier */\n' + ' /end OUT_MEASUREMENT \n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM3_1_TrboMonr\t/* Identifier ' + '*/\n' + ' SAesTrboM9_6_VNTAdp\t/* Identifier ' + '*/\n' + ' SAesTrboM8_6_PpRelay\t/* Identifier ' + '*/\n' + ' SAesTrboM7_5_PpSmallLeakage\t/* ' + 'Identifier */\n' + ' SAesTrboM6_4_PpLeakage\t/* Identifier ' + '*/\n' + ' SAesTrboM5_3_PPvalveStuckClosed\t/* ' + 'Identifier */\n' + ' SAesTrboM4_2_EngProtnTrboPPeak\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'test_mrg': ' /begin FUNCTION\n' + ' test_mrg\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin SUB_FUNCTION\n' + ' SAesSupM__g55_21_SupChrgrPPeak\t/* ' + 'Identifier */\n' + ' SAesSupM__g56_22_SupChrgrStuck\t/* ' + 'Identifier */\n' + ' SAesSupM__g5_11_SupChrgrSys\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION'}, + 'MEASUREMENT': {'rVcAesSupM_p_SupMonrSCTarDly': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrSCTarDly\t' + '/* Name */\n' + ' "Low pass filtered ' + 'supercharger target ' + 'pressure"\t/* LongIdentifier ' + '*/\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 300\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesTrboM_D_TrboVntDpHiTmp': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpHiTmp\t' + '/* Name */\n' + ' "Vnt turbo high ' + 'error counter value "\t/* ' + 'LongIdentifier */\n' + ' SBYTE\t/* Datatype ' + '*/\n' + ' EQ_LSB_1_e\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -128\t/* LowerLimit ' + '*/\n' + ' 127\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesTrboM_D_TrboVntDpLoTmp': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpLoTmp\t' + '/* Name */\n' + ' "Vnt turbo high ' + 'error counter value "\t/* ' + 'LongIdentifier */\n' + ' SBYTE\t/* Datatype ' + '*/\n' + ' EQ_LSB_1_e\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -128\t/* LowerLimit ' + '*/\n' + ' 127\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesTrboM_p_EngProtnTrboPPeakPres': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Name */\n' + ' "Pressure for ' + 'BSTPEAK monitor"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t' + '/* Datatype */\n' + ' EQ_LSB_1_a\t' + '/* Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' ' + '-3.4028234663852886e38\t' + '/* LowerLimit */\n' + ' ' + '3.4028234663852886e38\t' + '/* UpperLimit */\n' + ' READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT'}, + 'RECORD_LAYOUT': {'FLOAT32_IEEE_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t/* ' + 'Name */\n' + ' FNC_VALUES 1 ' + 'FLOAT32_IEEE COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT', + 'FLOAT32_IEEE_X_INCR_DIRECT': ' /begin RECORD_LAYOUT\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Name */\n' + ' AXIS_PTS_X 1 ' + 'FLOAT32_IEEE INDEX_INCR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'SBYTE_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' SBYTE_COL_DIRECT\t/* Name */\n' + ' FNC_VALUES 1 SBYTE COLUMN_DIR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'SWORD_X_INCR_DIRECT': ' /begin RECORD_LAYOUT\n' + ' SWORD_X_INCR_DIRECT\t/* ' + 'Name */\n' + ' AXIS_PTS_X 1 SWORD ' + 'INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT', + 'UBYTE_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' UBYTE_COL_DIRECT\t/* Name */\n' + ' FNC_VALUES 1 UBYTE COLUMN_DIR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'UWORD_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' UWORD_COL_DIRECT\t/* Name */\n' + ' FNC_VALUES 1 UWORD COLUMN_DIR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'UWORD_X_INCR_DIRECT': ' /begin RECORD_LAYOUT\n' + ' UWORD_X_INCR_DIRECT\t/* ' + 'Name */\n' + ' AXIS_PTS_X 1 UWORD ' + 'INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT'} +} +A2L_MERGED_2 = { + 'AXIS_PTS': {'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c': ' /begin AXIS_PTS\n' + ' ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c\t' + '/* Name */\n' + ' "Engine speed ' + 'breakpoint data for ' + 'supercharger stuck ' + 'load limit "\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'UWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_3\t/* ' + 'Conversion */\n' + ' 4\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_PTS', + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r': ' /begin AXIS_PTS\n' + ' ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r\t' + '/* Name */\n' + ' "Ambient ' + 'Pressure breakpoint ' + 'data for supercharger ' + 'stuck load limit "\t' + '/* LongIdentifier */\n' + ' 0x00000000\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'UWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_1\t/* ' + 'Conversion */\n' + ' 3\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 200\t/* ' + 'UpperLimit */\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_PTS', + 'mVcAesTrboM_rt_TrboMonrTgtLim_c': ' /begin AXIS_PTS\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_c\t' + '/* Name */\n' + ' "Target turbo ' + 'pressure ratio limit for low ' + 'boost, engine speed ' + 'breakpoints"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t' + '/* InputQuantity */\n' + ' UWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_0_25\t/* ' + 'Conversion */\n' + ' 10\t/* MaxAxisPoints ' + '*/\n' + ' 0\t/* LowerLimit */\n' + ' 10000\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'mVcAesTrboM_rt_TrboMonrTgtLim_r': ' /begin AXIS_PTS\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_r\t' + '/* Name */\n' + ' "Target turbo ' + 'pressure ratio limit for low ' + 'boost, Trq breakpoints"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t' + '/* InputQuantity */\n' + ' SWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_0_015625\t/* ' + 'Conversion */\n' + ' 10\t/* MaxAxisPoints ' + '*/\n' + ' -500\t/* LowerLimit ' + '*/\n' + ' 500\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x': ' /begin ' + 'AXIS_PTS\n' + ' ' + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x\t' + '/* Name */\n' + ' ' + '"Temperature ' + 'correction for ' + 'supercharger stuck ' + 'load limit"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' ' + 'NO_INPUT_QUANTITY\t' + '/* InputQuantity ' + '*/\n' + ' ' + 'UWORD_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_2\t' + '/* Conversion */\n' + ' 4\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_p_SupChrgrPPeakLim_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesSupM_p_SupChrgrPPeakLim_x\t' + '/* Name */\n' + ' "Supercharger ' + 'downstream temperature ' + 'breakpoint data"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t' + '/* InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' 4\t/* MaxAxisPoints ' + '*/\n' + ' 0\t/* LowerLimit */\n' + ' 1000\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_p_SupMonrHiErrLim_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesSupM_p_SupMonrHiErrLim_x\t' + '/* Name */\n' + ' "Supercharger high ' + 'boost pressure monitor error ' + 'limit engine speed support ' + 'points"\t/* LongIdentifier ' + '*/\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 6\t/* MaxAxisPoints ' + '*/\n' + ' 0\t/* LowerLimit */\n' + ' 10000\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_p_SupMonrLoErrLim_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesSupM_p_SupMonrLoErrLim_x\t' + '/* Name */\n' + ' "Supercharger low ' + 'boost pressure monitor error ' + 'limit engine speed support ' + 'points"\t/* LongIdentifier ' + '*/\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 6\t/* MaxAxisPoints ' + '*/\n' + ' 0\t/* LowerLimit */\n' + ' 10000\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_t_SupMonrHiEnaDly_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesSupM_t_SupMonrHiEnaDly_x\t' + '/* Name */\n' + ' "Supercharger high ' + 'boost pressure monitor, ' + 'enable condition delay time ' + 'support points"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' 5\t/* MaxAxisPoints ' + '*/\n' + ' -50\t/* LowerLimit ' + '*/\n' + ' 500\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_t_SupMonrLoEnaDly_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesSupM_t_SupMonrLoEnaDly_x\t' + '/* Name */\n' + ' "Supercharger low ' + 'boost pressure monitor, ' + 'enable condition delay time ' + 'support points"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' 5\t/* MaxAxisPoints ' + '*/\n' + ' -50\t/* LowerLimit ' + '*/\n' + ' 500\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesSupM_tc_SupMonrSCTarDly_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesSupM_tc_SupMonrSCTarDly_x\t' + '/* Name */\n' + ' "Supercharger boost ' + 'pressure monitor, target ' + 'pressure lowpass filter time ' + 'constant, engine speed ' + 'support points"\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t' + '/* InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 6\t/* MaxAxisPoints ' + '*/\n' + ' 0\t/* LowerLimit */\n' + ' 10000\t/* UpperLimit ' + '*/\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesTrboM_n_EngSpdMinLim_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesTrboM_n_EngSpdMinLim_x\t' + '/* Name */\n' + ' "Pressure upstream ' + 'turbo compressor breakpoint ' + 'data "\t/* LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_1_a\t/* ' + 'Conversion */\n' + ' 4\t/* MaxAxisPoints */\n' + ' 0\t/* LowerLimit */\n' + ' 110\t/* UpperLimit */\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS', + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x': ' /begin AXIS_PTS\n' + ' ' + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x\t' + '/* Name */\n' + ' "Pressure ' + 'upstream turbo ' + 'compressor breakpoint ' + 'data "\t/* ' + 'LongIdentifier */\n' + ' 0x00000000\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' EQ_LSB_1_a\t/* ' + 'Conversion */\n' + ' 4\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 110\t/* ' + 'UpperLimit */\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_PTS'}, + 'CHARACTERISTIC': {'cVcAesSupM_B_SupMonrHiBypFiMPerm': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_B_SupMonrHiBypFiMPerm\t' + '/* Name */\n' + ' "Switch to ' + 'bypass FiM ' + 'permission, ' + 'supercharger high ' + 'boost monitor"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_B_SupMonrHiBypFiMPerm ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_16\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_B_SupMonrHiCluOnSw': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_B_SupMonrHiCluOnSw\t' + '/* Name */\n' + ' "Switch to ' + 'bypass SC clutch on ' + 'flag, supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_B_SupMonrHiCluOnSw ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_B_SupMonrLoBypFiMPerm': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_B_SupMonrLoBypFiMPerm\t' + '/* Name */\n' + ' "Switch to ' + 'bypass FiM ' + 'permission"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_B_SupMonrLoBypFiMPerm ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_16\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_B_SupMonrLoCluOnSw': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_B_SupMonrLoCluOnSw\t' + '/* Name */\n' + ' "Switch to ' + 'bypass SC clutch on ' + 'flag, supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_B_SupMonrLoCluOnSw ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_Te_SupMonrHiTempMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_Te_SupMonrHiTempMin\t' + '/* Name */\n' + ' "Min ' + 'temperature upstream SC ' + 'enable condition, ' + 'supercharger high boost ' + '"\t/* LongIdentifier ' + '*/\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_Te_SupMonrHiTempMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' -40\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_Te_SupMonrLoTempMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_Te_SupMonrLoTempMin\t' + '/* Name */\n' + ' "Min ' + 'temperature upstream SC ' + 'enable condition, ' + 'supercharger low boost ' + '"\t/* LongIdentifier ' + '*/\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_Te_SupMonrLoTempMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_X_SupChrgrStuckThrPosMaxLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupChrgrStuckThrPosMaxLim\t' + '/* Name */\n' + ' "Error ' + 'limit for stuck ' + 'supercharger ' + 'engine ' + 'protection ' + '(prot off under ' + 'this limit)"\t' + '/* ' + 'LongIdentifier ' + '*/\n' + ' VALUE\t' + '/* Type */\n' + ' ' + '0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupChrgrStuckThrPosMaxLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' ' + 'Scaling_13\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupChrgrStuckThrPosRefLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupChrgrStuckThrPosRefLim\t' + '/* Name */\n' + ' "Bypass ' + 'throttle max ' + 'limit to freeze ' + 'pressure ' + 'reference ' + 'value"\t/* ' + 'LongIdentifier ' + '*/\n' + ' VALUE\t' + '/* Type */\n' + ' ' + '0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupChrgrStuckThrPosRefLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' ' + 'Scaling_13\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrHiCmprThrMaxLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrHiCmprThrMaxLim\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'throttle enable ' + 'coindition, SC ' + 'high boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_X_SupMonrHiCmprThrMaxLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' ' + 'Scaling_13\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 110\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrHiThrNegDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrHiThrNegDrv\t' + '/* Name */\n' + ' "Supercharger ' + 'throttle max negative ' + 'derivative enable ' + 'condition, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupMonrHiThrNegDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_14\t/* ' + 'Conversion */\n' + ' -1000\t/* ' + 'LowerLimit */\n' + ' 0\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrHiThrPosDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrHiThrPosDrv\t' + '/* Name */\n' + ' "Supercharger ' + 'throttle max positive ' + 'derivative enable ' + 'condition, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupMonrHiThrPosDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_14\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrLoThrMaxLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrMaxLim\t' + '/* Name */\n' + ' "Supercharger ' + 'throttle enable ' + 'coindition, SC low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupMonrLoThrMaxLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_13\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 300\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrLoThrMinLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrMinLim\t' + '/* Name */\n' + ' "Supercharger ' + 'throttle enable ' + 'coindition, SC low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupMonrLoThrMinLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_13\t/* ' + 'Conversion */\n' + ' -10\t/* ' + 'LowerLimit */\n' + ' 100\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrLoThrNegDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrNegDrv\t' + '/* Name */\n' + ' "Supercharger ' + 'throttle max negative ' + 'derivative enable ' + 'condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupMonrLoThrNegDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_14\t/* ' + 'Conversion */\n' + ' -1000\t/* ' + 'LowerLimit */\n' + ' 0\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_X_SupMonrLoThrPosDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrPosDrv\t' + '/* Name */\n' + ' "Supercharger ' + 'throttle max positive ' + 'derivative enable ' + 'condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_X_SupMonrLoThrPosDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_14\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_dp_SupMonrHiSCTarNegDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_dp_SupMonrHiSCTarNegDrv\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'pressure target ' + 'negative derivative ' + 'enable condition, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_dp_SupMonrHiSCTarNegDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_8\t' + '/* Conversion */\n' + ' -1000\t/* ' + 'LowerLimit */\n' + ' 0\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_dp_SupMonrHiSCTarPosDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_dp_SupMonrHiSCTarPosDrv\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'pressure target max ' + 'positive derivative ' + 'enable condition, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_dp_SupMonrHiSCTarPosDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_8\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_dp_SupMonrLoSCTarNegDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_dp_SupMonrLoSCTarNegDrv\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'pressure target ' + 'negative derivative ' + 'enable condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_dp_SupMonrLoSCTarNegDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_8\t' + '/* Conversion */\n' + ' -1000\t/* ' + 'LowerLimit */\n' + ' 0\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_dp_SupMonrLoSCTarPosDrv': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_dp_SupMonrLoSCTarPosDrv\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'pressure target max ' + 'positive derivative ' + 'enable condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_dp_SupMonrLoSCTarPosDrv ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_8\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_m_SupMonrHiCylRevTotMax': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_m_SupMonrHiCylRevTotMax\t' + '/* Name */\n' + ' "Max load ' + 'enable condition, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_m_SupMonrHiCylRevTotMax ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_10\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 5\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_m_SupMonrHiCylRevTotMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_m_SupMonrHiCylRevTotMin\t' + '/* Name */\n' + ' "Min load ' + 'enable condition, ' + 'supercharger high ' + 'boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_m_SupMonrHiCylRevTotMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_10\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 5\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_m_SupMonrLoCylRevTotMax': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_m_SupMonrLoCylRevTotMax\t' + '/* Name */\n' + ' "Max load ' + 'enable condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_m_SupMonrLoCylRevTotMax ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_10\t' + '/* Conversion */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_m_SupMonrLoCylRevTotMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_m_SupMonrLoCylRevTotMin\t' + '/* Name */\n' + ' "Min load ' + 'enable condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_m_SupMonrLoCylRevTotMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_10\t' + '/* Conversion */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_n_SupMonrHiEngSpdMax': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_n_SupMonrHiEngSpdMax\t' + '/* Name */\n' + ' "Max engine ' + 'speed enable ' + 'condition, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_n_SupMonrHiEngSpdMax ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_n_SupMonrHiEngSpdMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_n_SupMonrHiEngSpdMin\t' + '/* Name */\n' + ' "Min engine ' + 'speed enable ' + 'condition, ' + 'supercharger high ' + 'boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_n_SupMonrHiEngSpdMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_n_SupMonrLoEngSpdMax': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_n_SupMonrLoEngSpdMax\t' + '/* Name */\n' + ' "Max engine ' + 'speed enable ' + 'condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_n_SupMonrLoEngSpdMax ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_n_SupMonrLoEngSpdMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_n_SupMonrLoEngSpdMin\t' + '/* Name */\n' + ' "Min engine ' + 'speed enable ' + 'condition, ' + 'supercharger low boost ' + '"\t/* LongIdentifier ' + '*/\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_n_SupMonrLoEngSpdMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_p_SupChrgrPPeakHealLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupChrgrPPeakHealLim\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'pressure peak ' + 'healing delay"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_p_SupChrgrPPeakHealLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_4\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 200\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_p_SupChrgrStuckErrLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupChrgrStuckErrLim\t' + '/* Name */\n' + ' "Error limit ' + 'for stuck ' + 'supercharger engine ' + 'protection (prot off ' + 'under this limit)"\t' + '/* LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_p_SupChrgrStuckErrLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_p_SupMonrHiAmbpMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupMonrHiAmbpMin\t' + '/* Name */\n' + ' "Min ambient ' + 'pressure enable ' + 'condition, supercharger ' + 'high boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_p_SupMonrHiAmbpMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 110\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_p_SupMonrHiTarMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupMonrHiTarMin\t' + '/* Name */\n' + ' "Min target boost ' + 'pressure enable ' + 'condition, supercharger ' + 'high boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_p_SupMonrHiTarMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' -1000\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_p_SupMonrLoAmbpMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupMonrLoAmbpMin\t' + '/* Name */\n' + ' "Min ambient ' + 'pressure enable ' + 'condition, supercharger ' + 'low boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_p_SupMonrLoAmbpMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_p_SupMonrLoTarMax': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupMonrLoTarMax\t' + '/* Name */\n' + ' "Min target boost ' + 'pressure enable ' + 'condition, supercharger ' + 'low boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_p_SupMonrLoTarMax ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 200\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_p_SupMonrLoTarMin': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_p_SupMonrLoTarMin\t' + '/* Name */\n' + ' "Min target boost ' + 'pressure enable ' + 'condition, supercharger ' + 'low boost "\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_p_SupMonrLoTarMin ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' -1000\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_t_SupChrgrPPeakErrDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupChrgrPPeakErrDly\t' + '/* Name */\n' + ' "Supercharger ' + 'peak pressure engine ' + 'protection activation ' + 'delay"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_t_SupChrgrPPeakErrDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_t_SupChrgrPPeakHealDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupChrgrPPeakHealDly\t' + '/* Name */\n' + ' ' + '"Supercharger peak ' + 'pressure engine ' + 'protection ' + 'deactivation delay"\t' + '/* LongIdentifier ' + '*/\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_t_SupChrgrPPeakHealDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_7\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' ' + '3.402823466e38\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_t_SupChrgrStuckErrDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupChrgrStuckErrDly\t' + '/* Name */\n' + ' "Supercharger ' + 'Stuck engine ' + 'protection activation ' + 'delay"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' 0x00000000 ' + '/* address: ' + 'cVcAesSupM_t_SupChrgrStuckErrDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_t_SupChrgrStuckHealDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupChrgrStuckHealDly\t' + '/* Name */\n' + ' ' + '"Supercharger stuck ' + 'engine protection ' + 'deactivation delay ' + '(allow retest after ' + 'this delay time)"\t' + '/* LongIdentifier ' + '*/\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_t_SupChrgrStuckHealDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_7\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' ' + '3.402823466e38\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_t_SupChrgrStuckRefResetDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupChrgrStuckRefResetDly\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'Stuck monitor ' + 'maximum ' + 'activation ' + 'time"\t/* ' + 'LongIdentifier ' + '*/\n' + ' VALUE\t' + '/* Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_t_SupChrgrStuckRefResetDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' ' + 'Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' ' + '3.402823466e38\t' + '/* UpperLimit ' + '*/\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_t_SupMonrHiAvgTi': ' /begin CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupMonrHiAvgTi\t' + '/* Name */\n' + ' "Supercharger high ' + 'boost test value average ' + 'calculation time"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type */\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_t_SupMonrHiAvgTi ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 100\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_t_SupMonrLoAvgTi': ' /begin CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupMonrLoAvgTi\t' + '/* Name */\n' + ' "Supercharger low ' + 'boost test value average ' + 'calculation time"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type */\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_t_SupMonrLoAvgTi ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 100\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_tc_SupMonrHiSCTar': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_tc_SupMonrHiSCTar\t' + '/* Name */\n' + ' "Supercharger ' + 'boost pressure monitor, ' + 'target pressure ' + 'deriviative time ' + 'constant"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_tc_SupMonrHiSCTar ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_tc_SupMonrHiTiConCmprThr': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_tc_SupMonrHiTiConCmprThr\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'bypass throttle ' + 'position ' + 'derivative time ' + 'constant, ' + 'supercharger high ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_tc_SupMonrHiTiConCmprThr ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_7\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 100\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesSupM_tc_SupMonrLoSCTar': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_tc_SupMonrLoSCTar\t' + '/* Name */\n' + ' "Supercharger ' + 'boost pressure monitor, ' + 'target pressure ' + 'deriviative time ' + 'constant, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesSupM_tc_SupMonrLoSCTar ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesSupM_tc_SupMonrLoTiConCmprThr': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_tc_SupMonrLoTiConCmprThr\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'bypass throttle ' + 'position ' + 'derivative time ' + 'constant, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'cVcAesSupM_tc_SupMonrLoTiConCmprThr ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' Scaling_7\t' + '/* Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 100\t/* ' + 'UpperLimit */\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP\t' + '/* Name */\n' + ' ' + '"Use ' + 'absolute ' + 'pressure in ' + 'peak ' + 'monitor"\t' + '/* ' + 'LongIdentifier ' + '*/\n' + ' ' + 'VALUE\t/* ' + 'Type */\n' + ' ' + '0x00000000 ' + '/* address: ' + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP ' + '*/\n' + ' ' + 'UBYTE_COL_DIRECT\t' + '/* Deposit ' + '*/\n' + ' 0\t' + '/* MaxDiff ' + '*/\n' + ' ' + 'EQ_LSB_1_d\t' + '/* ' + 'Conversion ' + '*/\n' + ' 0\t' + '/* ' + 'LowerLimit ' + '*/\n' + ' 1\t' + '/* ' + 'UpperLimit ' + '*/\n' + ' /end ' + 'CHARACTERISTIC', + 'cVcAesTrboM_B_IsObdExeSpm': ' /begin CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_IsObdExeSpm\t' + '/* Name */\n' + ' "Defines where is ' + 'the obd exe flag coming from ' + '(1 if coming from SPM)"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type */\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesTrboM_B_IsObdExeSpm ' + '*/\n' + ' UBYTE_COL_DIRECT\t/* ' + 'Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_1_d\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' /end CHARACTERISTIC', + 'cVcAesTrboM_B_PpLkExhFiMPerm': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkExhFiMPerm\t' + '/* Name */\n' + ' "Switch to bypass ' + 'FiM permission"\t/* ' + 'LongIdentifier */\n' + ' VALUE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'cVcAesTrboM_B_PpLkExhFiMPerm ' + '*/\n' + ' UBYTE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' EQ_LSB_1_d\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' /end CHARACTERISTIC', + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'stuck load ' + 'limit"\t/* ' + 'LongIdentifier ' + '*/\n' + ' MAP\t/* ' + 'Type */\n' + ' ' + '0x00000000 /* ' + 'address: ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim ' + '*/\n' + ' ' + 'UWORD_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' ' + 'Scaling_0\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 5\t/* ' + 'UpperLimit */\n' + ' /begin ' + 'AXIS_DESCR\n' + ' ' + 'COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t' + '/* InputQuantity ' + '*/\n' + ' ' + 'Scaling_1\t/* ' + 'Conversion */\n' + ' 3\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 200\t' + '/* UpperLimit */\n' + ' ' + 'AXIS_PTS_REF ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r\n' + ' ' + 'DEPOSIT ABSOLUTE\n' + ' /end ' + 'AXIS_DESCR\n' + ' /begin ' + 'AXIS_DESCR\n' + ' ' + 'COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t' + '/* InputQuantity ' + '*/\n' + ' ' + 'Scaling_3\t/* ' + 'Conversion */\n' + ' 4\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' ' + '10000\t/* ' + 'UpperLimit */\n' + ' ' + 'AXIS_PTS_REF ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c\n' + ' ' + 'DEPOSIT ABSOLUTE\n' + ' /end ' + 'AXIS_DESCR\n' + ' /end ' + 'CHARACTERISTIC', + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp\t' + '/* Name */\n' + ' ' + '"temperature ' + 'factor for load ' + 'limit ' + 'compensation"\t' + '/* ' + 'LongIdentifier ' + '*/\n' + ' CURVE\t' + '/* Type */\n' + ' ' + '0x00000000 ' + '/* address: ' + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp ' + '*/\n' + ' ' + 'UWORD_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* ' + 'MaxDiff */\n' + ' ' + 'Scaling_15\t/* ' + 'Conversion */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 3.99\t' + '/* UpperLimit ' + '*/\n' + ' /begin ' + 'AXIS_DESCR\n' + ' ' + 'COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t' + '/* ' + 'InputQuantity ' + '*/\n' + ' ' + 'Scaling_2\t/* ' + 'Conversion */\n' + ' 4\t' + '/* ' + 'MaxAxisPoints ' + '*/\n' + ' 0\t' + '/* LowerLimit ' + '*/\n' + ' ' + '1000\t/* ' + 'UpperLimit */\n' + ' ' + 'AXIS_PTS_REF ' + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x\n' + ' ' + 'DEPOSIT ' + 'ABSOLUTE\n' + ' /end ' + 'AXIS_DESCR\n' + ' /end ' + 'CHARACTERISTIC', + 'tVcAesSupM_p_SupChrgrPPeakLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_p_SupChrgrPPeakLim\t' + '/* Name */\n' + ' "Supercharger ' + 'peak boost pressure ' + 'protection activation ' + 'limit"\t/* ' + 'LongIdentifier */\n' + ' CURVE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'tVcAesSupM_p_SupChrgrPPeakLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' ' + '-3.4028234663852886e38\t' + '/* LowerLimit */\n' + ' ' + '3.4028234663852886e38\t' + '/* UpperLimit */\n' + ' /begin ' + 'AXIS_DESCR\n' + ' COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' Scaling_5\t' + '/* Conversion */\n' + ' 4\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1000\t/* ' + 'UpperLimit */\n' + ' AXIS_PTS_REF ' + 'tVcAesSupM_p_SupChrgrPPeakLim_x\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_DESCR\n' + ' /end CHARACTERISTIC', + 'tVcAesSupM_p_SupMonrHiErrLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_p_SupMonrHiErrLim\t' + '/* Name */\n' + ' "Supercharger ' + 'high boost pressure ' + 'monitor error limit"\t/* ' + 'LongIdentifier */\n' + ' CURVE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'tVcAesSupM_p_SupMonrHiErrLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' -50\t/* ' + 'LowerLimit */\n' + ' 200\t/* ' + 'UpperLimit */\n' + ' /begin ' + 'AXIS_DESCR\n' + ' COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 6\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' AXIS_PTS_REF ' + 'tVcAesSupM_p_SupMonrHiErrLim_x\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_DESCR\n' + ' /end CHARACTERISTIC', + 'tVcAesSupM_p_SupMonrLoErrLim': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_p_SupMonrLoErrLim\t' + '/* Name */\n' + ' "Supercharger low ' + 'boost pressure monitor ' + 'error limit"\t/* ' + 'LongIdentifier */\n' + ' CURVE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'tVcAesSupM_p_SupMonrLoErrLim ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' -200\t/* ' + 'LowerLimit */\n' + ' 50\t/* UpperLimit ' + '*/\n' + ' /begin ' + 'AXIS_DESCR\n' + ' COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' Scaling_6\t/* ' + 'Conversion */\n' + ' 6\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' AXIS_PTS_REF ' + 'tVcAesSupM_p_SupMonrLoErrLim_x\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_DESCR\n' + ' /end CHARACTERISTIC', + 'tVcAesSupM_t_SupMonrHiEnaDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_t_SupMonrHiEnaDly\t' + '/* Name */\n' + ' "Supercharger ' + 'high boost pressure ' + 'monitor, enable condition ' + 'delay time"\t/* ' + 'LongIdentifier */\n' + ' CURVE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'tVcAesSupM_t_SupMonrHiEnaDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 100\t/* ' + 'UpperLimit */\n' + ' /begin ' + 'AXIS_DESCR\n' + ' COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' 5\t/* ' + 'MaxAxisPoints */\n' + ' -50\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' AXIS_PTS_REF ' + 'tVcAesSupM_t_SupMonrHiEnaDly_x\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_DESCR\n' + ' /end CHARACTERISTIC', + 'tVcAesSupM_t_SupMonrLoEnaDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_t_SupMonrLoEnaDly\t' + '/* Name */\n' + ' "Supercharger low ' + 'boost pressure monitor, ' + 'enable condition delay ' + 'time"\t/* LongIdentifier ' + '*/\n' + ' CURVE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'tVcAesSupM_t_SupMonrLoEnaDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff */\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 100\t/* ' + 'UpperLimit */\n' + ' /begin ' + 'AXIS_DESCR\n' + ' COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' Scaling_5\t/* ' + 'Conversion */\n' + ' 5\t/* ' + 'MaxAxisPoints */\n' + ' -50\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' AXIS_PTS_REF ' + 'tVcAesSupM_t_SupMonrLoEnaDly_x\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_DESCR\n' + ' /end CHARACTERISTIC', + 'tVcAesSupM_tc_SupMonrSCTarDly': ' /begin ' + 'CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_tc_SupMonrSCTarDly\t' + '/* Name */\n' + ' "Supercharger ' + 'boost pressure monitor, ' + 'target pressure lowpass ' + 'filter time constant, ' + 'engine speed support ' + 'points"\t/* ' + 'LongIdentifier */\n' + ' CURVE\t/* Type ' + '*/\n' + ' 0x00000000 /* ' + 'address: ' + 'tVcAesSupM_tc_SupMonrSCTarDly ' + '*/\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t' + '/* Deposit */\n' + ' 0\t/* MaxDiff ' + '*/\n' + ' Scaling_7\t/* ' + 'Conversion */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 100\t/* ' + 'UpperLimit */\n' + ' /begin ' + 'AXIS_DESCR\n' + ' COM_AXIS\t/* ' + 'Attribute */\n' + ' ' + 'NO_INPUT_QUANTITY\t/* ' + 'InputQuantity */\n' + ' Scaling_6\t' + '/* Conversion */\n' + ' 6\t/* ' + 'MaxAxisPoints */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 10000\t/* ' + 'UpperLimit */\n' + ' AXIS_PTS_REF ' + 'tVcAesSupM_tc_SupMonrSCTarDly_x\n' + ' DEPOSIT ' + 'ABSOLUTE\n' + ' /end AXIS_DESCR\n' + ' /end CHARACTERISTIC'}, + 'COMPU_METHOD': {'EQ_LSB_0_000244140625': ' /begin COMPU_METHOD\n' + ' EQ_LSB_0_000244140625\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ' + 'ConversionType */\n' + ' "%15.12"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 ' + '0.000244140625\n' + ' /end COMPU_METHOD', + 'EQ_LSB_0_015625': ' /begin COMPU_METHOD\n' + ' EQ_LSB_0_015625\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%10.6"\t/* Format */\n' + ' "Nm"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 0.015625\n' + ' /end COMPU_METHOD', + 'EQ_LSB_0_25': ' /begin COMPU_METHOD\n' + ' EQ_LSB_0_25\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%8.2"\t/* Format */\n' + ' "rpm"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 0.25\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_a': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_a\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "kPa"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_b': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_b\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "rpm"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_c': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_c\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_d': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_d\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_e': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_e\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%3.0"\t/* Format */\n' + ' "-"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_f': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_f\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%3.0"\t/* Format */\n' + ' "deg C"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_g': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_g\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%3.0"\t/* Format */\n' + ' "s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_j': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_j\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' "deg C"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_k': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_k\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "deg C"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_l': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_l\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' "s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_m': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_m\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "kPa/s"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'EQ_LSB_1_n': ' /begin COMPU_METHOD\n' + ' EQ_LSB_1_n\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' "g/s2"\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_0': ' /begin COMPU_METHOD\n' + ' Scaling_0 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%15.12" /* Format */\n' + ' "g/rev" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.000244140625\n' + ' /end COMPU_METHOD', + 'Scaling_1': ' /begin COMPU_METHOD\n' + ' Scaling_1 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.8" /* Format */\n' + ' "kPa" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.00390625\n' + ' /end COMPU_METHOD', + 'Scaling_10': ' /begin COMPU_METHOD\n' + ' Scaling_10 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "g/rev" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_11': ' /begin COMPU_METHOD\n' + ' Scaling_11 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_12': ' /begin COMPU_METHOD\n' + ' Scaling_12 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%1.0" /* Format */\n' + ' "%" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_13': ' /begin COMPU_METHOD\n' + ' Scaling_13 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "%" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_14': ' /begin COMPU_METHOD\n' + ' Scaling_14 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "%/s" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_15': ' /begin COMPU_METHOD\n' + ' Scaling_15 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%16.14" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 6.103515625e-05\n' + ' /end COMPU_METHOD', + 'Scaling_16': ' /begin COMPU_METHOD\n' + ' Scaling_16 /* Name */\n' + ' "Void scaling for unscaled ' + 'variables" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%1.0" /* Format */\n' + ' "" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_17': ' /begin COMPU_METHOD\n' + ' Scaling_17 /* Name */\n' + ' "Void scaling for unscaled ' + 'variables" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_2': ' /begin COMPU_METHOD\n' + ' Scaling_2 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%10.5" /* Format */\n' + ' "K" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.03125\n' + ' /end COMPU_METHOD', + 'Scaling_3': ' /begin COMPU_METHOD\n' + ' Scaling_3 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%8.2" /* Format */\n' + ' "rpm" /* Unit */\n' + ' COEFFS 0 1 0 0 0 0.25\n' + ' /end COMPU_METHOD', + 'Scaling_4': ' /begin COMPU_METHOD\n' + ' Scaling_4 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "kPa" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_5': ' /begin COMPU_METHOD\n' + ' Scaling_5 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "K" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_6': ' /begin COMPU_METHOD\n' + ' Scaling_6 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "rpm" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_7': ' /begin COMPU_METHOD\n' + ' Scaling_7 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "s" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_8': ' /begin COMPU_METHOD\n' + ' Scaling_8 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%12.6" /* Format */\n' + ' "kPa/s" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_9': ' /begin COMPU_METHOD\n' + ' Scaling_9 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%1.0" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'VOID_SCALING': ' /begin COMPU_METHOD\n' + ' VOID_SCALING\t/* Name */\n' + ' "Void scaling for unscaled ' + 'variables"\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%1.0"\t/* Format */\n' + ' ""\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD', + 'VOID_SCALING_h': ' /begin COMPU_METHOD\n' + ' VOID_SCALING_h\t/* Name */\n' + ' "Void scaling for unscaled ' + 'variables"\t/* LongIdentifier */\n' + ' RAT_FUNC\t/* ConversionType */\n' + ' "%12.6"\t/* Format */\n' + ' ""\t/* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD'}, + 'FUNCTION': {'SAesSupM__g29_Avg1': ' /begin FUNCTION\n' + ' SAesSupM__g29_Avg1\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesSupM_t_SupMonrHiAvgTi\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' rVcAesSupM_p_SupMonrPDif\t/* ' + 'Identifier */\n' + ' xVcAesSupM_B_SupMonrHiExe\t/* ' + 'Identifier */\n' + ' rVcAesSupM_p_SupMonrHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiTstValCmplt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesSupM__g32_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesSupM__g31_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g30_Avg2': ' /begin FUNCTION\n' + ' SAesSupM__g30_Avg2\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesSupM_t_SupMonrLoAvgTi\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' rVcAesSupM_p_SupMonrPDif\t/* ' + 'Identifier */\n' + ' xVcAesSupM_B_SupMonrLoExe\t/* ' + 'Identifier */\n' + ' rVcAesSupM_p_SupMonrLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTstValCmplt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesSupM__g34_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesSupM__g33_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g31_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g31_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g32_Subsystem': ' /begin FUNCTION\n' + ' SAesSupM__g32_Subsystem\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupMonrHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrPDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g33_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g33_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g34_Subsystem': ' /begin FUNCTION\n' + ' SAesSupM__g34_Subsystem\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesSupM_t_SupMonrLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrPDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g35_141_CoreHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g35_141_CoreHiBoost\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_p_SupMonrHiErrLim\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_p_SupMonrHiErrLim_x\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_Z_SupMonrHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiErr\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g41___rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g36_142_CoreLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g36_142_CoreLoBoost\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_p_SupMonrLoErrLim\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_p_SupMonrLoErrLim_x\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_Z_SupMonrLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoErr\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g50___rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g41___rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g41___rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiErr\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g44_FaultFree\t/* ' + 'Identifier */\n' + ' ' + 'SAesSupM__g45_WithFault\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g44_FaultFree': ' /begin FUNCTION\n' + ' SAesSupM__g44_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g45_WithFault': ' /begin FUNCTION\n' + ' SAesSupM__g45_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g50___rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g50___rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoErr\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g53_FaultFree\t/* ' + 'Identifier */\n' + ' ' + 'SAesSupM__g54_WithFault\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g53_FaultFree': ' /begin FUNCTION\n' + ' SAesSupM__g53_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g54_WithFault': ' /begin FUNCTION\n' + ' SAesSupM__g54_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g55_21_SupChrgrPPeak': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g55_21_SupChrgrPPeak\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrPPeakErr\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g59_211_PPeakTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g56_22_SupChrgrStuck': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g56_22_SupChrgrStuck\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckErr\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g70_221_StuckTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g59_211_PPeakTest': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g59_211_PPeakTest\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_p_SupChrgrPPeakLim\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_p_SupChrgrPPeakLim_x\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_p_SupChrgrPPeakHealLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_t_SupChrgrPPeakErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_t_SupChrgrPPeakHealDly\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrPPeakErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_p_SupChrgrPDsAtmDiff\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesSupM__g5_11_SupChrgrSys': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g5_11_SupChrgrSys\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'tVcAesSupM_t_SupMonrLoEnaDly\t/* ' + 'Identifier */\n' + ' ' + 'tVcAesSupM_t_SupMonrLoEnaDly_x\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_t_SupMonrHiEnaDly\t/* ' + 'Identifier */\n' + ' ' + 'tVcAesSupM_t_SupMonrHiEnaDly_x\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_tc_SupMonrSCTarDly\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_tc_SupMonrSCTarDly_x\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_B_SupMonrHiBypFiMPerm\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_B_SupMonrHiCluOnSw\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_B_SupMonrLoBypFiMPerm\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_B_SupMonrLoCluOnSw\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_Te_SupMonrHiTempMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_Te_SupMonrLoTempMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrHiCmprThrMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrHiThrNegDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrHiThrPosDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrNegDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupMonrLoThrPosDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_dp_SupMonrHiSCTarNegDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_dp_SupMonrHiSCTarPosDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_dp_SupMonrLoSCTarNegDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_dp_SupMonrLoSCTarPosDrv\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_m_SupMonrHiCylRevTotMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_m_SupMonrHiCylRevTotMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_m_SupMonrLoCylRevTotMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_m_SupMonrLoCylRevTotMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_n_SupMonrHiEngSpdMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_n_SupMonrHiEngSpdMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_n_SupMonrLoEngSpdMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_n_SupMonrLoEngSpdMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_p_SupMonrHiAmbpMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_p_SupMonrHiTarMin\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesSupM_p_SupMonrLoAmbpMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_p_SupMonrLoTarMax\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesSupM_p_SupMonrLoTarMin\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesSupM_tc_SupMonrHiSCTar\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesSupM_tc_SupMonrHiTiConCmprThr\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_tc_SupMonrLoSCTar\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesSupM_tc_SupMonrLoTiConCmprThr\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_t_SupMonrHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesSupM_t_SupMonrLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrSCTarDly\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesSupM_p_SupMonrPDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesSupM_Z_SupMonrHiSCThrDrv\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_Z_SupMonrLoSCThrDrv\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_Z_SupMonrHiSCTarDrv\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_Z_SupMonrLoSCTarDrv\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiCluOnEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCluOnEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoThrDrvEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiThrDrvEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiSCTarDrvEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoSCTarDrvEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTarEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCmprThrEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiCylRevEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCylRevEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiEngSpdEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoEngSpdEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiAmbpEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiTarEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoAmbpEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTarMaxEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiSCTempEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoSCTempEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTarMinEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCmprThrMinEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCmprThrMaxEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiCmprThrEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiStabEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoStabEna\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_p_SupMonrSCTar\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTstValCmplt\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesSupM__g36_142_CoreLoBoost\t' + '/* Identifier */\n' + ' ' + 'SAesSupM__g35_141_CoreHiBoost\t' + '/* Identifier */\n' + ' SAesSupM__g29_Avg1\t' + '/* Identifier */\n' + ' SAesSupM__g30_Avg2\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesSupM__g70_221_StuckTest': ' /begin FUNCTION\n' + ' ' + 'SAesSupM__g70_221_StuckTest\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim\t' + '/* Identifier */\n' + ' ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r\t' + '/* Identifier */\n' + ' ' + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp\t' + '/* Identifier */\n' + ' ' + 'tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupChrgrStuckThrPosRefLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_t_SupChrgrStuckRefResetDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_X_SupChrgrStuckThrPosMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_p_SupChrgrStuckErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_t_SupChrgrStuckErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesSupM_t_SupChrgrStuckHealDly\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckEnable\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_p_SupChgrStuckPDiff\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckUnfiltErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_p_SupChrgrStuckPDiffMax\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_m_SupChrgrStuckMaxLoadLim\t' + '/* Identifier */\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_fac_SupChrgrStuckMaxLoadCmp\t' + '/* Identifier */\n' + ' ' + 'rVcAesSupM_m_SupChrgrStuckMaxLoadLimBase\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM101_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM101_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM102_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM102_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrRnkMax\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM103_1431_CoreLPHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM103_1431_CoreLPHiBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrLPHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM123_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM104_1432_CoreHPHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM104_1432_CoreHPHiBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrHPHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM133_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM105_1433_CoreLPLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM105_1433_CoreLPLoBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrLPLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM143_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM106_1434_CoreHPLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM106_1434_CoreHPLoBoost\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrHPLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoFalt\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM153_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM123_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM123_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM128_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM127_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM127_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM127_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM128_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM128_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM133_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM133_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM138_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM137_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM137_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM137_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM138_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM138_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPHiErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM143_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM143_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM148_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM147_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM147_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM147_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM148_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM148_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM153_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM153_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM158_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM157_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM157_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM157_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM158_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM158_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHPLoErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM159_21_PPeakTest': ' /begin FUNCTION\n' + ' SAesTrboM159_21_PPeakTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakHealLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_EngProtnTrboPeakErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_EngProtnTrboPeakHealDly\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_EngProtnTrboPPeakRnk\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_ObdExe\t' + '/* Identifier */\n' + ' ' + 'yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM172_Vc_SetRanking\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM168_P__rtional_Ranking\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM168_P__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM168_P__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMin\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM174_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM173_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM172_Vc_SetRanking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM172_Vc_SetRanking\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_EngProtnTrboPPeakRnk\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM173_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM173_FaultFree\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMin\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM174_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM174_WithFault\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_EngProtnTrboPPeakRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM175_31_StuckTest': ' /begin FUNCTION\n' + ' SAesTrboM175_31_StuckTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpValveStuckNoPump\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpValveStuck\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckHealDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckOkDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpValveStuckMinPres\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpValveStuckRefResetDly\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStkExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckUnfiltErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckOkExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckErr\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpValveStuckPDiff\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpValveStuckPDiffMax\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpValveStuckEnable\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM191_41_LeakTest': ' /begin FUNCTION\n' + ' SAesTrboM191_41_LeakTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkUseMaxtimeout\t/* ' + 'Identifier */\n' + ' cVcAesTrboM_p_PpLkLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLeakPlsDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLeakTimeOut\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkErrDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkHealDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkOkDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkPumpReqTimeOut\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkPumpAct\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_PpLkExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkFltFlagUnfiltd\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_PpLkOk\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpLkTstValue\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkMaxPumpReqTimeOut\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_PpLkErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkFltFlag\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkPumpActDly\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpLkInitPres\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM192_42_LeakExhTest': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM192_42_LeakExhTest\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkExhNoPumpUse\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpLkExhLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhAftStrt\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhErrDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhHealDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpLkExhOkDly\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhFltFlagUnfiltd\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpLkExhFtlFlag\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpLkExhTstValue\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM19_111_PressureRt': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM19_111_PressureRt\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim\t/* ' + 'Identifier */\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_r\t' + '/* Identifier */\n' + ' ' + 'mVcAesTrboM_rt_TrboMonrTgtLim_c\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrTgtTqNLim\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrTgtLim\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrSnsr\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_rt_TrboMonrTgt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM215_51_PpSmalLeakTest': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM215_51_PpSmalLeakTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpSmLkNotUseCmprOk\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Te_PpSmLkMinTempEna\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_PpSmLkMaxDrop\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkErrDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkHealDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkMaxLastCompRun\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkMinLastCompRun\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_PpSmLkOkDly\t/* ' + 'Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkFltFlagUnfiltd\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmalLeakExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkPreErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpSmLkTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_PpSmLkFltFlag\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_PpSmLkInitPres\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_t_PpSmLkCompRun\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM227_61_RelayStuckTest': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM227_61_RelayStuckTest\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_Rly1StkLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_Rly2StkLim\t/* ' + 'Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkRly1Act\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly2StkErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkRly2Act\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_Rly1StkExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly2StkTstValue\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly1StkTstValue\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly2StkInitPres\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_Rly1StkInitPres\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM249_621_CoreVntDp': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM249_621_CoreVntDp\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboVntDpRst\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpHiNrmLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpHiRstVal\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpLoNrmLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntDpLoRstVal\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsCntMax\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsCntMin\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKHI\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKInc\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKLO\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsOK\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsOKDec\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpLoTmp\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpHiTmp\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpLoTmpNrm\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpHiTmpErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpLoTmpErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntStsLoErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntStsHiErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpStsLoOk\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboVntDpStsHiOk\t' + '/* Identifier */\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsLoCnt\t' + '/* Identifier */\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsHiCnt\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM264_WriteNVM\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM261_WriteNVM\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM261_WriteNVM': ' /begin FUNCTION\n' + ' SAesTrboM261_WriteNVM\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsHiCnt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM264_WriteNVM': ' /begin FUNCTION\n' + ' SAesTrboM264_WriteNVM\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'sVcAesTrboM_D_TrboVntDpStsLoCnt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM29_123_2T': ' /begin FUNCTION\n' + ' SAesTrboM29_123_2T\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_n_TrboMonrHPEngSpdMax\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_n_TrboMonrLPEngSpdMin\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_TrboMonrLoExe\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiExe\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM3_1_TrboMonr': ' /begin FUNCTION\n' + ' SAesTrboM3_1_TrboMonr\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly\t/* ' + 'Identifier */\n' + ' ' + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x\t' + '/* Identifier */\n' + ' ' + 'tVcAesTrboM_n_EngSpdMinLim\t/* ' + 'Identifier */\n' + ' ' + 'tVcAesTrboM_n_EngSpdMinLim_x\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLoAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrBypFiMPerm\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_Te_TrboMonrEngClntMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrCmprBypCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrCmprPUsCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM0\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM1\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM2\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM3\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM4\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoEOM5\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrLoRegDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrSCCluCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrTrboActvLoDsbl\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Te_TrboMonrLoRegMin\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrPTrjDFilMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrPTrjDFilMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrIntkBoostPTrjMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrSCPMaxLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLoRegDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrPTrjStabDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_tc_TrboMonrTiConPTrjDFil\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM0\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM1\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM2\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM3\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM4\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiEOM5\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrHiRegDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrTrboActvHiDsbl\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Te_TrboMonrHiRegMin\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrHiPTrjDFilMaxLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrHiPTrjDFilMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_Z_TrboMonrThrMFlowDMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_n_TrboMonrNEngMaxLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrAmbPDifMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrCacPDifMinLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiPTrjStabDly\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiRegDly\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_tc_TrboMonrHiTiConPTrjDFil\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_tc_TrboMonrThrMFlowDFil\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrBoostPCfg\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboMonrSCPCfg\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiErr\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoErr\t/* ' + 'Identifier */\n' + ' ' + 'sVcAesTrboM_p_TrboMonrAmbPDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrGetPerm\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrEngClntEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoPTrjStab\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoRegEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoCmprBypActvEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrActvLoEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoRegActv\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoIntkBoostTrjEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoEngSpdEna\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrIntkBoostPTrjAmbDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrSCAmbPDiff\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrPCmprUs\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoRegDly\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrPTrjStabEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoDynEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSCPEna\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrPTrjDFil\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiPTrjStab\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiRegActv\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiRegEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrActvHiEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrCacPTrjDifEna\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrThrFlowDEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrNEngEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrPAmbDiffEna\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiRegDly\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiPTrjStabEna\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_Z_TrboThrMFlowDFild\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrHiPTrjDFil\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM19_111_PressureRt\t/* ' + 'Identifier */\n' + ' SAesTrboM73_143_2T\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM72_142_CoreLoBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM71_141_CoreHiBoost\t/* ' + 'Identifier */\n' + ' SAesTrboM53_Avg2\t/* ' + 'Identifier */\n' + ' SAesTrboM52_Avg1\t/* ' + 'Identifier */\n' + ' SAesTrboM51_131_2T\t/* ' + 'Identifier */\n' + ' SAesTrboM29_123_2T\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM4_2_EngProtnTrboPPeak': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM4_2_EngProtnTrboPPeak\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMonrPPeakBypFiMPerm\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM159_21_PPeakTest\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM51_131_2T': ' /begin FUNCTION\n' + ' SAesTrboM51_131_2T\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPLoAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPHiAvgTi\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM58_LPLoTstVal\t/* ' + 'Identifier */\n' + ' SAesTrboM57_LPHiTstVal\t/* ' + 'Identifier */\n' + ' SAesTrboM56_HPLoTstVal\t/* ' + 'Identifier */\n' + ' SAesTrboM55_HPHiTstVal\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM52_Avg1': ' /begin FUNCTION\n' + ' SAesTrboM52_Avg1\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesTrboM_t_TrboMonrHiAvgTi\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM68_Subsystem\t/* ' + 'Identifier */\n' + ' SAesTrboM67_EnabledSubsystem\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM53_Avg2': ' /begin FUNCTION\n' + ' SAesTrboM53_Avg2\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesTrboM_t_TrboMonrLoAvgTi\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t/* ' + 'Identifier */\n' + ' rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM70_Subsystem\t/* ' + 'Identifier */\n' + ' SAesTrboM69_EnabledSubsystem\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM55_HPHiTstVal': ' /begin FUNCTION\n' + ' SAesTrboM55_HPHiTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM60_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM59_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM56_HPLoTstVal': ' /begin FUNCTION\n' + ' SAesTrboM56_HPLoTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM62_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM61_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM57_LPHiTstVal': ' /begin FUNCTION\n' + ' SAesTrboM57_LPHiTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM64_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM63_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM58_LPLoTstVal': ' /begin FUNCTION\n' + ' SAesTrboM58_LPLoTstVal\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM66_Subsystem\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM65_EnabledSubsystem\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM59_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM59_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM5_3_PPvalveStuckClosed': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM5_3_PPvalveStuckClosed\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM175_31_StuckTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM60_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM60_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM61_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM61_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM62_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM62_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM63_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM63_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM64_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM64_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM65_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM65_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM66_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM66_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLPLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM67_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM67_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM68_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM68_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrHiAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjDif\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM69_EnabledSubsystem': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM69_EnabledSubsystem\t' + '/* Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM6_4_PpLeakage': ' /begin FUNCTION\n' + ' SAesTrboM6_4_PpLeakage\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpLkExhFiMPerm\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_PpLkFiMPerm\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM192_42_LeakExhTest\t/* ' + 'Identifier */\n' + ' SAesTrboM191_41_LeakTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM70_Subsystem': ' /begin FUNCTION\n' + ' SAesTrboM70_Subsystem\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_t_TrboMonrLoAvgTi\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrCacPTrjLimDif\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM71_141_CoreHiBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM71_141_CoreHiBoost\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrSHiBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiErr\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM83_Pr__rtional_Ranking\t' + '/* Identifier */\n' + ' ' + 'SAesTrboM75_1411_Mode06\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM72_142_CoreLoBoost': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM72_142_CoreLoBoost\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrRnkMax\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_Z_TrboMonrSLoBoostRnkVal\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoOk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoErr\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM97_Pr__rtional_Ranking\t' + '/* Identifier */\n' + ' ' + 'SAesTrboM89_1421_Mode06\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM73_143_2T': ' /begin FUNCTION\n' + ' SAesTrboM73_143_2T\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMUseIndHeal\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_TrboMonrSHiErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPLoTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPHiTstVal\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLPLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHPLoTstVal\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_TrboMonrSLoErr\t' + '/* Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrLoTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrHPHiTstValCmplt\t/* ' + 'Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLPHiTstVal\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiErr\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrLoErr\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrLoOk\t' + '/* Identifier */\n' + ' xVcAesTrboM_B_TrboMonrHiOk\t' + '/* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM106_1434_CoreHPLoBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM105_1433_CoreLPLoBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM104_1432_CoreHPHiBoost\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM103_1431_CoreLPHiBoost\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM75_1411_Mode06': ' /begin FUNCTION\n' + ' SAesTrboM75_1411_Mode06\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMonrMode6Enbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM85_Dem_SetDTR\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM7_5_PpSmallLeakage': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM7_5_PpSmallLeakage\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpSmLkBypFiMPerm\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM215_51_PpSmalLeakTest\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM83_Pr__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM83_Pr__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSHiErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM88_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM87_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM85_Dem_SetDTR': ' /begin FUNCTION\n' + ' SAesTrboM85_Dem_SetDTR\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /end FUNCTION', + 'SAesTrboM87_FaultFree': ' /begin FUNCTION\n' + ' SAesTrboM87_FaultFree\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM88_WithFault': ' /begin FUNCTION\n' + ' SAesTrboM88_WithFault\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrLim\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrHiErrRnkMax\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrHiTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM89_1421_Mode06': ' /begin FUNCTION\n' + ' SAesTrboM89_1421_Mode06\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboMonrMode6Enbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION', + 'SAesTrboM8_6_PpRelay': ' /begin FUNCTION\n' + ' SAesTrboM8_6_PpRelay\t/* Name ' + '*/\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_PpRlyStkFiMPerm\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM227_61_RelayStuckTest\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM97_Pr__rtional_Ranking': ' /begin FUNCTION\n' + ' ' + 'SAesTrboM97_Pr__rtional_Ranking\t' + '/* Name */\n' + ' ""\t/* ' + 'LongIdentifier */\n' + ' /begin ' + 'DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrLim\t' + '/* Identifier */\n' + ' ' + 'cVcAesTrboM_p_TrboMonrLoErrRnkMax\t' + '/* Identifier */\n' + ' /end ' + 'DEF_CHARACTERISTIC\n' + ' /begin ' + 'LOC_MEASUREMENT\n' + ' ' + 'xVcAesTrboM_B_TrboMonrSLoErr\t' + '/* Identifier */\n' + ' ' + 'rVcAesTrboM_p_TrboMonrLoTstVal\t' + '/* Identifier */\n' + ' /end ' + 'LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' ' + 'SAesTrboM102_WithFault\t/* ' + 'Identifier */\n' + ' ' + 'SAesTrboM101_FaultFree\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'SAesTrboM9_6_VNTAdp': ' /begin FUNCTION\n' + ' SAesTrboM9_6_VNTAdp\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' ' + 'cVcAesTrboM_B_TrboVntAdpnActDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboVntDpFiMPerm\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_B_TrboVntEngIdleDsbl\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKHI\t/* ' + 'Identifier */\n' + ' ' + 'cVcAesTrboM_D_TrboVntStsNOKLO\t/* ' + 'Identifier */\n' + ' cVcAesTrboM_D_TrboVntStsOK\t' + '/* Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' xVcAesTrboM_B_ObdExe\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrVntExeFlk\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrVntAdpDone\t/* ' + 'Identifier */\n' + ' ' + 'xVcAesTrboM_B_TrboMonrVntExe\t/* ' + 'Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM249_621_CoreVntDp\t' + '/* Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'VcAesTrboM': ' /begin FUNCTION\n' + ' VcAesTrboM\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin DEF_CHARACTERISTIC\n' + ' cVcAesTrboM_B_IsObdExeSpm\t/* ' + 'Identifier */\n' + ' /end DEF_CHARACTERISTIC\n' + ' /begin LOC_MEASUREMENT\n' + ' yVcAesTrboM_B_EngProtnTrboPPeakErr\t' + '/* Identifier */\n' + ' sVcAesTrboM_p_TrboMonrAmbPDif\t/* ' + 'Identifier */\n' + ' xVcAesTrboM_B_ObdExe\t/* Identifier ' + '*/\n' + ' /end LOC_MEASUREMENT\n' + ' /begin OUT_MEASUREMENT\n' + ' yVcAesTrboM_B_TrboMonrSHiErr\t/* ' + 'Identifier */\n' + ' yVcAesTrboM_B_TrboMonrSLoErr\t/* ' + 'Identifier */\n' + ' /end OUT_MEASUREMENT \n' + ' /begin SUB_FUNCTION\n' + ' SAesTrboM3_1_TrboMonr\t/* Identifier ' + '*/\n' + ' SAesTrboM9_6_VNTAdp\t/* Identifier ' + '*/\n' + ' SAesTrboM8_6_PpRelay\t/* Identifier ' + '*/\n' + ' SAesTrboM7_5_PpSmallLeakage\t/* ' + 'Identifier */\n' + ' SAesTrboM6_4_PpLeakage\t/* Identifier ' + '*/\n' + ' SAesTrboM5_3_PPvalveStuckClosed\t/* ' + 'Identifier */\n' + ' SAesTrboM4_2_EngProtnTrboPPeak\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION', + 'test_mrg': ' /begin FUNCTION\n' + ' test_mrg\t/* Name */\n' + ' ""\t/* LongIdentifier */\n' + ' /begin OUT_MEASUREMENT\n' + ' yVcAesSupM_B_SupChrgrErr\t/* Identifier ' + '*/\n' + ' /end OUT_MEASUREMENT \n' + ' /begin SUB_FUNCTION\n' + ' SAesSupM__g56_22_SupChrgrStuck\t/* ' + 'Identifier */\n' + ' SAesSupM__g55_21_SupChrgrPPeak\t/* ' + 'Identifier */\n' + ' SAesSupM__g5_11_SupChrgrSys\t/* ' + 'Identifier */\n' + ' /end SUB_FUNCTION\n' + ' /end FUNCTION'}, + 'MEASUREMENT': {'rVcAesSupM_Z_SupMonrHiBoostRnkVal': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_Z_SupMonrHiBoostRnkVal\t' + '/* Name */\n' + ' "Supercharger ' + 'high boost ranking ' + 'value"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t' + '/* Datatype */\n' + ' Scaling_17\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 255\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_Z_SupMonrHiSCTarDrv': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_Z_SupMonrHiSCTarDrv\t' + '/* Name */\n' + ' "Trajectory ' + 'differential"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_8\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_Z_SupMonrHiSCThrDrv': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_Z_SupMonrHiSCThrDrv\t' + '/* Name */\n' + ' "Trajectory ' + 'differential"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_8\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_Z_SupMonrLoBoostRnkVal': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_Z_SupMonrLoBoostRnkVal\t' + '/* Name */\n' + ' "Supercharger ' + 'low boost ranking ' + 'value"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t' + '/* Datatype */\n' + ' Scaling_17\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 255\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_Z_SupMonrLoSCTarDrv': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_Z_SupMonrLoSCTarDrv\t' + '/* Name */\n' + ' "Trajectory ' + 'differential"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_8\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_Z_SupMonrLoSCThrDrv': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_Z_SupMonrLoSCThrDrv\t' + '/* Name */\n' + ' "Trajectory ' + 'differential"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_8\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' -100000\t/* ' + 'LowerLimit */\n' + ' 100000\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_fac_SupChrgrStuckMaxLoadCmp': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'rVcAesSupM_fac_SupChrgrStuckMaxLoadCmp\t' + '/* Name */\n' + ' ' + '"temperature ' + 'factor for load ' + 'limit ' + 'compensation"\t/* ' + 'LongIdentifier */\n' + ' ' + 'FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' ' + 'Scaling_11\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' ' + 'READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' ' + 'KP_BLOB ' + '0x00000000\n' + ' /end ' + 'IF_DATA\n' + ' /end ' + 'MEASUREMENT', + 'rVcAesSupM_m_SupChrgrStuckMaxLoadLim': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'rVcAesSupM_m_SupChrgrStuckMaxLoadLim\t' + '/* Name */\n' + ' ' + '"Supercharger stuck ' + 'load limit"\t/* ' + 'LongIdentifier */\n' + ' ' + 'FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_10\t' + '/* Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' ' + '-3.4028234663852886e38\t' + '/* LowerLimit */\n' + ' ' + '3.4028234663852886e38\t' + '/* UpperLimit */\n' + ' READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end ' + 'IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_m_SupChrgrStuckMaxLoadLimBase': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'rVcAesSupM_m_SupChrgrStuckMaxLoadLimBase\t' + '/* Name */\n' + ' ' + '"Supercharger ' + 'stuck load ' + 'limit"\t/* ' + 'LongIdentifier ' + '*/\n' + ' ' + 'FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' ' + 'Scaling_10\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 5\t/* ' + 'UpperLimit */\n' + ' ' + 'READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' ' + 'KP_BLOB ' + '0x00000000\n' + ' /end ' + 'IF_DATA\n' + ' /end ' + 'MEASUREMENT', + 'rVcAesSupM_p_SupChgrStuckPDiff': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupChgrStuckPDiff\t' + '/* Name */\n' + ' "Diff pressure ' + 'before/after supercharger ' + 'engagement"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' -300\t/* ' + 'LowerLimit */\n' + ' 300\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupChrgrPDsAtmDiff\t' + '/* Name */\n' + ' "Over pressure ' + 'downstream supercharger"\t' + '/* LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' ' + '-3.4028234663852886e38\t' + '/* LowerLimit */\n' + ' ' + '3.4028234663852886e38\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupChrgrStuckPDiffMax': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupChrgrStuckPDiffMax\t' + '/* Name */\n' + ' "Maximum ' + 'supercharger diff ' + 'pressure during stuck ' + 'test"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t' + '/* Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' -500\t/* ' + 'LowerLimit */\n' + ' 500\t/* ' + 'UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupMonrHiTstVal': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrHiTstVal\t' + '/* Name */\n' + ' "Supercharger high ' + 'boost pressure test value "\t' + '/* LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -300\t/* LowerLimit ' + '*/\n' + ' 300\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupMonrLoTstVal': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrLoTstVal\t' + '/* Name */\n' + ' "Supercharger low ' + 'boost pressure test value "\t' + '/* LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -300\t/* LowerLimit ' + '*/\n' + ' 300\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupMonrPDif': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrPDif\t/* ' + 'Name */\n' + ' "Supercharger actual- ' + 'and target pressure difference"\t' + '/* LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* Conversion ' + '*/\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -300\t/* LowerLimit */\n' + ' 300\t/* UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupMonrSCTar': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrSCTar\t/* ' + 'Name */\n' + ' "Supercharger target ' + 'boost pressure, compensated for ' + 'ambient pressure"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -300\t/* LowerLimit */\n' + ' 300\t/* UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesSupM_p_SupMonrSCTarDly': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesSupM_p_SupMonrSCTarDly\t' + '/* Name */\n' + ' "Low pass filtered ' + 'supercharger target ' + 'pressure"\t/* LongIdentifier ' + '*/\n' + ' FLOAT32_IEEE\t/* ' + 'Datatype */\n' + ' Scaling_4\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 300\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesTrboM_D_TrboVntDpHiTmp': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpHiTmp\t' + '/* Name */\n' + ' "Vnt turbo high ' + 'error counter value "\t/* ' + 'LongIdentifier */\n' + ' SBYTE\t/* Datatype ' + '*/\n' + ' EQ_LSB_1_e\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -128\t/* LowerLimit ' + '*/\n' + ' 127\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesTrboM_D_TrboVntDpLoTmp': ' /begin MEASUREMENT\n' + ' ' + 'rVcAesTrboM_D_TrboVntDpLoTmp\t' + '/* Name */\n' + ' "Vnt turbo high ' + 'error counter value "\t/* ' + 'LongIdentifier */\n' + ' SBYTE\t/* Datatype ' + '*/\n' + ' EQ_LSB_1_e\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -128\t/* LowerLimit ' + '*/\n' + ' 127\t/* UpperLimit ' + '*/\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'rVcAesTrboM_p_EngProtnTrboPPeakPres': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'rVcAesTrboM_p_EngProtnTrboPPeakPres\t' + '/* Name */\n' + ' "Pressure for ' + 'BSTPEAK monitor"\t/* ' + 'LongIdentifier */\n' + ' FLOAT32_IEEE\t' + '/* Datatype */\n' + ' EQ_LSB_1_a\t' + '/* Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' ' + '-3.4028234663852886e38\t' + '/* LowerLimit */\n' + ' ' + '3.4028234663852886e38\t' + '/* UpperLimit */\n' + ' READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupChrgrPPeakErr': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrPPeakErr\t' + '/* Name */\n' + ' "Engine protection ' + 'from high supercharger ' + 'pressure activation flag"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupChrgrStuckEnable': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckEnable\t' + '/* Name */\n' + ' "SC CLutch and ' + 'bypass throttle Enable ' + 'conditions enabled"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupChrgrStuckErr': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckErr\t' + '/* Name */\n' + ' "Engine protection ' + 'from high supercharger ' + 'pressure activation flag"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupChrgrStuckExe': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckExe\t' + '/* Name */\n' + ' "Supercharger stuck ' + 'monitor executes"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupChrgrStuckUnfiltErr': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupChrgrStuckUnfiltErr\t' + '/* Name */\n' + ' "Supercharger ' + 'stuck error, ' + 'unfiltered"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t' + '/* Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiAmbpEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiAmbpEna\t' + '/* Name */\n' + ' "Ambient pressure ' + 'enable condition, ' + 'supercharger high boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiCluOnEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiCluOnEna\t' + '/* Name */\n' + ' "Supercharger ' + 'clutch enable condition, ' + 'supercharger high boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiCmprThrEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiCmprThrEna\t' + '/* Name */\n' + ' "Supercharger ' + 'bypass throttle enable ' + 'condition, supercharger ' + 'high boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiCylRevEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiCylRevEna\t' + '/* Name */\n' + ' "Engine load ' + 'enable condition, ' + 'supercharger high boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiEna\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiEngSpdEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiEngSpdEna\t' + '/* Name */\n' + ' "Engine speed ' + 'enable condition, ' + 'supercharger high boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiErr': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiErr\t/* ' + 'Name */\n' + ' "Supercharger boost ' + 'pressure to high error"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiExe': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiExe\t/* ' + 'Name */\n' + ' "High boost pressure ' + 'monitor entry condition"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiOk': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiOk\t/* ' + 'Name */\n' + ' "Supercharger monitor ' + 'high boost OK"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiSCTarDrvEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiSCTarDrvEna\t' + '/* Name */\n' + ' "Supercharger ' + 'target pressure ' + 'derivative enable ' + 'condition, supercharger ' + 'high boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiSCTempEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiSCTempEna\t' + '/* Name */\n' + ' "Supercharger ' + 'inlet temperature enable ' + 'condition, supercharger ' + 'high boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiStabEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiStabEna\t' + '/* Name */\n' + ' "Delayed trajectory ' + 'pressure stable entry ' + 'condition"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiTarEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiTarEna\t' + '/* Name */\n' + ' "Supercharger target ' + 'pressure enable condition, ' + 'supercharger high boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiThrDrvEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiThrDrvEna\t' + '/* Name */\n' + ' "Supercharger ' + 'bypass throttle ' + 'derivative enable ' + 'condition, supercharger ' + 'high boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrHiTstValCmplt': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrHiTstValCmplt\t' + '/* Name */\n' + ' "Supercharger ' + 'high boost pressure ' + 'monitor test value ' + '(average calculation) ' + 'complete"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoAmbpEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoAmbpEna\t' + '/* Name */\n' + ' "Ambient pressure ' + 'enable condition, ' + 'supercharger low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoCluOnEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCluOnEna\t' + '/* Name */\n' + ' "Supercharger ' + 'clutch enable condition, ' + 'supercharger low boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoCmprThrEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCmprThrEna\t' + '/* Name */\n' + ' "Supercharger ' + 'target pressure ' + 'derivative enable ' + 'condition, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_9\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoCmprThrMaxEna': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCmprThrMaxEna\t' + '/* Name */\n' + ' "Supercharger ' + 'bypass throttle ' + 'enable condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_9\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoCmprThrMinEna': ' /begin ' + 'MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCmprThrMinEna\t' + '/* Name */\n' + ' "Supercharger ' + 'bypass throttle ' + 'enable condition, ' + 'supercharger low ' + 'boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_9\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* ' + 'Accuracy */\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin ' + 'IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoCylRevEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoCylRevEna\t' + '/* Name */\n' + ' "Engine load ' + 'enable condition, ' + 'supercharger low boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoEna\t/* ' + 'Name */\n' + ' ""\t/* LongIdentifier ' + '*/\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoEngSpdEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoEngSpdEna\t' + '/* Name */\n' + ' "Engine speed ' + 'enable condition, ' + 'supercharger low boost"\t' + '/* LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoErr': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoErr\t/* ' + 'Name */\n' + ' "Supercharger boost ' + 'pressure too low error"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoExe': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoExe\t/* ' + 'Name */\n' + ' "Low boost pressure ' + 'monitor entry condition"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoOk': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoOk\t/* ' + 'Name */\n' + ' "Supercharger monitor ' + 'low boost OK"\t/* LongIdentifier ' + '*/\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoSCTarDrvEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoSCTarDrvEna\t' + '/* Name */\n' + ' "Supercharger ' + 'target pressure ' + 'derivative enable ' + 'condition, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoSCTempEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoSCTempEna\t' + '/* Name */\n' + ' "Supercharger ' + 'inlet temperature enable ' + 'condition, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoStabEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoStabEna\t' + '/* Name */\n' + ' "Delayed trajectory ' + 'pressure stable entry ' + 'condition"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoTarEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTarEna\t' + '/* Name */\n' + ' "Supercharger target ' + 'pressure derivative enable ' + 'condition, supercharger low ' + 'boost"\t/* LongIdentifier ' + '*/\n' + ' UBYTE\t/* Datatype ' + '*/\n' + ' Scaling_9\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoTarMaxEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTarMaxEna\t' + '/* Name */\n' + ' "Supercharger ' + 'target pressure enable ' + 'condition, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_9\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoTarMinEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTarMinEna\t' + '/* Name */\n' + ' "Supercharger ' + 'target pressure enable ' + 'condition, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_9\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoThrDrvEna': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoThrDrvEna\t' + '/* Name */\n' + ' "Supercharger ' + 'bypass throttle ' + 'derivative enable ' + 'condition, supercharger ' + 'low boost"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution ' + '*/\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* LowerLimit ' + '*/\n' + ' 1\t/* UpperLimit ' + '*/\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'xVcAesSupM_B_SupMonrLoTstValCmplt': ' /begin MEASUREMENT\n' + ' ' + 'xVcAesSupM_B_SupMonrLoTstValCmplt\t' + '/* Name */\n' + ' "Supercharger ' + 'low boost pressure ' + 'monitor test value ' + '(average calculation) ' + 'complete"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* ' + 'Datatype */\n' + ' Scaling_16\t/* ' + 'Conversion */\n' + ' 1\t/* ' + 'Resolution */\n' + ' 0\t/* Accuracy ' + '*/\n' + ' 0\t/* ' + 'LowerLimit */\n' + ' 1\t/* ' + 'UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB ' + '0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT', + 'yVcAesSupM_B_SupChrgrErr': ' /begin MEASUREMENT\n' + ' ' + 'yVcAesSupM_B_SupChrgrErr\t/* ' + 'Name */\n' + ' "Supercharger Peak ' + 'Pressure engine protection ' + 'activation flag"\t/* ' + 'LongIdentifier */\n' + ' UBYTE\t/* Datatype */\n' + ' Scaling_12\t/* ' + 'Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' 0\t/* LowerLimit */\n' + ' 1\t/* UpperLimit */\n' + ' BIT_MASK 0x1\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT'}, + 'RECORD_LAYOUT': {'FLOAT32_IEEE_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' ' + 'FLOAT32_IEEE_COL_DIRECT\t/* ' + 'Name */\n' + ' FNC_VALUES 1 ' + 'FLOAT32_IEEE COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT', + 'FLOAT32_IEEE_X_INCR_DIRECT': ' /begin RECORD_LAYOUT\n' + ' ' + 'FLOAT32_IEEE_X_INCR_DIRECT\t' + '/* Name */\n' + ' AXIS_PTS_X 1 ' + 'FLOAT32_IEEE INDEX_INCR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'SBYTE_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' SBYTE_COL_DIRECT\t/* Name */\n' + ' FNC_VALUES 1 SBYTE COLUMN_DIR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'SWORD_X_INCR_DIRECT': ' /begin RECORD_LAYOUT\n' + ' SWORD_X_INCR_DIRECT\t/* ' + 'Name */\n' + ' AXIS_PTS_X 1 SWORD ' + 'INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT', + 'UBYTE_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' UBYTE_COL_DIRECT\t/* Name */\n' + ' FNC_VALUES 1 UBYTE COLUMN_DIR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'UWORD_COL_DIRECT': ' /begin RECORD_LAYOUT\n' + ' UWORD_COL_DIRECT\t/* Name */\n' + ' FNC_VALUES 1 UWORD COLUMN_DIR ' + 'DIRECT\n' + ' /end RECORD_LAYOUT', + 'UWORD_X_INCR_DIRECT': ' /begin RECORD_LAYOUT\n' + ' UWORD_X_INCR_DIRECT\t/* ' + 'Name */\n' + ' AXIS_PTS_X 1 UWORD ' + 'INDEX_INCR DIRECT\n' + ' /end RECORD_LAYOUT'} +} diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Input.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Input.csv new file mode 100644 index 0000000..c0abbab --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Input.csv @@ -0,0 +1,11 @@ +;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;;;;;;;;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CAN Interface - Input signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENII;VEP4_GENII_7DCT;VEP4_GENIII;VEP4_GENII_HYBRID;VEP4_GENII_PS14;Hybrid Unique;GEP3_HEP7;GEP3_HRE;GEP3_PFI_HEV;GEP3_SPA;GEP3_BEV;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;VcPpmEem;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmHvem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;Diag_Monitor;ScrLvl;CEC;PpmMvem;;EUCD027;C1MCA017;SPA1500 SPA1510 ;SPA1600 SPA1610 ;SPA1700 SPA1710 ;SPA1800 SPA1810 ;SPA1900 SPA1910 ;SPA2000 SPA2010 ;SPA2210;SPA2310 SPA2410;SPA2510;SPA2710;SPA2810;NDdT [ms];"Locked +Supplier field:Denso VEP4 GENIII for X2";"Locked +Supplier field:Denso VED4 GENIII for X2";Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;Locked Supplier field:Denso VED4 SPAStatus: SOP G400;Locked Supplier field:Denso VED4 SPAStatus: MP1 14G200;Locked Supplier field:Denso VEP4 SPAStatus: 516H 16H100;Locked Supplier field:Denso VEP4 SPAStatus: SOP K400;"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";Locked Supplier field:Denso VED VEA 516A, 54X Status: 16B100;Locked Supplier field:Denso VEP VEA 516A, 54X Status: 16A100;Vsim Name SPA;Vsim Name minSPA;Vsim Name Chassi;Vsim Name OPTSAS;RBPetroldT [ms];Supplier field: GEP3_SPA, D000 SW;Comment +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +sVcAc_D_EngRunReqClim;;UInt8;0;3;-;Engine running request (inhibit stop) from climate;0;;-;D;-;-;-;-;-;-;-;-;-;-;-;;o;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;;EngRun_D_ReqClimt;EngRun_D_ReqClimt;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;10;;Scn_IFM_TrsmActrPosn;Scn_EngRunReqClimt;Scn_EngRunReqClimt;-;-;-;-;-;-;-;-;-;*0;*0;-;-;10;-; +sVcAcc_a_Max;;Float32;-5;5;m/s2;Max acceleration request from ACC;0;;-;S;-;-;-;-;-;-;-;-;-;-;-;;o;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;;ACCMaxAccelerationReq;ACCMaxAccelerationReq;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;NO CONNECTION;40;;Scn_IFM_VehSpdLgtSafe;Scn_ACC_MaxAccReq_Raw;Scn_ACC_MaxAccReq_Raw;-;-;-;-;-;-;-;-;-;-;-;ACCMaxAccelerationReq;*-5;40;-; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Output.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Output.csv new file mode 100644 index 0000000..f8197da --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/CAN-Output.csv @@ -0,0 +1,10 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;;;;;;;;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;INTERFACE DATA;INTERFACE DATA;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +CAN Interface - Output signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENII;VEP4_GENII_7DCT;VEP4_GENIII;VEP4_GENII_HYBRID;VEP4_GENII_PS14;Hybrid Unique;GEP3_HEP7;GEP3_HRE;GEP3_PFI_HEV;GEP3_SPA;GEP3_BEV;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmHvem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;Diag_Monitor;CEC;SCR;SCR;PpmMvem;EUCD027;EUCD028;EUCD029;EUCD030;C1MCA017;SPA1500 SPA1510 ;SPA1600 SPA1610 ;SPA1700 SPA1710 ;SPA1800 SPA1810 ;SPA1900 SPA1910 ;SPA2000 SPA2010 ;SPA2210;SPA2310 SPA2410;SPA2510;SPA2710;SPA2810;NDdT [ms];"Locked +Supplier field:Denso VEP4 GENIII for X2";"Locked +Supplier field:Denso VED4 GENIII for X2--";Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;Locked Supplier field:Denso VED4 SPAStatus: SOP G400;Locked Supplier field:Denso VED4 SPAStatus: MP1 14G200;Locked Supplier field:Denso VEP4 SPAStatus: 516H 16H100;Locked Supplier field:Denso VEP4 SPAStatus: SOP K400;"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";Locked Supplier field:Denso VED VEA 516A, 54X Status: 16B100;Locked Supplier field:Denso VEP VEA 516A, 54X Status: 16A100;Vsim Name SPA;Vsim Name minSPA;Vsim Name OPTSAS;RBPetroldT [ms];Supplier field: GEP3_SPA, D000 SW;Comment +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +sVcAc_D_AirCondCmpsrStats;;UInt8;0;7;-;Aircond compressor status;0;;D;D;D;D;D;D;D;-;D;D;D;D;D;;-;o;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;ACCompressorStatusEVDC;ACCompressorStatusEVDC;ACCompressorStatusEVDC;ACCompressorStatusEVDC;ACCompressorStatusEVDC;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;CmptmtCoolgSts;10;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;Scv_ACComStat;CmptmtCoolgSts;CmptmtCoolgSts;-;10;Com_Tx_CmptmtCoolgSts;SPA: to be connected in SPA diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Input.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Input.csv new file mode 100644 index 0000000..3543dfb --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Input.csv @@ -0,0 +1,11 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;;;;;;;;;;; SPM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;; +EMS Interface - Input signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENII;VEP4_GENII_7DCT;VEP4_GENIII;VEP4_GENII_HYBRID;VEP4_GENII_PS14;Hybrid Unique;GEP3_HEP7;GEP3_HRE;GEP3_PFI_HEV;GEP3_SPA;GEP3_BEV;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmHvem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;Diag_Monitor;CEC;Emiss;SCR;;NDdT [ms];Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;VEA GENIII VCC request (Denso name or CRE number) for X2;Locked Supplier field:Denso VEP4 GENIII for X2;"Locked +Supplier field:Denso VED4 GENIII for X2--";"VEA GENII 17wXX +VCC request +(Denso name or CRE number) +for VP update";"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";VEA SPA VCC request (Denso name or CRE number) 16H100;Locked Supplier field:Denso VED4 SPAStatus: SOP G400;Locked Supplier field:Denso VED4 SPAStatus: MP1 G200;Locked Supplier field:Denso VEP4 SPAStatus: 516H 16H100;Locked Supplier field:Denso VEP4 SPAStatus: SOP K400;VEA 516A, 54x VCC request (Denso name or CRE number) 16A100;Supplier field:Denso VED VEA 516A, 54x Status: 16D100;Supplier field:Denso VEPVEA 516A, 54x Status: 16A100;Vsim Name SPA;Vsim Name minSPA;Vsim Name Chassi;Vsim Name OPTSAS;Comment;RBPetroldT [ms];GEP3_SPA VCC request (Bosch name or CRE number);Supplier field: GEP3_SPA, D000 SW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Output.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Output.csv new file mode 100644 index 0000000..375c84f --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/EMS-Output.csv @@ -0,0 +1,11 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;;;;;;;;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;EMS Interface - Output signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENII;VEP4_GENII_7DCT;VEP4_GENIII;VEP4_GENII_HYBRID;VEP4_GENII_PS14;Hybrid Unique;GEP3_HEP7;GEP3_HRE;GEP3_PFI_HEV;GEP3_SPA;GEP3_BEV;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmHvem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;TmStrt;Tm;TcDir;Diag_Monitor;CEC;Emiss;;NDdT [ms];VEA 13wXX VCC request (Denso name or CRE number) for TT;Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;VEA GENIII VCC request (Denso name or CRE number) for X2;"Locked +Supplier field:Denso VED4 GENIII for X2";Locked Supplier field:Denso VEP4 GENIII for X2;"VEA GENII 17wXX +VCC request +(Denso name or CRE number) +for VP update";"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";VEA SPA VCC request (Denso name or CRE number) 16H100;Locked Supplier field:Denso VED4 SPAStatus: SOP G400;Locked Supplier field:Denso VED4 SPAStatus: MP1 G200;Locked Supplier field:Denso VEP4 SPAStatus: 516H 16H100;Locked Supplier field:Denso VEP4 SPAStatus: SOP K400;VEA 516A. 54x VCC request (Denso name or CRE number) 16A100, 16B100;Locked Supplier field:Denso VED VEA 516A, 54X Status: 16D100;Locked Supplier field:Denso VEP VEA 516A, 54X Status: 16A100;Vsim Name SPA;Vsim Name minSPA;Vsim Name Chassi;Vsim Name OPTSAS;Comment;RBPetroldT [ms];GEP3_SPA VCC request (Bosch name or CRE number);Supplier field: GEP3_SPA, D000 SW;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Input.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Input.csv new file mode 100644 index 0000000..95a0ed6 --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Input.csv @@ -0,0 +1,9 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SPA2110;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;;;;;;;;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +LIN Interface - Input signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENII;VEP4_GENII_7DCT;VEP4_GENIII;VEP4_GENII_HYBRID;VEP4_GENII_PS14;Hybrid Unique;GEP3_HEP7;GEP3_HRE;GEP3_PFI_HEV;GEP3_SPA;GEP3_BEV;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;LINDi;NVM;PpmHvem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;CEC;Diag_Monitor;;EUCD027;C1MCA017;SPA001(E1.1);SPA001(E1.3);SPA0220(E2u2);SPA0220(515A E1u1);SPA0300(E3) SPA0310;SPA0310(515A M1);SPA0320(E3 update1) SPA 0330;SPA0400(E4 VP & E4 VP upd) SPA0410;SPA0500 SPA0510;SPA0600 SPA0610;SPA0700 SPA0710;SPA0800 SPA0810;SPA0800 SPA0810 Prototype Build;SPA1010;SPA1110 SPA1110 + Hack ;SPA1200 SPA1210 ;SPA1500 SPA1510 ;SPA1600 SPA1610 ;SPA1700 SPA1710 ;SPA1800 SPA1810 ;SPA1900 SPA1910 ;SPA2000 SPA2010 ;SPA2210;SPA2310 SPA2410;SPA2510;SPA2710;SPA2810;NDdT [ms];VEA GENIII VCC request (Denso name or CRE number) for X2 ;"Locked +Supplier field:Denso VED4 GENIII for X2";"Locked +Supplier field:Denso VEP4 GENIII for X0";Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;Locked Supplier field:Denso VED4 SPAStatus: SOP G400;Locked Supplier field:Denso VED4 SPAStatus: MP1 14G200;Locked Supplier field:Denso VEP4 SPAStatus: 516H 16H100;Locked Supplier field:Denso VEP4 SPAStatus: SOP K400;"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";Locked Supplier field:Denso VED VEA 516A, 54X Status: 16B100;Locked Supplier field:Denso VEP VEA 516A, 54X Status: 16A100;Vsim Name Hev;Vsim Name Chassi;Vsim Name OPTSAS;RBPetroldT [ms];Supplier field: GEP3_SPA, D000 SW;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Output.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Output.csv new file mode 100644 index 0000000..7c9c72e --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/LIN-Output.csv @@ -0,0 +1,9 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;;;;;;;;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +LIN Interface - Output signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENII;VEP4_GENII_7DCT;VEP4_GENIII;VEP4_GENII_HYBRID;VEP4_GENII_PS14;Hybrid Unique;GEP3_HEP7;GEP3_HRE;GEP3_PFI_HEV;GEP3_SPA;GEP3_BEV;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmHvem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;Diag_Monitor;CEC;;EUCD027;C1MCA017;SPA001(E1.1);SPA001(E1.3);SPA0220(E2u2);SPA0220(515A E1u1);SPA0300(E3) SPA0310;SPA0310(515A M1);SPA0320(E3 update1) SPA 0330;SPA0400(E4 VP & E4 VP upd) SPA0410;SPA0500 SPA0510;SPA0600 SPA0610;SPA0700 SPA0710;SPA0800 SPA0810;SPA0800 SPA0810 Prototype Build;SPA1010;SPA1110 SPA1110 + Hack ;SPA1200 SPA1210 ;SPA1500 SPA1510 ;SPA1600 SPA1610 ;SPA1700 SPA1710 ;SPA1800 SPA1810 ;SPA1900 SPA1910 ;SPA2000 SPA2010 ;SPA2210;SPA2310 SPA2410;SPA2510;SPA2710;SPA2810;NDdT [ms];"Locked +Supplier field:Denso VEP4 GENIII for X2";"Locked +Supplier field:Denso VED4 GENIII for X2";Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;Locked Supplier field:Denso VED4 SPAStatus: SOP G400;Locked Supplier field:Denso VED4 SPAStatus: MP1 14G200;Locked Supplier field:Denso VEP4 SPAStatus: 516H 16H100;Locked Supplier field:Denso VEP4 SPAStatus: SOP K400;"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";Locked Supplier field:Denso VED VEA 516A, 54X Status: 16B100;Locked Supplier field:Denso VEP VEA 516A, 54X Status: 16A100;Vsim Name Hev;Vsim Name Chassi;Vsim Name OPTSAS;RBPetroldT [ms];Supplier field: GEP3_SPA, D000 SW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/Legend.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/Legend.csv new file mode 100644 index 0000000..743bd05 --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/Legend.csv @@ -0,0 +1,14 @@ +;;;; +PROJECTS;;;; +;;;; +D;Should be an active input signal for that project and it exists debug signals accordingly.;;; +x;Should be an active input signal for that project, but it will be without debug signals.;;; +-;No signal implementation for this project.;;; +;;;; +;;;; +;;;; +SPM;;;; +;;;; +o;Signal owner;;; +x;Signal user;;; +-;Not using this signal;;; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Input.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Input.csv new file mode 100644 index 0000000..4ef9283 --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Input.csv @@ -0,0 +1,5 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;; +CAN Interface - Input signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENIII;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmEem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;Diag_Monitor;;EUCD027;C1MCA017;SPA1500 SPA1510 ;SPA1600 SPA1610 ;SPA1700 SPA1710 ;SPA1800 SPA1810 ;SPA1900 SPA1910 ;SPA2000 SPA2010 ;SPA2210;SPA2310 SPA2410;SPA2510;SPA2710;SPA2810;NDdT [ms];VEA GENIII VCC request (Denso name or CRE number) for X2;Locked Supplier field:Denso VEP4 GENIII for X2;Locked Supplier field:Denso VED4 GENIII for X2;Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VED4 GENII 17w20Status: E2/SM;Locked Supplier field:Denso VEP4 13w35Status: PP;RBPetroldT [ms];Supplier field: GEP3_SPA, D000 SW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +sVcTc_p_LockUp;;Float32;0;16383;gf/cm2;AW Pressure request to LU;0;;-;x;-;;o;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;;TrnLockUpPres_D_Actl;TrnLockUpPres_D_Actl;;;;;;;;;;;;10;;;;Scn_LockUpPres;Scn_LockUpPres;Scn_LockUpPres;10; diff --git a/tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Output.csv b/tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Output.csv new file mode 100644 index 0000000..9fd95ce --- /dev/null +++ b/tests/pybuild/cnfg_files/ActiveInterfaces/Private CAN-Output.csv @@ -0,0 +1,9 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Variable Type;;MODEL DATA;;;;;;;PROJECTS;;;;SPM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTERFACE DATA;;;;;;;;;;;;;;;;;;;;;;;;;;; +CAN Interface - Input signals;;Type;Min;Max;Unit;Description;Initial;;VED4_GENII;VED4_GENIII;VEP4_GENIII;;PVC;AC;AES;EL AC;MEC;OIL(Level);Oil(Quality);Oil;OilPrMon;VcMecPc;VcMecPcMon;REG;ScDep;CMB;DCL (Dia);PEM;NVM;PpmEem;PpmImob;PpmPsm;PpmSt;PpmRc;FSD;TmAwp;TmAf;TmHcc;TmEfl;Tm;TmStrt;TcDir;Diag_Monitor;CEC;;EUCD025;EUCD027;C1MCA015;C1MCA016;C1MCA017;SPA1010;SPA1200 SPA1210 ;SPA1500 SPA1510 ;SPA1600 SPA1610 ;SPA1700 SPA1710 ;SPA1800 SPA1810 ;SPA1900 SPA1910 ;SPA2000 SPA2010 ;SPA2210;SPA2310 SPA2410;SPA2510;SPA2710;SPA2810;NDdT [ms];"Locked +Supplier field:Denso VEP4 GENIII for X2";"Locked +Supplier field:Denso VED4 GENIII for X2";Locked Supplier field:Denso VED4 13w46Status: PP;Locked Supplier field:Denso VEP4 13w35Status: PP;"Locked +Supplier field:Denso VED4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII Status: 17E100";"Locked +Supplier field:Denso VEP4_GENII_HYBRID Status: 17E100";RBPetroldT [ms];Supplier field: GEP3_SPA, D000 SW +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tests/pybuild/cnfg_files/BaseConfig.json b/tests/pybuild/cnfg_files/BaseConfig.json new file mode 100644 index 0000000..0ddabeb --- /dev/null +++ b/tests/pybuild/cnfg_files/BaseConfig.json @@ -0,0 +1,27 @@ +{ + "BaseConfigFileVersion": "0.0.1", + "ProjectInfo" : { + "deviceDomains": "./conf.local/DeviceDomains.json", + "didDefFile": "DIDIds_FullRange", + "didCarCom": "../output/CarCom_DIDDefs.csv", + "srcCodeDstDir": "../output/SourceCode", + "reportDstDir": "../output/Reports", + "logDstDir": "../output/logs", + "configDir": "", + "interfaceCfgDir": "./ActiveInterfaces", + "commonSrcDir": "./Models/Common", + "prjUnitSrcDir": "./Models/*/Release/Vc*/pybuild_src", + "prjUnitCfgDir": "./Models/*/Release/Vc*/pybuild_cfg", + "prjUnitMdlDir": "./Models/*/Release/Vc*", + "prjLocalDefs": "*_LocalDefs.h", + "prjCodeswitches": "SPM_Codeswitch_Setup*.csv", + "coreDummyFileName" : "VcCoreDummy", + "featureHeaderName": "VcCodeSwDefines.h", + "tsHeaderName": "VcUnitTsDefines.h", + "useGlobalConst" : "VcConst" + }, + "NvmConfig": { + "fileName" : "vcc_nvm_struct", + "baseNvmStructs" : "nvm_structs_ref_empty.json" + } +} diff --git a/tests/pybuild/cnfg_files/CoreIdNameDefinition_EventIDs.csv b/tests/pybuild/cnfg_files/CoreIdNameDefinition_EventIDs.csv new file mode 100644 index 0000000..66e161d --- /dev/null +++ b/tests/pybuild/cnfg_files/CoreIdNameDefinition_EventIDs.csv @@ -0,0 +1,5 @@ +;;;;;PROJECTS;; +Model name;Event Id Name;Description;Controlling FiD;Comments;CFG1;CFG2;Old Id +VcAesObd;VcEvAmbPCompPlausMon;Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off);VcFiAmbPCompPlausMon;;x;x;ATPR +VcAesObd;VcEvCacPCompPlausMon;Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off);VcFiCacPCompPlausMon;;x;;CACPR +VcAesObd;VcEvExhMnfldPCompPlausMon;Event Id for Exhaust Manifold Rationality Monitor (comparison to other sensor at eng off);VcFiExhMnfldPCompPlausMon;;;x;EXHMPDR \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/CoreIdNameDefinition_FunctionIDs.csv b/tests/pybuild/cnfg_files/CoreIdNameDefinition_FunctionIDs.csv new file mode 100644 index 0000000..6d3d069 --- /dev/null +++ b/tests/pybuild/cnfg_files/CoreIdNameDefinition_FunctionIDs.csv @@ -0,0 +1,5 @@ +;;;;PROJECTS;; +Model name;Function Id Name;Description;Comments;CFG1;CFG2;Old Id +VcAesObd;VcFiAmbPCompPlausMon;VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off);;x;x;ATPR +VcAesObd;VcFiCacPCompPlausMon;VcFi for CAC Pressure Rationality Monitor (comparison to other sensor at eng off);;x;;CACPR +VcAesObd;VcFiExhMnfldPCompPlausMon;VcFi for Exhaust Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);;;x;EXHMPDR \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/CoreIdNameDefinition_IUMPR.csv b/tests/pybuild/cnfg_files/CoreIdNameDefinition_IUMPR.csv new file mode 100644 index 0000000..4c93153 --- /dev/null +++ b/tests/pybuild/cnfg_files/CoreIdNameDefinition_IUMPR.csv @@ -0,0 +1,5 @@ +;;;;;PROJECTS;; +Model name;IUMPR Id Name;Description;Controlling FiD;Comments;CFG1;CFG2;Old Id +VcAesTrboM;Vc09BoostHiPlausMon;Ratio Id for Boost Pressure High Rationality Monitor;VcFiBoostPPlausMon;;x;x;BSTR_HI +VcAesTrboM;Vc09BoostLoPlausMon;Ratio Id for Boost Pressure Low Rationality Monitor;VcFiBoostPPlausMon;;x;;BSTR_LO +VcAesTrboMg3;Vc09Boost1HiPlausMon;Ratio Id for Boost Pressure 1 High Rationality Monitor;VcFiBoostPPlausMon;;;x; \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/CoreIdNameDefinition_Mode$06.csv b/tests/pybuild/cnfg_files/CoreIdNameDefinition_Mode$06.csv new file mode 100644 index 0000000..0fd2b8a --- /dev/null +++ b/tests/pybuild/cnfg_files/CoreIdNameDefinition_Mode$06.csv @@ -0,0 +1,5 @@ +;;;;;;PROJECTS;; +Model name;Mode $06 Name;Description;Fid;Unit and Scaling ID;Comments;CFG1;CFG2;Old Id +VcAesTrboM;Vc06BoostHiPlausMon;Test Result Id for high boost pressure Monitoring;VcFiBoostPPlausMon;17;;x;x;BSTR_HI +VcAesTrboM;Vc06BoostLoPlausMon;Test Result Id for low boost pressure Monitoring;VcFiBoostPPlausMon;18;;x;;BSTR_LO +VcAesTrboMg3;Vc06Boost1HiPlausMon;Test Result Id for high boost pressure 1 Monitoring;VcFiBoostPPlausMon;1A;;;x; \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/CoreIdNameDefinition_Ranking.csv b/tests/pybuild/cnfg_files/CoreIdNameDefinition_Ranking.csv new file mode 100644 index 0000000..b79d588 --- /dev/null +++ b/tests/pybuild/cnfg_files/CoreIdNameDefinition_Ranking.csv @@ -0,0 +1,5 @@ +;;;;;PROJECTS;; +Model name;Event Name;Description;Fid;Comments;CFG1;CFG2;Old Id +VcAesObd;VcRvAmbPCompPlausMon;Ranking Id for Ambient Pressure Rationality Monitor;VcFiAmbPCompPlausMon;;x;x;ATPR +VcAesObd;VcRvCacPAmbPPlausMon;Ranking Id for CAC pressure vs Ambient pressure test;VcFiCacPAmbPPlausMon;;x;;CACPAMBP +VcAesObd;VcRvCacPIntkPPlausMon;Ranking Id for Exhaust Manifold Pressure Rationality Monitor (sensor vs model);VcFiCacPIntkPPlausMon;;;x;CACPINTK \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/DIDIds_FullRange_Float32.csv b/tests/pybuild/cnfg_files/DIDIds_FullRange_Float32.csv new file mode 100644 index 0000000..1354988 --- /dev/null +++ b/tests/pybuild/cnfg_files/DIDIds_FullRange_Float32.csv @@ -0,0 +1,5 @@ +Range Min;Range Max +0xE300;0xE5FF +DID_NAME;DID ID +rVcDepTre_Tq_WhlMotSysTqEstForDID;0xE300 +rVcNoxSensMgr_Z_UsCorO2P;0xE301 \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/DIDIds_FullRange_UInt32.csv b/tests/pybuild/cnfg_files/DIDIds_FullRange_UInt32.csv new file mode 100644 index 0000000..677e49d --- /dev/null +++ b/tests/pybuild/cnfg_files/DIDIds_FullRange_UInt32.csv @@ -0,0 +1,5 @@ +Range Min;Range Max +0xE400;0xE4FF +DID_NAME;DID ID +rVcDepTre_D_CompositeDID1;0xE400 +did2;0xE401 \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/LabelsplitCfg.json b/tests/pybuild/cnfg_files/LabelsplitCfg.json new file mode 100644 index 0000000..6e2979c --- /dev/null +++ b/tests/pybuild/cnfg_files/LabelsplitCfg.json @@ -0,0 +1,15 @@ +{ + "ConfigFileVersion": "0.0.1", + "BaseConfig": "./BaseConfig.json", + "ProjectInfo": { + "projConfig": "GEP3_BEV", + "a2LFileName": "VEA_VED4_SPA.a2l", + "baseNvmStructs": "nvm_structs_ref_empty.json", + "ecuSupplier": "Denso", + "ecuType": "G2", + "unitCfgDeliveryDir": "../reference_files/UnitCfgs", + "prjUnitCfgDir": "./cnfg_files/unit_cfgs/", + "srcCodeDstDir": "../reference_files" + }, + "UnitCfgs": "./rasters.json" +} diff --git a/tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_core_ids.json b/tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_core_ids.json new file mode 100644 index 0000000..d3a15f1 --- /dev/null +++ b/tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_core_ids.json @@ -0,0 +1,278 @@ +{ + "VcPvcIn": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScBCoord": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScABrkPed": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScAAccPed": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScBAccPed": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScAVehMtn": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScACluPed__denso": { + "Events": { + "VcEvClPedSwMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcEvClPedPosMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcEvClPedPosPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcEvClPedSwPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "IUMPR": {}, + "FIDs": {}, + "Ranking": { + "VcRvClPedSwMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcRvClPedPosMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcRvClPedPosPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcRvClPedSwPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "TstId": {} + }, + "VcScBDrvr": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScANeuMT__denso": { + "Events": { + "VcEvGNS1PlausMon": { + "API_blk": [{ + "path": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "IUMPR": {}, + "FIDs": {}, + "Ranking": { + "VcRvGNS1PlausMon": { + "API_blk": [{ + "path": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "TstId": {} + }, + "VcScATqExt__denso": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "VcScATrsm__denso": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + } +} diff --git a/tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_dids.json b/tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_dids.json new file mode 100644 index 0000000..ef8a694 --- /dev/null +++ b/tests/pybuild/cnfg_files/Mock-gen_allsysteminfo-_get_dids.json @@ -0,0 +1,13 @@ +{ + "VcPvcIn": [], + "VcScBCoord": [], + "VcScABrkPed": [], + "VcScAAccPed": [], + "VcScBAccPed": [], + "VcScAVehMtn": [], + "VcScACluPed__denso": [], + "VcScBDrvr": [], + "VcScANeuMT__denso": [], + "VcScATqExt__denso": [], + "VcScATrsm__denso": [] +} diff --git a/tests/pybuild/cnfg_files/Mock-unit_configs-get_per_unit_cfg.json b/tests/pybuild/cnfg_files/Mock-unit_configs-get_per_unit_cfg.json new file mode 100644 index 0000000..dfa5a87 --- /dev/null +++ b/tests/pybuild/cnfg_files/Mock-unit_configs-get_per_unit_cfg.json @@ -0,0 +1,13208 @@ +{ + "VcPvcIn": { + "version": {}, + "integrity_level": "QM", + "outports": { + "sVcBec_X_HvBattEgyCdn": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable6", + "name": "sVcBec_X_HvBattEgyCdn", + "configs": ["all"], + "description": "HV Battery State-of-Health, i.e. ratio of current maximum energy capacity versus that at beginning of life.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_I_HvBattIDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable8", + "name": "sVcBec_I_HvBattIDc", + "configs": ["all"], + "description": "HV Battery current. Positive current is discharging the battery.", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": -410, + "max": 409.1, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_Pw_HvBattPwrLimChrg": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable10", + "name": "sVcBec_Pw_HvBattPwrLimChrg", + "configs": ["all"], + "description": "Amount of power that the HV Battery can receive (i.e. max charge power limit).", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 128, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_Pw_HvBattPwrLimDcha": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable11", + "name": "sVcBec_Pw_HvBattPwrLimDcha", + "configs": ["all"], + "description": "Amount of power that the HV Battery can provide (i.e. max discharge power limit).", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 128, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_D_BattCntct": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable12", + "name": "sVcBec_D_BattCntct", + "configs": ["all"], + "description": "This signal shall reflect the actual = measured state of the battery contactor.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_X_HvBattSoc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable13", + "name": "sVcBec_X_HvBattSoc", + "configs": ["all"], + "description": "Actual state of charge for the HV Battery.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_X_HvBattSocLimHi": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable14", + "name": "sVcBec_X_HvBattSocLimHi", + "configs": ["all"], + "description": "Upper/high battery SOC soft limit: up to this poInt nominal power available, linear charge power limit decrease between this limit and max limit", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_X_HvBattSocLimLo": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable15", + "name": "sVcBec_X_HvBattSocLimLo", + "configs": ["all"], + "description": "Lower battery SOC soft limit: under this poInt nominal power available, linear discharge power limit decrease between this limit and min limit", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_X_HvBattSocLimMax": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable16", + "name": "sVcBec_X_HvBattSocLimMax", + "configs": ["all"], + "description": "Maximum allowable state of charge of the Traction (HV) Battery. Used for protection of Traction Battery System.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_X_HvBattSocLimMin": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable17", + "name": "sVcBec_X_HvBattSocLimMin", + "configs": ["all"], + "description": "Minimum allowable state of charge of the high voltage battery. Used for protection of Traction Battery System.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_Te_BattHv": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable18", + "name": "sVcBec_Te_BattHv", + "configs": ["all"], + "description": "Battery temp high voltage", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -200, + "max": 200, + "class": "CVC_DISP", + "width": 1 + }, + "sVcBec_U_HvBattUDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable19", + "name": "sVcBec_U_HvBattUDc", + "configs": ["all"], + "description": "HV battery voltage", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 512, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_I_IsgIDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable23", + "name": "sVcCidd_I_IsgIDc", + "configs": ["all"], + "description": "DC current flowing Into ISG motor inverter. Positive current means current flowing Into inverter.", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": -410, + "max": 410, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_D_IsgModSts": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable26", + "name": "sVcCidd_D_IsgModSts", + "configs": ["all"], + "description": "Actual mode for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_n_IsgSpdAct": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable28", + "name": "sVcCidd_n_IsgSpdAct", + "configs": ["all"], + "description": "Actual ISG Speed referred to Crankshaft", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 8191, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_Tq_IsgTqEst": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable29", + "name": "sVcCidd_Tq_IsgTqEst", + "configs": ["all"], + "description": "Estimated ISG motor torque on the crankshaft. The torque is positive in the forward rotation direction.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -8188, + "max": 8192, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_Tq_IsgTqAvlMax": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable30", + "name": "sVcCidd_Tq_IsgTqAvlMax", + "configs": ["all"], + "description": "Available torque from CISG referred to crankshaft. Positive is motoring/accelerating torque.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -8188, + "max": 8192, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_Tq_IsgTqAvlMin": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable31", + "name": "sVcCidd_Tq_IsgTqAvlMin", + "configs": ["all"], + "description": "Available torque from CISG referred to crankshaft. Minimum is generating/braking torque.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -8188, + "max": 8192, + "class": "CVC_DISP", + "width": 1 + }, + "sVcCidd_U_IsgUDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/11_48VInterface/VcDtcTc_B_InstFcEnable32", + "name": "sVcCidd_U_IsgUDc", + "configs": ["all"], + "description": "DC voltage at ISG motor inverter", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 512, + "class": "CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcMvbm_X_MvBattEgyCdn": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_7", + "name": "sVcMvbm_X_MvBattEgyCdn", + "configs": [["all"]], + "description": "HV Battery State-of-Health, i.e. ratio of current maximum energy capacity versus that at beginning of life.", + "type": "UInt16", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_I_MvBattIDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_10", + "name": "sVcMvbm_I_MvBattIDc", + "configs": [["all"]], + "description": "Measured current in/out of the battery", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": -410, + "max": 409.1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_Pw_MvBattPwrLimChrg": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_12", + "name": "sVcMvbm_Pw_MvBattPwrLimChrg", + "configs": [["all"]], + "description": "Maximum charging power allowed", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 25.5, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_Pw_MvBattPwrLimDcha": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_13", + "name": "sVcMvbm_Pw_MvBattPwrLimDcha", + "configs": [["all"]], + "description": "Maximum discharging power allowed", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 25.5, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_D_MvBattRlySts": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_14", + "name": "sVcMvbm_D_MvBattRlySts", + "configs": [["all"]], + "description": "Actual relay position", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_X_MvBattSoc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_15", + "name": "sVcMvbm_X_MvBattSoc", + "configs": [["all"]], + "description": "Calculated SOC", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_X_MvBattSocLimHi": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_16", + "name": "sVcMvbm_X_MvBattSocLimHi", + "configs": [["all"]], + "description": "Upper Soc limit before derating", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_X_MvBattSocLimLo": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_17", + "name": "sVcMvbm_X_MvBattSocLimLo", + "configs": [["all"]], + "description": "Lower Soc limit before derating", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_X_MvBattSocLimMax": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_18", + "name": "sVcMvbm_X_MvBattSocLimMax", + "configs": [["all"]], + "description": "Maximum Soc limit before full derating", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_X_MvBattSocLimMin": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_19", + "name": "sVcMvbm_X_MvBattSocLimMin", + "configs": [["all"]], + "description": "Minimum Soc limit before full derating", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_Te_MvBattT": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_20", + "name": "sVcMvbm_Te_MvBattT", + "configs": [["all"]], + "description": "48V battery temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -256, + "max": 255.9, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMvbm_U_MvBattUDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_21", + "name": "sVcMvbm_U_MvBattUDc", + "configs": [["all"]], + "description": "48V battery pack voltage (before the contactor)", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 102.3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_I_MvIsgIDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_25", + "name": "sVcIsgm_I_MvIsgIDc", + "configs": [["all"]], + "description": "DC current Into MV ISG inverter positive terminal.", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": -410, + "max": 409.1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_D_MvIsgModSts": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_28", + "name": "sVcIsgm_D_MvIsgModSts", + "configs": [["all"]], + "description": "ISG mode status", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_n_MvIsgSpdAct": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_30", + "name": "sVcIsgm_n_MvIsgSpdAct", + "configs": [["all"]], + "description": "Actual ISG Speed referred to Crankshaft.", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -8191, + "max": 8192, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_Tq_MvIsgTqAct": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_31", + "name": "sVcIsgm_Tq_MvIsgTqAct", + "configs": [["all"]], + "description": "Estimated MV ISG motor torque on the crankshaft. The torque is positive in the forward rotation direction. Referred to crank shaft.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -511, + "max": 512, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_Tq_MvIsgTqAvlMax": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_32", + "name": "sVcIsgm_Tq_MvIsgTqAvlMax", + "configs": [["all"]], + "description": "Maximum available torque form ISG", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -511, + "max": 512, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_Tq_MvIsgTqAvlMin": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_33", + "name": "sVcIsgm_Tq_MvIsgTqAvlMin", + "configs": [["all"]], + "description": "Minimum available torque form ISG", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -511, + "max": 512, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIsgm_U_MvIsgUDc": { + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/TLInport_34", + "name": "sVcIsgm_U_MvIsgUDc", + "configs": [["all"]], + "description": "Actual DC-voltage of the MV ISG-inverter", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 102.3, + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": {}, + "calib_consts": { + "cVcPvcIn_B_48VInterface": { + "type": "Bool", + "unit": "-", + "description": "Set to 1 to adabt interface to 48V EKERS system", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcPvcIn/VcPvcIn/Subsystem/VcPvcIn/1_VcPvcIn/B_48VInterface", + "configs": ["all"], + "width": 1 + } + } + }, + "VcScBCoord": { + "version": {}, + "integrity_level": "B", + "outports": { + "yVcScBCoord_B_TqEnable": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_TqEnable", + "name": "yVcScBCoord_B_TqEnable", + "configs": ["all"], + "description": "Torque Enable - torque actuator torque delivery allowed and monitored", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_ATVehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_ATVehicle", + "name": "yVcScBCoord_B_ATVehicle", + "configs": ["all"], + "description": "Automatic transmission", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_SbWVehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_SbWVehicle", + "name": "yVcScBCoord_B_SbWVehicle", + "configs": ["all"], + "description": "Shift by wire", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_7dctVehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_7DCTVehicle", + "name": "yVcScBCoord_B_7dctVehicle", + "configs": ["all"], + "description": "7DCT gearbox ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_Isg": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Isg", + "name": "yVcScBCoord_B_Isg", + "configs": ["all"], + "description": "ISG/EM/EFAD exists. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_Erad": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Erad", + "name": "yVcScBCoord_B_Erad", + "configs": ["all"], + "description": "Equipped with an ERAD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_ECMInit": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_ECMInit", + "name": "yVcScBCoord_B_ECMInit", + "configs": ["all"], + "description": "ECM has been initiated. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_HreVehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_HreVehicle", + "name": "yVcScBCoord_B_HreVehicle", + "configs": ["all"], + "description": "Hre Vehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_Hep7Vehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Hep7Vehicle", + "name": "yVcScBCoord_B_Hep7Vehicle", + "configs": ["all"], + "description": "Hep7 Vehicle.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBCoord_L_WheelRad": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRad", + "name": "sVcScBCoord_L_WheelRad", + "configs": ["all"], + "description": "Wheel radius", + "type": "Float32", + "unit": "m", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBCoord_D_SchedulingResponse": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScAccB_B_NeutralMT13", + "name": "sVcScBCoord_D_SchedulingResponse", + "configs": ["all"], + "description": "Partial watchdog response", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 65535, + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcDepExt_D_Counter": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScAccB_B_NeutralMT14", + "name": "sVcDepExt_D_Counter", + "configs": ["all"], + "description": "Watchdog counter", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScBCoord_t_EngRunCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_t_EngRunCmpl", + "name": "sVcScBCoord_t_EngRunCmpl", + "configs": ["all"], + "description": "Bitwise complement to sVcScBCoord_t_EngRun", + "type": "UInt32", + "unit": "s", + "offset": 0, + "lsb": 1, + "min": 0, + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBCoord_t_EngRunDCYCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_t_EngRunDCYCmpl", + "name": "sVcScBCoord_t_EngRunDCYCmpl", + "configs": ["all"], + "description": "Bitwise complement to sVcScBCoord_t_EngRunDCY", + "type": "UInt32", + "unit": "s", + "offset": 0, + "lsb": 1, + "min": 0, + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_TqEnableCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_TqEnableCmpl", + "name": "yVcScBCoord_B_TqEnableCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_TqEnable", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_ATVehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_ATVehicleCmpl", + "name": "yVcScBCoord_B_ATVehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_ATVehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_SbWVehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_SbWVehicleCmpl", + "name": "yVcScBCoord_B_SbWVehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_SbWVehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_7dctVehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_7DCTVehicleCmpl", + "name": "yVcScBCoord_B_7dctVehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_7dctVehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_IsgCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_IsgCmpl", + "name": "yVcScBCoord_B_IsgCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_Isg", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_EradCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_EradCmpl", + "name": "yVcScBCoord_B_EradCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_Erad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_ECMInitCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_ECMInitCmpl", + "name": "yVcScBCoord_B_ECMInitCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_ECMInit", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_HreVehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_HreVehicleCmpl", + "name": "yVcScBCoord_B_HreVehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_HreVehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_Hep7VehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Hep7VehicleCmpl", + "name": "yVcScBCoord_B_Hep7VehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_Hep7Vehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBCoord_L_WheelRadCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRadCmpl", + "name": "sVcScBCoord_L_WheelRadCmpl", + "configs": ["all"], + "description": "Bitwise complement to sVcScBCoord_L_WheelRad", + "type": "UInt32", + "unit": "m", + "offset": 0, + "lsb": 1, + "min": 0, + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_BevVehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRad1", + "name": "yVcScBCoord_B_BevVehicle", + "configs": ["all"], + "description": "Battery electric vehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_BevVehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Hep7VehicleCmpl1", + "name": "yVcScBCoord_B_BevVehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_BevVehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_OnlyElecProp": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRad2", + "name": "yVcScBCoord_B_OnlyElecProp", + "configs": ["all"], + "description": "The vehicle is only propelled with electric engines without any gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_OnlyElecPropCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Hep7VehicleCmpl2", + "name": "yVcScBCoord_B_OnlyElecPropCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_OnlyElecProp", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_AwGearbox": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRad3", + "name": "yVcScBCoord_B_AwGearbox", + "configs": ["all"], + "description": "The vehicle is equipped with an AW gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_AwGearboxCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Hep7VehicleCmpl3", + "name": "yVcScBCoord_B_AwGearboxCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_AwGearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBCoord_m_FullLoaded": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRad4", + "name": "sVcScBCoord_m_FullLoaded", + "configs": ["all"], + "description": "Total mass of the vehicle when full-loaded (trailer included).", + "type": "Float32", + "unit": "kg", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1000000, + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBCoord_m_FullLoadedCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRadCmpl1", + "name": "sVcScBCoord_m_FullLoadedCmpl", + "configs": ["all"], + "description": "Bitwise complement to sVcScBCoord_m_FullLoaded", + "type": "UInt32", + "unit": "kg", + "offset": 0, + "lsb": 1, + "min": 0, + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_OldSbWModels": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcScBCoord_L_WheelRad5", + "name": "yVcScBCoord_B_OldSbWModels", + "configs": ["all"], + "description": "Boolean used to select between the signals of the old (VcScBDesDir) or the new SbW models (VcTcBDesDir).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_OldSbWModelsCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_Hep7VehicleCmpl4", + "name": "yVcScBCoord_B_OldSbWModelsCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_OldSbWModels", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_MTVehicle": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_ATVehicle1", + "name": "yVcScBCoord_B_MTVehicle", + "configs": ["all"], + "description": "Manual gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBCoord_B_MTVehicleCmpl": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/yVcScBCoord_B_ATVehicleCmpl1", + "name": "yVcScBCoord_B_MTVehicleCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBCoord_B_MTVehicle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + } + }, + "inports": { + "yVcEc_B_KL15": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcEc_Qf_vVeh2", + "name": "yVcEc_B_KL15", + "configs": [["Vc_Pvc_Hw_B_Bosch"], ["all"]], + "description": "The hardwired signal KL15 from CEM to ECM (0 = KL15 not active, 1 = KL15 active). The signal shall be debonced.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_WatchdogQuery": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcEc_Qf_vVeh3", + "name": "sVcEc_D_WatchdogQuery", + "configs": [["all"]], + "description": "EMS watchdog query to ECM.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 127, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDepExt_D_Counter": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcEc_Qf_vVeh6", + "name": "sVcDepExt_D_Counter", + "configs": [["all"]], + "description": "Watchdog counter", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcGp_L_TireCircm": { + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/sVcEc_n_Eng13", + "name": "sVcGp_L_TireCircm", + "configs": [["all"]], + "description": "Wheel tire circumference", + "type": "Float32", + "unit": "m", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": ["Vc_Pvc_Hw_B_Bosch"], + "local_vars": { + "xVcScBCoord_B_IntegrityCheck": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_B/CVC_DISP", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/F000_SchedulingMon/clpOkAND", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScBCoord_B_7dctVehicle": { + "type": "Bool", + "unit": "-", + "description": "7DCT gearbox", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_7dctVehicle", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_ATVehicle": { + "type": "Bool", + "unit": "-", + "description": "Automatic transmission", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_ATVehicle", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_AwGearbox": { + "type": "Bool", + "unit": "-", + "description": "The vehicle is equipped with an AW gearbox", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_AwGearbox", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_Bev": { + "type": "Bool", + "unit": "-", + "description": "Battery electric vehicle Vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_Bev", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_Erad": { + "type": "Bool", + "unit": "-", + "description": "Equipped with an ERAD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_Erad", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_Hep7Vehicle": { + "type": "Bool", + "unit": "-", + "description": "HRE Vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_Hep7Vehicle", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_HreVehicle": { + "type": "Bool", + "unit": "-", + "description": "HRE Vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_HreVehicle", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_Isg": { + "type": "Bool", + "unit": "-", + "description": "ISG/EM/EFAD exists and is connected in a 7DCT gearbox.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_Isg", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_OldSbWModels": { + "type": "Bool", + "unit": "-", + "description": "Boolean used to select between the signals of the old (VcScBDesDir) or the new SbW models (VcTcBDesDir).", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_OldSbWModels", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_OnlyElecProp": { + "type": "Bool", + "unit": "-", + "description": "The vehicle is only propelled with electric engines without any gearbox", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_OnlyElecProp", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_SbWVehicle": { + "type": "Bool", + "unit": "-", + "description": "Shift by wire", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_SbWVehicle", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_TqEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value for yVcScBCoord_B_TqEnable", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_TqEnable_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_B_TqEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for yVcScBCoord_B_TqEnable", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/B_TqEnable_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_L_TireCircmMax": { + "type": "Float32", + "unit": "m", + "description": "Maximum allowed wheel circumference", + "max": 3, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/L_TireCircmMax", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_L_TireCircmMin": { + "type": "Float32", + "unit": "m", + "description": "Minimum allowed wheel circumference", + "max": 3, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/L_TireCircmMin", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_m_FullLoaded": { + "type": "Float32", + "unit": "kg", + "description": "Total mass of the vehicle when full-loaded (trailer included).", + "max": 1000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/m_FullLoaded", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_t_DebIgniSwOff": { + "type": "Float32", + "unit": "s", + "description": "Debounce time before judging ignition off", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/2_DependabilityCarConfig/t_DebIgniSwOff", + "configs": ["all"], + "width": 1 + }, + "cVcScBCoord_D_ExpectedCounter": { + "type": "UInt8", + "unit": "-", + "description": "Expected value of the counter when this model executes", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBCoord/VcScBCoord/Subsystem/VcScBCoord/VcScBCoord/F000_SchedulingMon/D_ExpectedCounter", + "configs": ["all"], + "width": 1 + } + } + }, + "VcScABrkPed": { + "version": {}, + "integrity_level": "A", + "outports": { + "yVcScABrkPed_B_DrvrBrkgQM": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/yVcScAccB_B_NeutralMT8", + "name": "yVcScABrkPed_B_DrvrBrkgQM", + "configs": ["all"], + "description": "Driver braking QM Integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScABrkPed_B_DrvrBrkg": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/yVcScAccB_B_NeutralMT1", + "name": "yVcScABrkPed_B_DrvrBrkg", + "configs": ["all"], + "description": "Driver braking with ASIL A Integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScABrkPed_B_DrvrBrkgASILB": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/sVcScABrkPed_X_AccPedalPos10", + "name": "yVcScABrkPed_B_DrvrBrkgASILB", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "description": "Driver is pressing the brake pedal to at ASIL B integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScABrkPed_B_DrvrNotBrkg": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/sVcScABrkPed_X_AccPedalPos11", + "name": "yVcScABrkPed_B_DrvrNotBrkg", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "description": "Driver is NOT pressing the brake pedal to ASIL C integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "yVcEc_B_BrFootOnPedalQM": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/sVcEc_Qf_vVeh1", + "name": "yVcEc_B_BrFootOnPedalQM", + "configs": [["all"]], + "description": "Brake pedal pressed to ASIL A integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_BrFootOnPedalASILA": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/sVcEc_Qf_vVeh2", + "name": "yVcEc_B_BrFootOnPedalASILA", + "configs": [["all"]], + "description": "Brake pedal pressed by driver to ASIL A integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_BrFootOnPedal": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/sVcEc_n_Eng16", + "name": "yVcEc_B_BrFootOnPedal", + "configs": [["Vc_Pvc_Hw_B_Denso"]], + "description": "Brake foot on pedal", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_BrFootOffPedal": { + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/sVcEc_n_Eng17", + "name": "yVcEc_B_BrFootOffPedal", + "configs": [["Vc_Pvc_Hw_B_Denso"]], + "description": "Brake foot off pedal", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": ["Vc_Pvc_Hw_B_Denso"], + "local_vars": {}, + "calib_consts": { + "cVcScABrkPed_B_DrvrBrkgQM_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value for yVcScABrkPed_B_DrvrBrkgQM", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/1_Common/B_DrvrBrkgQM_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrBrkgQM_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for yVcScABrkPed_B_DrvrBrkgQM", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/1_Common/B_DrvrBrkgQM_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrBrkg_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value for yVcScABrkPed_B_DrvrBrkg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/1_Common/B_DrvrBrkg_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrBrkg_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for yVcScABrkPed_B_DrvrBrkg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/1_Common/B_DrvrBrkg_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScABrkPed_B_UseASILAForQM": { + "type": "Bool", + "unit": "-", + "description": "B_UseASILAForQM", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/1_Common/B_UseASILAForQM", + "configs": ["all"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrBrkgASILB_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug for DrvrBrkgASILB", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/2_Denso/B_DrvrBrkgASILB_dbi", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrBrkgASILB_swi": { + "type": "Bool", + "unit": "", + "description": "Debug for DrvrBrkgASILB", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/2_Denso/B_DrvrBrkgASILB_swi", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrNotBrkg_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug for DrvrNotBrkg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/2_Denso/B_DrvrNotBrkg_dbi", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScABrkPed_B_DrvrNotBrkg_swi": { + "type": "Bool", + "unit": "", + "description": "Debug for DrvrNotBrkg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScABrkPed/VcScABrkPed/Subsystem/VcScABrkPed/VcScABrkPed/2_Denso/B_DrvrNotBrkg_swi", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + } + } + }, + "VcScAAccPed": { + "version": {}, + "integrity_level": "A", + "outports": { + "sVcScAAccPed_X_AccPedalZeroAdptPrim": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT3", + "name": "sVcScAAccPed_X_AccPedalZeroAdptPrim", + "configs": ["all"], + "description": "Current value of zero point adaptation on primary acc pedal sensor.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_AccPedalPsd": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT5", + "name": "yVcScAAccPed_B_AccPedalPsd", + "configs": ["all"], + "description": "Accelerator pedal pressed to ASIL A integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_Kickdown": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT8", + "name": "yVcScAAccPed_B_Kickdown", + "configs": ["all"], + "description": "Accelerator pedal kickdown.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAAccPed_Xd_AccPedPosCR": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT9", + "name": "sVcScAAccPed_Xd_AccPedPosCR", + "configs": ["all"], + "description": "Accelerator Pedal Change Rate.", + "type": "Float32", + "unit": "%/s", + "offset": "-", + "lsb": "-", + "min": -5000, + "max": 5000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_DiffOk": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT10", + "name": "yVcScAAccPed_B_DiffOk", + "configs": ["all"], + "description": "The acc ped is considered as OK with respect to sensor difference. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAAccPed_X_AccPedalPos": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT2", + "name": "sVcScAAccPed_X_AccPedalPos", + "configs": ["all"], + "description": "Accelerator Pedal Position to Integrity ASIL A", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_FullyPsd": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT1", + "name": "yVcScAAccPed_B_FullyPsd", + "configs": ["all"], + "description": "Accelerator Pedal is fully pressed. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_DiffFault": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAccB_B_NeutralMT4", + "name": "yVcScAAccPed_B_DiffFault", + "configs": ["all"], + "description": "Accelerator pedal difference fault", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_AccPedFault": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAAccPed_B_NeutralMT9", + "name": "yVcScAAccPed_B_AccPedFault", + "configs": ["all"], + "description": "Accelerator Pedal fault (Diff fault or electrical fault).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_DecelOvrdnByDrvr": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcScAAccPed_X_AccPedalPos27", + "name": "yVcScAAccPed_B_DecelOvrdnByDrvr", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "description": "Driver is overriding a deceleration by pressing the accelerator pedal.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAAccPed_B_AccFtOnPed": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/yVcScAAccPed_B_ClFtOnPed2", + "name": "yVcScAAccPed_B_AccFtOnPed", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "description": "Foot on acc pedal", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcDi_X_AccPed2Raw": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh3", + "name": "sVcDi_X_AccPed2Raw", + "configs": [["all"], ["Vc_Pvc_Hw_B_Denso"]], + "description": "Accelerator pedal position measured as analog value (% of Vcc-Vref). The signal shall reflect the raw unfiltered sensor value.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDi_X_AccPed1Raw": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh4", + "name": "sVcDi_X_AccPed1Raw", + "configs": [["all"], ["Vc_Pvc_Hw_B_Denso"]], + "description": "Accelerator pedal raw signal acquired via PWM (Duty cycle of PWM input of Accelerator Pedal Position, unfiltered)", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_AccPed1Ok": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh24", + "name": "yVcDi_B_AccPed1Ok", + "configs": [["all"], ["Vc_Pvc_Hw_B_Denso"]], + "description": "No electrical fault detected on AccPed1 sensor, signal recieved correctly.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_AccPed2Ok": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh25", + "name": "yVcDi_B_AccPed2Ok", + "configs": [["all"], ["Vc_Pvc_Hw_B_Denso"]], + "description": "No electrical fault detected on AccPed2 sensor, signal recieved correctly.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TesterClear": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh14", + "name": "yVcEc_B_TesterClear", + "configs": [["Vc_Pvc_Hw_B_Bosch"], ["all"]], + "description": "Fault code memory reset", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBCoord_B_TqEnable": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh21", + "name": "yVcScBCoord_B_TqEnable", + "configs": [["Vc_Pvc_Hw_B_Bosch"], ["all"]], + "description": "Torque enable", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScABrkPed_B_DrvrBrkg": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh1", + "name": "yVcScABrkPed_B_DrvrBrkg", + "configs": [["all"]], + "description": "Driver braking with ASIL A Integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBCoord_B_ATVehicle": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh2", + "name": "yVcScBCoord_B_ATVehicle", + "configs": [["all"]], + "description": "Automatic transmission", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_AccPedDiffError": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh26", + "name": "yVcDi_B_AccPedDiffError", + "configs": [["all"]], + "description": "Error flag from STM/Level 2 for diff error between AccPedal signals", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_AccPedPressed": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/sVcEc_Qf_vVeh6", + "name": "yVcDi_B_AccPedPressed", + "configs": [["Vc_Pvc_Hw_B_Denso"]], + "description": "Accelerator being pressed by driver.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": { + "sVcScAAccPed_X_AccPedalAdaptPrimary": { + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/sVcScAAccPed_X_AccPedalAdaptPrimary/DataStore", + "name": "sVcScAAccPed_X_AccPedalAdaptPrimary", + "configs": ["all"], + "class": "CVC_DISP_NVM", + "description": "Enter a nice description of your variable here", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "width": "-1" + } + }, + "pre_procs": ["Vc_Pvc_Hw_B_Bosch", "Vc_Pvc_Hw_B_Denso"], + "local_vars": { + "rVcScAAccPed_X_AccPedalPrimRaw": { + "type": "Float32", + "unit": "%", + "description": "Raw value of primary AccPedal sensor", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/LogicalSwitch/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedalSecRaw": { + "type": "Float32", + "unit": "%", + "description": "Raw value of primary AccPedal sensor", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedalSecOk": { + "type": "Bool", + "unit": "", + "description": "Ok flag indicating no HW faults on the secondary AccPedal sensor", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/LogicalSwitch4/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedalPrimOk": { + "type": "Bool", + "unit": "", + "description": "Ok flag indicating no HW faults on the primary AccPedal sensor", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/LogicalSwitch6/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedAdaptVal": { + "type": "Float32", + "unit": "%", + "description": "New acc pedal zero point adaption value.", + "max": 20, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedZeroPointEst": { + "type": "Float32", + "unit": "%", + "description": "Difference between acc pedal zero point calibration and actual zero point (used for calculating new adaption values)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedalZeroAdptRaw": { + "type": "Float32", + "unit": "%", + "description": "Accelerator pedal zero point adaption value from adaption logic.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/UnitDelay1", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedSecRawDelayed": { + "type": "Float32", + "unit": "%", + "description": "X_AccPed2Raw delayed X_AccPedalDiffRaw2Delay samples", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/13_DiffCheck/MultiportSwitch", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedalPreAdapt": { + "type": "Float32", + "unit": "%", + "description": "Accelerator pedal signal value after signal selection, before linearisation and zero adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/Gain", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedFault": { + "type": "Bool", + "unit": "-", + "description": "The acc pedal is faulty. Electric fault or diff fault.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/LogicalOperator10", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedNoHWFault": { + "type": "Bool", + "unit": "-", + "description": "No detected HW fault on AccPed1 or AccPed2", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/LogicalOperator9", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedalPosLinearised": { + "type": "Float32", + "unit": "%", + "description": "AccPedal value after linearisation and full load cut off.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/Min1", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedal": { + "type": "Float32", + "unit": "%", + "description": "AccPedal signal after zero point adaption and signal selection.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/MinMax", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPed1RawLastMin": { + "type": "Float32", + "unit": "%", + "description": "Lowest value of accelerator pedal raw signal (PWM) received since its OK flag transitioned from FALSE to TRUE. It is set to 100 when the OK flag is FALSE.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/15_AccPedalPsd/LogicalSwitch5/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPed2RawLastMin": { + "type": "Float32", + "unit": "%", + "description": "Lowest value of accelerator pedal raw signal (analogue) received since its OK flag transitioned from FALSE to TRUE. It is set to 100 when the OK flag is FALSE.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/15_AccPedalPsd/LogicalSwitch6/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedOvrdVal": { + "type": "Float32", + "unit": "%", + "description": "AccPedal value used for override determination.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/Min2", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "rVcScAAccPed_X_AccPedRawDiff": { + "type": "Float32", + "unit": "%", + "description": "Max difference between the raw acc pedal signals.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/RenameSignal/InPort", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedAdaptStbl": { + "type": "Bool", + "unit": "-", + "description": "Pedal sensor 1 value stable enough during adaption window", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/B_DpInstEnable1", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedAdaptUp": { + "type": "Bool", + "unit": "", + "description": "AccPedal adaption allowed for increasing values", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/LogicalOperator4", + "configs": ["all"], + "width": 1 + }, + "xVcScAAccPed_B_AccPedAdaptDwn": { + "type": "Bool", + "unit": "", + "description": "AccPedal adaption allowed for decreasing values", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/LogicalOperator7", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScAAccPed_B_AccPed1KL15": { + "type": "Bool", + "unit": "-", + "description": "Set AccPed1Ok to FALSE on KL15 LOW", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/B_AccPed1KL15", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPrimOk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value for AccPedPrimOk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/B_AccPedalPrimOk_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPrimOk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for AccPedPrimOk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/B_AccPedalPrimOk_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalSecOk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value for AccPedSecOk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/B_AccPedalSecOk_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalSecOk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for AccPedsecOk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/B_AccPedalSecOk_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_D_AccPedalPrimarySensor": { + "type": "UInt8", + "unit": "-", + "description": "AccPedal sensor number (1 or 2) to use as primary sensor. Also defines the remaining sensor as secondary.", + "max": 2, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/11_SignalMapping/D_AccPedalPrimarySensor", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_D_AccPedalSecRawDelay": { + "type": "UInt8", + "unit": "-", + "description": "Number of time steps to delay AccPedSecRaw signal before doing diff check which enables/disables zero point adaption", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/13_DiffCheck/D_AccPedalSecRawDelay", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPos_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/B_AccPedalPos_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedDeadway": { + "type": "Float32", + "unit": "%", + "description": "Accelerato pedal deadway.", + "max": 15, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_AccPedDeadway", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedErrRawComp": { + "type": "Float32", + "unit": "%", + "description": "Constant AccPedal zero point adaption used in case of HW or diff fault.", + "max": 15, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_AccPedErrRawComp", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedMaxLimit": { + "type": "Float32", + "unit": "%", + "description": "Maximum output value for acc pedal. (Signal forwarded to PVC will not indicate higher value than this)", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_AccPedMaxLimit", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedalPos_dbi": { + "type": "Float32", + "unit": "%", + "description": "Debug value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_AccPedalPos_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_ZeroAdptSafe": { + "type": "Float32", + "unit": "%", + "description": "Minimum allowed zero point adaptation to be used when creating the AccPedalPos signal.", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_ZeroAdptSafe", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPsd_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for AccPedalPsd", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/15_AccPedalPsd/B_AccPedalPsd_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPsd_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for AccPedalPsd", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/15_AccPedalPsd/B_AccPedalPsd_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedalPsdASILA": { + "type": "Float32", + "unit": "%", + "description": "Pressed limit to judge accelerator pedal as pressed with ASIL A integrity", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/15_AccPedalPsd/X_AccPedalPsdASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_IncAccPedalPsdASILA": { + "type": "Float32", + "unit": "%", + "description": "Minimum increase over the minimum value to judge accelerator pedal as pressed with ASIL A integrity", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/15_AccPedalPsd/X_IncAccPedalPsdASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_FullyPsd_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for yVcScAAccPed_B_FullyPsd_dbi", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/16_AccPedFullyPsd/B_FullyPsd_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_FullyPsd_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for yVcScAAccPed_B_FullyPsd", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/16_AccPedFullyPsd/B_FullyPsd_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_FullyPsd": { + "type": "Float32", + "unit": "%", + "description": "Pressed limit to judge accelerator pedal as fully pressed with ASIL A integrity.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/16_AccPedFullyPsd/X_FullyPsd", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedOvrdRawAbort": { + "type": "Float32", + "unit": "%", + "description": "Minimum accpedal sensor value to reset DecelOvrdnByDrvr", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/X_AccPedOvrdRawAbort", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedOvrdRawAbortLow": { + "type": "Float32", + "unit": "%", + "description": "Minimum accpedal sensor value to reset DecelOvrdnByDrvr after debounce t_AccPedOvrdTrigLowh", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/X_AccPedOvrdRawAbortLow", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedOvrdRawTrig": { + "type": "Float32", + "unit": "%", + "description": "Minimum accpedal sensor value to set DecelOvrdnByDrvr", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/X_AccPedOvrdRawTrig", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedOvrdRawTrigLow": { + "type": "Float32", + "unit": "%", + "description": "Minimum accpedal sensor value to set DecelOvrdnByDrvr after debounce t_AccPedOvrdTrigLow", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/X_AccPedOvrdRawTrigLow", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedOvrdMinTime": { + "type": "Float32", + "unit": "s", + "description": "Minimum time for accelerator pedal override. Once triggered, override always lasts longer than this.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/t_AccPedOvrdMinTime", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedOvrdTrigLow": { + "type": "Float32", + "unit": "s", + "description": "Minimum time to require max Accpedal sensor value to be above X_AccPedOvrdRawTrigLow to set DecelOvrdnByDrvr", + "max": 20, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/17_DecelOvrdnByDrvr/t_AccPedOvrdTrigLow", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPsdASILC_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for AccFtOnPed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/18_AccFtOnPed/B_AccPedalPsdASILC_dbi", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedalPsdASILC_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for AccFtOnPed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/18_AccFtOnPed/B_AccPedalPsdASILC_swi", + "configs": ["Vc_Pvc_Hw_B_Denso"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptDiffMax": { + "type": "Float32", + "unit": "%", + "description": "Maximum diff between AccPedaRawl 1 and 2 to allow acc pedal zero point adaption (as determined by X_AccPedRawDiff)", + "max": 150, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/X_AccPedAdaptDiffMax", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptRawMax": { + "type": "Float32", + "unit": "%", + "description": "Maximum value of acc pedal 1 and 2 to allow acc pedal zero point adaption", + "max": 150, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/X_AccPedAdaptRawMax", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptRawMin": { + "type": "Float32", + "unit": "%", + "description": "Minimum value of acc pedal 1 and 2 to allow acc pedal zero point adaption", + "max": 150, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/X_AccPedAdaptRawMin", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptStbl": { + "type": "Float32", + "unit": "%", + "description": "Maximum change of AccPed1 value during fulfilled adaption conditions", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/X_AccPedAdaptStbl", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_Xd_AccPedAdaptDwn": { + "type": "Float32", + "unit": "%/s", + "description": "Max decrease per sample in acc pedal zero point adaption", + "max": 0, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/Xd_AccPedAdaptDwn", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_Xd_AccPedAdaptUp": { + "type": "Float32", + "unit": "%/s", + "description": "Max increase per sample in acc pedal zero point adaption", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/Xd_AccPedAdaptUp", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptDwnBrk": { + "type": "Float32", + "unit": "s", + "description": "Min time for brake pedal pressed to allow reducing adaption value", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptDwnBrk", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptDwnH": { + "type": "Float32", + "unit": "s", + "description": "Min time for fulfilled accpedal conditions to allow reducing adaption value", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptDwnH", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptDwnL": { + "type": "Float32", + "unit": "s", + "description": "Min time for fulfilled accpedal conditions to allow reducing adaption value", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptDwnL", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptMax": { + "type": "Float32", + "unit": "s", + "description": "Time counter limit for acc pedal conditions to allow zero point adaption", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptMax", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptUpBrk": { + "type": "Float32", + "unit": "s", + "description": "Min time for fulfilled accpedal conditions to allow increasing adaption value", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptUpBrk", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptUpH": { + "type": "Float32", + "unit": "s", + "description": "Min time for fulfilled accpedal conditions to allow increasing adaption value", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptUpH", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedAdaptUpL": { + "type": "Float32", + "unit": "s", + "description": "Min time for fulfilled accpedal conditions to allow increasing adaption value", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/211_AccPedAdaptUpDown/t_AccPedAdaptUpL", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptInit": { + "type": "Float32", + "unit": "%", + "description": "AccPedal zero point adaption at tester clear", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/X_AccPedAdaptInit", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptMax": { + "type": "Float32", + "unit": "%", + "description": "Upper saturation limit of acc pedal zero point adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/X_AccPedAdaptMax", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptMin": { + "type": "Float32", + "unit": "%", + "description": "Lower saturation limit of acc pedal zero point adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/X_AccPedAdaptMin", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptVal_dbi": { + "type": "Float32", + "unit": "%", + "description": "DEV: Debug value of acc pedal adaption X_AccPedAdaptVal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/X_AccPedAdaptVal_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedAdaptVal_swi": { + "type": "Bool", + "unit": "-", + "description": "DEV: Debug switch to use debug value for acc pedal adaption X_AccPedAdaptVal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/21_ZeroPointAdaptation/212_AccPedalZeroAdptRaw/X_AccPedAdaptVal_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_Kickdown_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value for yVcScAAccPed_B_KickDown from VcScAAccPed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/22_Kickdown/B_Kickdown_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_Kickdown_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch for yVcScAAccPed_B_KickDown from VcScAAccPed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/22_Kickdown/B_Kickdown_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedKickdownOff": { + "type": "Float32", + "unit": "%", + "description": "Level of X_AccPedal to untrigger B_Kickdown", + "max": 150, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/22_Kickdown/X_AccPedKickdownOff", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_X_AccPedKickdownOn": { + "type": "Float32", + "unit": "%", + "description": "Level of X_AccPedal to trigger B_Kickdown on", + "max": 150, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/22_Kickdown/X_AccPedKickdownOn", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_B_AccPedPosCR_swi": { + "type": "Bool", + "unit": "s", + "description": "Debug switch for AccPedalPosCR", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/23_AccPedPosChangeRate/B_AccPedPosCR_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_Xd_AccPedPosCRLowerLim": { + "type": "Float32", + "unit": "%/s", + "description": "Upper limit of AccPedPosCR", + "max": 0, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/23_AccPedPosChangeRate/Xd_AccPedPosCRLowerLim", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_Xd_AccPedPosCRUpperLim": { + "type": "Float32", + "unit": "%/s", + "description": "Upper limit of AccPedPosCR", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/23_AccPedPosChangeRate/Xd_AccPedPosCRUpperLim", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_Xd_AccPedPosCR_dbi": { + "type": "Float32", + "unit": "%/s", + "description": "Debug value for AccPedalPosCR", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/23_AccPedPosChangeRate/Xd_AccPedPosCR_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_Z_AccPedPosCRScaleFactor": { + "type": "Float32", + "unit": "-", + "description": "Scale factor applied to AccPedCR before CAN-scaling", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/23_AccPedPosChangeRate/Z_AccPedPosCRScaleFactor", + "configs": ["all"], + "width": 1 + }, + "cVcScAAccPed_t_AccPedPosCRLPF": { + "type": "Float32", + "unit": "s", + "description": "Time constant of low pass filter on AccPedCR", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/2_QM/23_AccPedPosChangeRate/t_AccPedPosCRLPF", + "configs": ["all"], + "width": 1 + }, + "tVcScAAccPed_X_AccPedLinearisation_x": { + "type": "Float32", + "unit": "%", + "description": "Linearisation data for ASIL A X_AccPedal signal", + "max": 200, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_AccPedLinearisation/X_AccPedLinearisation_x", + "configs": ["all"], + "width": [1, 2] + }, + "tVcScAAccPed_X_AccPedLinearisation": { + "type": "Float32", + "unit": "%", + "description": "Linearisation values for ASIL A X_AccPedal", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAAccPed/VcScAAccPed/Subsystem/VcScAAccPed/VcScAAccPed/1_ASILA/14_SignalSelection/X_AccPedLinearisation/X_AccPedLinearisation", + "configs": ["all"], + "width": [1, 2] + } + } + }, + "VcScBAccPed": { + "version": {}, + "integrity_level": "B", + "outports": { + "yVcScBAccPed_B_DecelOvrdnByDrvr": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScBAccPed_B_DecelOvrdnByDrvr", + "name": "yVcScBAccPed_B_DecelOvrdnByDrvr", + "configs": ["all"], + "description": "Driver is overriding a deceleration by pressing the accelerator pedal.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBAccPed_B_AccPedNotFullyPsd": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScBAccPed_B_AccPedNotFullyPsd", + "name": "yVcScBAccPed_B_AccPedNotFullyPsd", + "configs": ["all"], + "description": "The driver is not fully pressing the accelerator pedal to Integrity ASIL B. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBAccPed_D_SchedulingResponse": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/TLOutport_6", + "name": "sVcScBAccPed_D_SchedulingResponse", + "configs": ["all"], + "description": "Partial watchdog response", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 65535, + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcDepExt_D_Counter": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScAccB_B_NeutralMT14", + "name": "sVcDepExt_D_Counter", + "configs": ["all"], + "description": "Watchdog counter", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScBAccPed_X_AccPedCmpl": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcScBAccPed_X_AccPedCmpl", + "name": "sVcScBAccPed_X_AccPedCmpl", + "configs": ["all"], + "description": "Bitwise complement to sVcScBAccPed_X_AccPed", + "type": "UInt32", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": 0, + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBAccPed_B_AccPedDiffOkCmpl": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScBAccPed_B_AccPedDiffOkCmpl", + "name": "yVcScBAccPed_B_AccPedDiffOkCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBAccPed_B_AccPedDiffOk", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBAccPed_B_DecelOvrdnByDrvrCmpl": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScBAccPed_B_DecelOvrdnByDrvrCmpl", + "name": "yVcScBAccPed_B_DecelOvrdnByDrvrCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBAccPed_B_DecelOvrdnByDrvr", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBAccPed_X_AccPedMinCmpl": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcScBAccPed_X_AccPedMinCmpl", + "name": "sVcScBAccPed_X_AccPedMinCmpl", + "configs": ["all"], + "description": "Bitwise complement to sVcScBAccPed_X_AccPedMin", + "type": "UInt32", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": 0, + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBAccPed_B_AccPedNotFullyPsdCmpl": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScBAccPed_B_AccPedNotFullyPsdCmpl", + "name": "yVcScBAccPed_B_AccPedNotFullyPsdCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBAccPed_B_AccPedNotFullyPsd", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBAccPed_B_DiffFaultCmpl": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcScBAccPed_B_DiffFaultCmpl", + "name": "yVcScBAccPed_B_DiffFaultCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBAccPed_B_DiffFault", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcDi_X_AccPed2Raw": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcEc_Qf_vVeh3", + "name": "sVcDi_X_AccPed2Raw", + "configs": [["all"], ["Vc_Pvc_Hw_B_Bosch"]], + "description": "Accelerator pedal position measured as analog value (% of Vcc-Vref). The signal shall reflect the raw unfiltered sensor value.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_AccPed2Ok": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcEc_Qf_vVeh14", + "name": "yVcDi_B_AccPed2Ok", + "configs": [["all"], ["Vc_Pvc_Hw_B_Bosch"]], + "description": "No electrical fault detected on AccPed2 sensor, signal recieved correctly.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_WatchdogQuery": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcEc_Qf_vVeh10", + "name": "sVcEc_D_WatchdogQuery", + "configs": [["all"]], + "description": "EMS watchdog query to ECM.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 127, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDepExt_D_Counter": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcEc_Qf_vVeh12", + "name": "sVcDepExt_D_Counter", + "configs": [["all"]], + "description": "Watchdog counter", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_SchedulingCounter": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/yVcDi_B_ReversedGear9", + "name": "sVcEc_D_SchedulingCounter", + "configs": [["all"]], + "description": "Counter to enable monitoring of scheduling", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDi_X_AccPed1Raw": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcEc_Qf_vVeh5", + "name": "sVcDi_X_AccPed1Raw", + "configs": [["all"]], + "description": "Accelerator pedal raw signal acquired via PWM (Duty cycle of PWM input of Accelerator Pedal Position, unfiltered)", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_AccPed1Ok": { + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/sVcEc_Qf_vVeh24", + "name": "yVcDi_B_AccPed1Ok", + "configs": [["all"]], + "description": "No electrical fault detected on AccPed1 sensor, signal recieved correctly.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": ["Vc_Pvc_Hw_B_Bosch"], + "local_vars": { + "rVcScBAccPed_X_AccPedOvrdVal": { + "type": "Float32", + "unit": "%", + "description": "AccPedal value used for override determination.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_DISP", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/Min2", + "configs": ["all"], + "width": 1 + }, + "xVcScBAccPed_B_IntegrityCheck": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_B/CVC_DISP", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/F000_SchedulingMon/clpOkAND", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScBAccPed_X_AccPedOvrdRawAbort": { + "type": "Float32", + "unit": "%", + "description": "Minimum AccPedal sensor value to reset DecelOvrdnByDrvr", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/X_AccPedOvrdRawAbort", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_X_AccPedOvrdRawAbortLow": { + "type": "Float32", + "unit": "%", + "description": "Minimum AccPedal sensor value to reset DecelOvrdnByDrvr after debounce t_AccPedOvrdTrigLow", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/X_AccPedOvrdRawAbortLow", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_X_AccPedOvrdRawTrig": { + "type": "Float32", + "unit": "%", + "description": "Minimum AccPedal sensor value to set DecelOvrdnByDrvr", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/X_AccPedOvrdRawTrig", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_X_AccPedOvrdRawTrigLow": { + "type": "Float32", + "unit": "%", + "description": "Minimum AccPedal sensor value to set DecelOvrdnByDrvr after debounce t_AccPedOvrdTrigLow", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/X_AccPedOvrdRawTrigLow", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_t_AccPedNFullyPsdMinTime": { + "type": "Float32", + "unit": "s", + "description": "Minimum time for accelerator pedal not fully pressed. Once triggered, not fully pressed always lasts longer than this.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/t_AccPedNFullyPsdMinTime", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_t_AccPedOvrdMinTime": { + "type": "Float32", + "unit": "s", + "description": "Minimum time for accelerator pedal override. Once triggered, override always lasts longer than this.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/t_AccPedOvrdMinTime", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_t_AccPedOvrdTrigLow": { + "type": "Float32", + "unit": "s", + "description": "Minimum time to require max AccPedal sensor value to be above X_AccPedOvrdRawTrigLow to set DecelOvrdnByDrvr", + "max": 20, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/1_ASILB/13_AccPedOverrideofBrake/t_AccPedOvrdTrigLow", + "configs": ["all"], + "width": 1 + }, + "cVcScBAccPed_D_ExpectedCounter": { + "type": "UInt8", + "unit": "-", + "description": "Expected value of the counter when this model executes", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBAccPed/VcScBAccPed/Subsystem/VcScBAccPed/VcScBAccPed/F000_SchedulingMon/D_ExpectedCounter", + "configs": ["all"], + "width": 1 + } + } + }, + "VcScAVehMtn": { + "version": {}, + "integrity_level": "A", + "outports": { + "yVcScAVehMtn_B_VehSpdFwd": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos1", + "name": "yVcScAVehMtn_B_VehSpdFwd", + "configs": ["all"], + "description": "Vehicle speed is in forward direction", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdRvs": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos2", + "name": "yVcScAVehMtn_B_VehSpdRvs", + "configs": ["all"], + "description": "Vehicle speed is in reverse direction", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdStill": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos3", + "name": "yVcScAVehMtn_B_VehSpdStill", + "configs": ["all"], + "description": "Vehicle is standing still", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgt": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos4", + "name": "sVcScAVehMtn_v_VehSpdLgt", + "configs": ["all"], + "description": "Vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtMaxQM": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos9", + "name": "sVcScAVehMtn_v_VehSpdLgtMaxQM", + "configs": ["all"], + "description": "Maximum vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtMinQM": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos10", + "name": "sVcScAVehMtn_v_VehSpdLgtMinQM", + "configs": ["all"], + "description": "Minimum vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdLgtOkQM": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_X_AccPedalPos11", + "name": "yVcScAVehMtn_B_VehSpdLgtOkQM", + "configs": ["all"], + "description": "Vehicle Speed Ok", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehicleSpeedOverGround": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_1", + "name": "sVcScAVehMtn_v_VehicleSpeedOverGround", + "configs": ["all"], + "description": "Vehicle speed over ground", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdDirFwd": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScAVehMtn_rt_DrDirection6", + "name": "yVcScAVehMtn_B_VehSpdDirFwd", + "configs": ["all"], + "description": "Vehicle speed direction forward", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdDirRvs": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_20", + "name": "yVcScAVehMtn_B_VehSpdDirRvs", + "configs": ["all"], + "description": "Vehicle speed direction reverse", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdLgtOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_22", + "name": "yVcScAVehMtn_B_VehSpdLgtOk", + "configs": ["all"], + "description": "Vehicle speed over ground fulfills ASIL C", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtMin": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_23", + "name": "sVcScAVehMtn_v_VehSpdLgtMin", + "configs": ["all"], + "description": "Minimum estimated vehicle speed over ground", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtMax": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_24", + "name": "sVcScAVehMtn_v_VehSpdLgtMax", + "configs": ["all"], + "description": "Maximum estimated vehicle speed over ground", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_VehSpdDirStill": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_31", + "name": "yVcScAVehMtn_B_VehSpdDirStill", + "configs": ["all"], + "description": "Vehicle at standstill ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_a_ALgt": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/yVcScAVehMtn_D_EstGear4", + "name": "sVcScAVehMtn_a_ALgt", + "configs": ["all"], + "description": "Vehicle acceleration over ground", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_a_VehAccLgtMax": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/yVcScAVehMtn_D_EstGear14", + "name": "sVcScAVehMtn_a_VehAccLgtMax", + "configs": ["all"], + "description": "Vehicle acceleration. Maximum acceleration at signal fault.", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -20, + "max": 20, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_a_VehAccLgtMin": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_62", + "name": "sVcScAVehMtn_a_VehAccLgtMin", + "configs": ["all"], + "description": "Vehicle acceleration. Mininum acceleration at signal fault.", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -20, + "max": 20, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScAVehMtn_B_nFrntWhlOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScBTqExt_Tq_PtTqSoftMaxAllwd1", + "name": "yVcScAVehMtn_B_nFrntWhlOk", + "configs": ["all"], + "description": "Front wheel speed OK", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_n_FrntWhl": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScBTqExt_Tq_PtTqSoftMaxAllwd2", + "name": "sVcScAVehMtn_n_FrntWhl", + "configs": ["all"], + "description": "TBD", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_FrntWhl": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcScBTqExt_Tq_PtTqSoftMaxAllwd6", + "name": "sVcScAVehMtn_v_FrntWhl", + "configs": ["all"], + "description": "Mean front wheel speed ", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtForOBD": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_2", + "name": "sVcScAVehMtn_v_VehSpdLgtForOBD", + "configs": ["all"], + "description": "Vehicle speed for OBD use in EMS functions", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 500, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtForPID0D": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/TLOutport_3", + "name": "sVcScAVehMtn_v_VehSpdLgtForPID0D", + "configs": ["all"], + "description": "Vehicle speed for PID 0D", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcVdm_D_VehMtnSt": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng1", + "name": "sVcVdm_D_VehMtnSt", + "configs": [["all"]], + "description": "Vehicle motion direction (Back, stand still, forward, Unknown)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_VehMtnStOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng2", + "name": "yVcVdm_B_VehMtnStOk", + "configs": [["all"]], + "description": "Ok flag for vehicle movement status.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_v_VehSpdLgt": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng3", + "name": "sVcVdm_v_VehSpdLgt", + "configs": [["all"]], + "description": "Vehicle speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -300, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_VehSpdLgtOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng4", + "name": "yVcVdm_B_VehSpdLgtOk", + "configs": [["all"]], + "description": "Ok flag for vehicle speed over ground.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_v_WhlSpdCircumlFrntRi": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng5", + "name": "sVcVdm_v_WhlSpdCircumlFrntRi", + "configs": [["all"]], + "description": "Front right wheel rotational speed", + "type": "Float32", + "unit": "m/s", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 125, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_v_WhlSpdCircumlFrntLe": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng6", + "name": "sVcVdm_v_WhlSpdCircumlFrntLe", + "configs": [["all"]], + "description": "Front left wheel rotational speed", + "type": "Float32", + "unit": "m/s", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 125, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_WhlSpdCircumlFrntOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng7", + "name": "yVcVdm_B_WhlSpdCircumlFrntOk", + "configs": [["all"]], + "description": "Ok flag for front wheel speeds", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_n_TrsmNRecOutp": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng8", + "name": "sVcTcm_n_TrsmNRecOutp", + "configs": [["all"]], + "description": "Transmission output speed", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16383, + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmNRecOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng9", + "name": "yVcTcm_B_TrsmNRecOk", + "configs": [["all"]], + "description": "Ok flag for CAN signal group TrsmNRec stating that TrsmNRec was received correctly within a calibratable time and E2E check was verified OK", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmm_D_CarModSts1": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng10", + "name": "sVcVmm_D_CarModSts1", + "configs": [["all"]], + "description": "Car mode from vechicle mode management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_KL15": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcEc_n_Eng11", + "name": "yVcEc_B_KL15", + "configs": [["all"], ["Vc_Pvc_Hw_B_Bosch"]], + "description": "The hardwired signal KL15 from CEM to ECM (0 = KL15 not active, 1 = KL15 active). The signal shall be debonced.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_v_VehSpdLgtSafe": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox19", + "name": "sVcVdm_v_VehSpdLgtSafe", + "configs": [["all"]], + "description": "Vehicle speed over ground for ASILB concept", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_WhlSpdCalcALgt": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/yVcEc_B_ICETorqueFault1", + "name": "sVcVdm_a_WhlSpdCalcALgt", + "configs": [["all"]], + "description": "Acceleration based on arbitrated wheel velocities.", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -12, + "max": 12, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgtStdFromWhlSpd": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/yVcEc_B_ICETorqueFault2", + "name": "sVcVdm_a_ALgtStdFromWhlSpd", + "configs": [["all"]], + "description": "Vehicle acceleration over ground", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_WhlSpdCalcALgtOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/yVcEc_B_ICETorqueFault3", + "name": "yVcVdm_B_WhlSpdCalcALgtOk", + "configs": [["all"]], + "description": "Signal Ok flag for WhlSpdCalcALgt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_ALgtStdFromWhlSpdOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/yVcEc_B_ICETorqueFault4", + "name": "yVcVdm_B_ALgtStdFromWhlSpdOk", + "configs": [["all"]], + "description": "Ok flag for vehicle acceleration over ground.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScBCoord_L_WheelRad": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox1", + "name": "sVcScBCoord_L_WheelRad", + "configs": [["all"]], + "description": "Wheel radius", + "type": "Float32", + "unit": "m", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_v_WhlSpdCircumlReRi": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox2", + "name": "sVcVdm_v_WhlSpdCircumlReRi", + "configs": [["all"]], + "description": "Rear right wheel rotational speed", + "type": "Float32", + "unit": "m/s", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 125, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_v_WhlSpdCircumlReLe": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox4", + "name": "sVcVdm_v_WhlSpdCircumlReLe", + "configs": [["all"]], + "description": "Rear left wheel rotational speed", + "type": "Float32", + "unit": "m/s", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 125, + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_n_WhlMotSysFrntSpdAct": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox5", + "name": "sVcIhfa_n_WhlMotSysFrntSpdAct", + "configs": [["all"]], + "description": "Actual motor speed referred to front wheel axle (i.e. motor axle speed divided by motor transmission ratio). Positive speed corresponds to vehicle moving in positive direction.", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -1638.4, + "max": 1638.3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcIhfa_B_WhlMotSysFrntSpdActOk": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox6", + "name": "yVcIhfa_B_WhlMotSysFrntSpdActOk", + "configs": [["all"]], + "description": "Ok flag for timeout check on the update bit WhlMotSysFrntSpdAct_UB", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_L_TireCircm": { + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/sVcGp_D_GearBox7", + "name": "sVcScIn_L_TireCircm", + "configs": [["all"]], + "description": "Wheel circumference", + "type": "Float32", + "unit": "m", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": ["Vc_Pvc_Hw_B_Bosch"], + "local_vars": { + "xVcScAVehMtn_B_vFrntWhlOk": { + "type": "Bool", + "unit": "", + "description": "Front wheel speed OK", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1100_FrontWheelSpeed/LogicalOperator2", + "configs": ["all"], + "width": 1 + }, + "xVcScAVehMtn_B_VehSpdBackupOk": { + "type": "Bool", + "unit": "-", + "description": "Backup signal available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1100_FrontWheelSpeed/LogicalSwitch6/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_WhlMotSysFrntSpdAct": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed according to IHFA", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1100_FrontWheelSpeed/Product3", + "configs": ["all"], + "width": 1 + }, + "xVcScAVehMtn_B_VehSpdLgtOk": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/LogicalOperator4", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_VehSpdLgt": { + "type": "Float32", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_VehSpdLgtForPID0D": { + "type": "UInt8", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/LogicalSwitch10/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_VehSpdLgtMinQM": { + "type": "Float32", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_VehSpdLgtMaxQM": { + "type": "Float32", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/LogicalSwitch8/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_VehSpdLgtForOBD": { + "type": "Float32", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/LogicalSwitch9/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScAVehMtn_B_VehSpdDirStill": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2100_Direction/LogicalOperator10", + "configs": ["all"], + "width": 1 + }, + "xVcScAVehMtn_B_VehSpdDirFwd": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2100_Direction/LogicalOperator6", + "configs": ["all"], + "width": 1 + }, + "xVcScAVehMtn_B_VehSpdDirRvs": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2100_Direction/LogicalOperator8", + "configs": ["all"], + "width": 1 + }, + "xVcScAVehMtn_B_nFrntWhlOk": { + "type": "Bool", + "unit": "", + "description": "Front wheel speed OK", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2200_FrontWheelSpeed/LogicalOperator2", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_FrntWhl": { + "type": "Float32", + "unit": "rpm", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2200_FrontWheelSpeed/Product3", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_v_VehSpdLgtMin": { + "type": "Float32", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2400_VehicleSpeedOverGroundMaxMin/LogicalSwitch4/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_a_ALgt": { + "type": "Float32", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/FirstOrderFilter1/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_tc_AlgtFall": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for falling vehicle acceleration", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/tc_AlgtFall/tc_AlgtFall", + "configs": ["all"], + "width": 1 + }, + "rVcScAVehMtn_tc_AlgtRise": { + "type": "Float32", + "unit": "s", + "description": "Acceleration rise rate filter constant", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/tc_AlgtRise/tc_AlgtRise", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScAVehMtn_B_FrntWhlUseTcmBackup": { + "type": "Bool", + "unit": "-", + "description": "Use vehicle speed from TCM as backup, if not vehicle speed from IHFA will be used.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1100_FrontWheelSpeed/B_FrntWhlUseTcmBackup", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_B_IgnoreKl15Cond": { + "type": "Bool", + "unit": "-", + "description": "Ignore Kl15 enable condition when allowing transmission vehicle speed to be used.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1100_FrontWheelSpeed/B_IgnoreKl15Cond", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_v_TrsmVehSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Transmission vehicle speed above this limit is considered as a faulty vehicle speed.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1100_FrontWheelSpeed/v_TrsmVehSpdLim", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_B_UseDynoMode": { + "type": "Bool", + "unit": "", + "description": "Switch to front wheel speed, if *Dyno Mode is requested.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/B_UseDynoMode", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_B_UseDynoModeRWD": { + "type": "Bool", + "unit": "-", + "description": "Switch to rear wheel speed, if *Dyno Mode is requested. (If AWD can use = False)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/B_UseDynoModeRWD", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_D_DynoMode": { + "type": "UInt8", + "unit": "-", + "description": "Value of CarModSts1 indicating Dynomode.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/D_DynoMode", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_a_ConstWorstcaseAccVSR": { + "type": "Float32", + "unit": "m/s2", + "description": "When no velocity signal, use this worstcase acceleration constant", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2400_VehicleSpeedOverGroundMaxMin/a_ConstWorstcaseAccVSR", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_a_ConstWorstcaseDecVSR": { + "type": "Float32", + "unit": "m/s2", + "description": "When no velocity signal, use this worstcase deceleration constant. (should be negative)", + "max": 0, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2400_VehicleSpeedOverGroundMaxMin/a_ConstWorstcaseDecVSR", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_v_MaxEstSpeedVSR": { + "type": "Float32", + "unit": "km/h", + "description": "Limit the estimated speed.", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2400_VehicleSpeedOverGroundMaxMin/v_MaxEstSpeedVSR", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_v_VehSpdForOBDDflt": { + "type": "Float32", + "unit": "km/h", + "description": "Backup vehicle speed for sVcScIn_v_VehSpdLgtForIBD", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/1000_VehicleAndWhlSpeedQM/1200_VehicelSpeedMaxMin/v_VehSpdForOBDDflt", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_v_VehMtnStHoldMin": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit below which VehSpdDirection defaults to NONE in case of lost comm.", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2100_Direction/v_VehMtnStHoldMin", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_rt_FinalDriveEIGAT": { + "type": "Float32", + "unit": "-", + "description": "Final drive ratio, AT", + "max": 1000, + "min": 0.001, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2200_FrontWheelSpeed/rt_FinalDriveEIGAT", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_t_VspdOvrGndFault": { + "type": "Float32", + "unit": "s", + "description": "Time delay to set speed fault", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2300_VehichleSpeedOverGroundReplacement/t_VspdOvrGndFault", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_B_UseWhlSpdCalcALgt": { + "type": "Bool", + "unit": "-", + "description": "Use WhlSpdCalcALgt signal instead of AlgtStdFromWhlSpd", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/B_UseWhlSpdCalcALgt", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_a_VehAccLgtMax": { + "type": "Float32", + "unit": "m/s2", + "description": "Max acceleration of vehicle", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/a_VehAccLgtMax", + "configs": ["all"], + "width": 1 + }, + "cVcScAVehMtn_a_VehAccLgtMin": { + "type": "Float32", + "unit": "m/s2", + "description": "Min acceleration of vehicle", + "max": 0, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/a_VehAccLgtMin", + "configs": ["all"], + "width": 1 + }, + "tVcScAVehMtn_tc_AlgtFall_x": { + "type": "Float32", + "unit": "m/s2", + "description": "Acceleration", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/tc_AlgtFall/tc_AlgtFall_x", + "configs": ["all"], + "width": [1, 6] + }, + "tVcScAVehMtn_tc_AlgtRise_x": { + "type": "Float32", + "unit": "m/s2", + "description": "Acceleration", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/tc_AlgtRise/tc_AlgtRise_x", + "configs": ["all"], + "width": [1, 6] + }, + "tVcScAVehMtn_tc_AlgtFall": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for falling vehicle acceleration", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/tc_AlgtFall/tc_AlgtFall", + "configs": ["all"], + "width": [1, 6] + }, + "tVcScAVehMtn_tc_AlgtRise": { + "type": "Float32", + "unit": "s", + "description": "Acceleration rise rate filter constant", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScAVehMtn/VcScAVehMtn/Subsystem/VcScAVehMtn/VcScAVehMtn/2000_VehicleAndWhlSpeedA/2500_VehicleAcceleration/tc_AlgtRise/tc_AlgtRise", + "configs": ["all"], + "width": [1, 6] + } + } + }, + "VcScACluPed__denso": { + "version": {}, + "integrity_level": "A", + "outports": { + "yVcScACluPed_B_ClPedAnaOk": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/TLOutport_1", + "name": "yVcScACluPed_B_ClPedAnaOk", + "configs": ["all"], + "description": "Diagnosis indicate that clutch pedal analogue sensor is ok", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_ClPedPressed": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcScDep_rt_DrDirection1", + "name": "yVcScACluPed_B_ClPedPressed", + "configs": ["all"], + "description": "Clutch pedal fully pressed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_FootOnClutchPedal": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/TLOutport_2", + "name": "yVcScACluPed_B_FootOnClutchPedal", + "configs": ["all"], + "description": "Foot on clutch pedal", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_FootOffClutchPedal": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_D_EstGear1", + "name": "yVcScACluPed_B_FootOffClutchPedal", + "configs": ["all"], + "description": "Clutch pedal not pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_FootOnClutchPedalASILB": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_B_ClFtOnPed1", + "name": "yVcScACluPed_B_FootOnClutchPedalASILB", + "configs": ["all"], + "description": "Clutch pedal indicate pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_ClutchRelease": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_B_ClFtOffPed1", + "name": "yVcScACluPed_B_ClutchRelease", + "configs": ["all"], + "description": "Clutch pedal currently released", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScACluPed_X_ClutchPedalPos": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_B_NeutralMT2", + "name": "sVcScACluPed_X_ClutchPedalPos", + "configs": ["all"], + "description": "Adapted clutch pedal position.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_ClutchPedalDepressed": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_B_NeutralMT3", + "name": "yVcScACluPed_B_ClutchPedalDepressed", + "configs": ["all"], + "description": "Clutch pedal fully pressed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScACluPed_X_ClPedAnaAdapted": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_B_NeutralMT5", + "name": "sVcScACluPed_X_ClPedAnaAdapted", + "configs": ["all"], + "description": "Adapted clutch pedal analogue sensor", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_CluPedlPsd": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_D_EstGear2", + "name": "yVcScACluPed_B_CluPedlPsd", + "configs": ["all"], + "description": "Clutch pedal pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScACluPed_B_CluPedlPsdSts": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcScDep_D_EstGear3", + "name": "yVcScACluPed_B_CluPedlPsdSts", + "configs": ["all"], + "description": "Vehicle at standstill", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "yVcScBCoord_B_MTVehicle": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcDi_B_ReversedGear1", + "name": "yVcScBCoord_B_MTVehicle", + "configs": [["all"]], + "description": "Conventional AT gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_ClPed75sw": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcEc_n_Eng3", + "name": "yVcDi_B_ClPed75sw", + "configs": [["all"]], + "description": "Raw signal from 75% clutch switch.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDi_X_ClPedRaw": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcEc_n_Eng1", + "name": "sVcDi_X_ClPedRaw", + "configs": [["all"]], + "description": "Raw unfiltered value from linear clutch pedal sensor. Only valid for Y555 with Clutch pedal analogue sensor HW to ECM.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScATrsm_B_EstInGear": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcDi_B_ReversedGear3", + "name": "yVcScATrsm_B_EstInGear", + "configs": [["all"]], + "description": "Gear is engaged, calculated based on gear ratio", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TesterClear": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcEc_n_Eng2", + "name": "yVcEc_B_TesterClear", + "configs": [["all"]], + "description": "Fault code memory reset", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScATrsm_B_Gearshift": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/yVcDi_B_ReversedGear5", + "name": "yVcScATrsm_B_Gearshift", + "configs": [["all"]], + "description": "Gearshift detected by looking at gear ratio", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_ClPedRawOk": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcGp_D_GearBox4", + "name": "yVcDi_B_ClPedRawOk", + "configs": [["all"]], + "description": "Clutch pedal analog position sensor signal valid.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StarterOnReq": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcEc_Qf_vVeh1", + "name": "yVcPpmRc_B_StarterOnReq", + "configs": [["all"]], + "description": "Signal used to delay the start while battery relays are switching. (Other start conditions could also be included in this signal.) The signal is treated as one off all other start motor release conditions.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_StartMotor": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcGp_D_GearBox5", + "name": "yVcEc_B_StartMotor", + "configs": [["all"]], + "description": "Current status of the Start motor 1= running,0 = not running", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_U_Sys": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/sVcGp_D_GearBox6", + "name": "sVcEc_U_Sys", + "configs": [["all"]], + "description": "System voltage", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 50, + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": { + "VcEvClPedSwMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcEvClPedPosMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcEvClPedPosPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcEvClPedSwPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "IUMPR": {}, + "FIDs": {}, + "Ranking": { + "VcRvClPedSwMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcRvClPedPosMonPerf": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcRvClPedPosPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + }, + "VcRvClPedSwPlausMon": { + "API_blk": [{ + "path": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "TstId": {} + }, + "dids": {}, + "nvm": { + "sVcScDep_D_FaultCounterClPedAna": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/sVcScDep_D_FaultCounterClPedAna/DataStore", + "name": "sVcScDep_D_FaultCounterClPedAna", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_D_TimerClPedAna": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/sVcScDep_D_TimerClPedAna/DataStore", + "name": "sVcScDep_D_TimerClPedAna", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_D_FCClPed75swST": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1430_Cl75swSTFaultCounter/sVcScDep_D_FCClPed75swST/DataStore", + "name": "sVcScDep_D_FCClPed75swST", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_D_TimerClPed75sw": { + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/sVcScDep_D_TimerClPed75sw/DataStore", + "name": "sVcScDep_D_TimerClPed75sw", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + } + }, + "pre_procs": [], + "local_vars": { + "xVcScACluPed_B_ClPedAnaNotPlaus": { + "type": "Bool", + "unit": "-", + "description": "Derivative of analogue clutch pedal sensor value in unplausible.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1200_ClPedAna/RelationalOperator3", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_t_ClPedPressAtTrq": { + "type": "Float32", + "unit": "s", + "description": "Time that clutch pedal is indicating pressed while driving with torque", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/CounterResetEnable2/MinMax", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_FaultCondClPedAna": { + "type": "Bool", + "unit": "", + "description": "Fault condition", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/LogicalOperator2", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_Z_ClPedAnaPressFaultCondFrac": { + "type": "Float32", + "unit": "", + "description": "Value between 0 and 1 indicating how close clutch pedal analogue sensor stuck pressed is to detect a fault condition.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/Product1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_HealCondClPedAna": { + "type": "Bool", + "unit": "", + "description": "Healing condition for clutch pedal analogue sensor fulfilled", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1320_HealCondClPedAna/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPed75swTimerFault": { + "type": "Bool", + "unit": "", + "description": "Fault detected on clutch pedal 75% switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPed75swFaulty": { + "type": "Bool", + "unit": "-", + "description": "Fault detected on clutch pedal 75% switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPed75swOk": { + "type": "Bool", + "unit": "-", + "description": "Clutch 75% switch stuck true healed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPed75swTimerOk": { + "type": "Bool", + "unit": "-", + "description": "Fault detected on clutch pedal 75% switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/LogicalSwitch4/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_CluPedlPsdSts": { + "type": "Bool", + "unit": "", + "description": "CluPedlPsdSts", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_HoldClPressed": { + "type": "Bool", + "unit": "-", + "description": "Hold lowest clutch value for comparison in creating clutch release", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/LogicalOperator11", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedSensPressed": { + "type": "Bool", + "unit": "", + "description": "FootOnClutchPedalASILB", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/LogicalOperator5", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClFtOnPedPressed": { + "type": "Bool", + "unit": "-", + "description": "TDB", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/SR_FF/LogOp3", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaOk": { + "type": "Bool", + "unit": "", + "description": "Analogue signal and timer monitor test passed indicating that the ana-sensor is Ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedPosTestPassed": { + "type": "Bool", + "unit": "-", + "description": "Test passed for clutch pedal analogue sensor", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedPosTestFail": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/LogicalSwitch11/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaTestFailedNoDb": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/RelationalOperator16", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaTestPassedNoDb": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/RelationalOperator17", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_D_FaultCounterClPedAna": { + "type": "Int16", + "unit": "-", + "description": "Fault counter", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClAnaFaultDetected": { + "type": "Bool", + "unit": "-", + "description": "Clutch analog sensor fault detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1340_FaultPossibleClPedAna/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_D_TimerFaultLimClAna": { + "type": "UInt16", + "unit": "-", + "description": "TBD", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/Gain", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaTimerOkPre": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_t_ClPedAnaInnerCircle": { + "type": "Float32", + "unit": "s", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/LogicalSwitch5/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_D_ClPedAnaTimer": { + "type": "UInt16", + "unit": "-", + "description": "TBD", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/LogicalSwitch7/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaTimerFaultPre": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/RelationalOperator", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaTimerFault": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPedAnaTimerOk": { + "type": "Bool", + "unit": "", + "description": "Test passed for clutch pedal analogue sensor", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_FaultCondCl75swDetected": { + "type": "Bool", + "unit": "-", + "description": "Fault condition detected for 75% clutch switch", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_X_ClPedAnaAdapted": { + "type": "Float32", + "unit": "%", + "description": "ClPedAnaAdapted", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/Saturation/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_FaultCondCl75swST": { + "type": "Bool", + "unit": "", + "description": "Fault condition for 75% clutch pedal switch stuck true", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/RelationalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClutchPressed": { + "type": "Bool", + "unit": "", + "description": "Fault condition for 75% clutch pedal switch stuck true", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/RelationalOperator2", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_Cl75swFaultDetectPossible": { + "type": "Bool", + "unit": "", + "description": "Fault condition for 75% clutch pedal switch stuck true", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/RelationalOperator3", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_HealCondCl75swST": { + "type": "Bool", + "unit": "", + "description": "Healing condition for 25% clutch pedal switch stuck true", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1420_Cl75swSTHeal/RelationalOperator2", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_TestFailedCl75swSTNoDb": { + "type": "Bool", + "unit": "", + "description": "Clutch 75sw monitor error limit has been exceeded", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1430_Cl75swSTFaultCounter/RelationalOperator16", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_TestPassedCl75swSTNoDb": { + "type": "Bool", + "unit": "", + "description": "Clutch 75sw monitor error limit has not been exceeded", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1430_Cl75swSTFaultCounter/RelationalOperator17", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_D_FaultCounterCl75swST": { + "type": "UInt16", + "unit": "-", + "description": "Fault counter", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1430_Cl75swSTFaultCounter/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPed75swTimerOkPre": { + "type": "Bool", + "unit": "", + "description": "Pre SR-latch Timer ok signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_t_ClPed75swInnerCircle": { + "type": "Float32", + "unit": "s", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/LogicalSwitch5/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScACluPed_D_ClPed75swTimer": { + "type": "UInt16", + "unit": "-", + "description": "TBD", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/LogicalSwitch7/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScACluPed_B_ClPed75swTimerFaultPre": { + "type": "Bool", + "unit": "", + "description": "Pre SR-latch Timer fault signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/RelationalOperator", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScACluPed_rt_ClPedAnaFtOnPed": { + "type": "Float32", + "unit": "-", + "description": "Maximum derivative of analogue clutch pedal to indicate pressed pedal", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1200_ClPedAna/rt_ClPedAnaFtOnPed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaStuckPressed": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal analogue sensor value that indicates pressed pedal, for detecting stuck true condition.", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/X_ClPedAnaStuckPressed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaStuckReleased": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal analogue sensor value that indicates released pedal, for detecting stuck condition.", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/X_ClPedAnaStuckReleased", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_AfterGshftClPedAnaRls": { + "type": "Float32", + "unit": "s", + "description": "Time after gearshift a clutch press need to be detected not to increase fault counter of clutch pedal analogue sensor stuck released", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/t_AfterGshftClPedAnaRls", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_BeforeGshftClPedAnaRls": { + "type": "Float32", + "unit": "s", + "description": "Time before gearshift a clutch press need to be detected not to increase fault counter of clutch analogue sensror stuck released", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/t_BeforeGshftClPedAnaRls", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_FaultCondClPedAnaPress": { + "type": "Float32", + "unit": "s", + "description": "Time that the clutch pedal analogue sensor has to be engaged while being in gear to detect a fault", + "max": 3600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/t_FaultCondClPedAnaPress", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ResetCondClPedAnaPress": { + "type": "Float32", + "unit": "s", + "description": "Time to reset fault timer for clutch pedal analogue sensor stuck pressed", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1310_FaultCondClPedAna/t_ResetCondClPedAnaPress", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaPressedHeal": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal analogue sensor value that indicates pressed pedal, for healing fault condition", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1320_HealCondClPedAna/X_ClPedAnaPressedHeal", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaReleasedHeal": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal analogue sensor value that indicates released pedal, for healing fault condition", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1320_HealCondClPedAna/X_ClPedAnaReleasedHeal", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedAnaPressedHeal": { + "type": "Float32", + "unit": "s", + "description": "time that clutch pedal has to indicate pressed to enable healing of fault condition.", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1320_HealCondClPedAna/t_ClPedAnaPressedHeal", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedAnaReleasedHeal": { + "type": "Float32", + "unit": "s", + "description": "time that clutch pedal has to indicate released to enable healing of fault condition.", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1320_HealCondClPedAna/t_ClPedAnaReleasedHeal", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedPosTestFail_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/B_ClPedPosTestFail_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedPosTestFail_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/B_ClPedPosTestFail_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedPosTestPassed_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/B_ClPedPosTestPassed_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedPosTestPassed_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1330_FaultCounterClPedAna/B_ClPedPosTestPassed_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClutchFallDelay": { + "type": "Float32", + "unit": "s", + "description": "Calibratable fall delay for when a gear shift has happend", + "max": 6000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1340_FaultPossibleClPedAna/t_ClutchFallDelay", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClutchHealFaultTimer": { + "type": "Float32", + "unit": "s", + "description": "Timer value for detection of a possible fault", + "max": "-", + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1340_FaultPossibleClPedAna/t_ClutchHealFaultTimer", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_TimerUntilFaultSet": { + "type": "UInt16", + "unit": "-", + "description": "Time until the core", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/D_TimerUntilFaultSet", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedAnaCounterSet": { + "type": "Float32", + "unit": "s", + "description": "Numbers of samples to gather in a set before counting up 1 and saving it to NVM in ClPedAna-logic", + "max": "-", + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1350_TimerClPedAna/t_ClPedAnaCounterSet", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_RcfWrpIDClPedPosMonPerf": { + "type": "UInt8", + "unit": "-", + "description": "Reconfiguration Wrap ID", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1360_TimerCoreCallClAna/D_RcfWrpIDClPedPosMonPerf", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_RcfWrpIDClPedPosPlausMon": { + "type": "UInt8", + "unit": "-", + "description": "Reconfiguration Wrap ID", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/1370_FaultCoreCallClAna/D_RcfWrpIDClPedPosPlausMon", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedAnaTimerFault_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/B_ClPedAnaTimerFault_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedAnaTimerFault_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/B_ClPedAnaTimerFault_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedAnaTimerOk_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/B_ClPedAnaTimerOk_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedAnaTimerOk_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/B_ClPedAnaTimerOk_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_CounterHighLimClPedAna": { + "type": "Int16", + "unit": "-", + "description": "Upper limit for fault counter for clutch pedal analogue sensor stuck in range.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/D_CounterHighLimClPedAna", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_CounterInitClPedAna": { + "type": "UInt16", + "unit": "-", + "description": "TBD", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/D_CounterInitClPedAna", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_ErrLimClPedAna": { + "type": "Int16", + "unit": "-", + "description": "Fault limit for fault counter for clutch pedal analogue sensor stuck in range.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/D_ErrLimClPedAna", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_FaultCondStepClPedAna": { + "type": "Int16", + "unit": "-", + "description": "Step size for fault condition for clutch pedal analogue sensor stuck in range.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/D_FaultCondStepClPedAna", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_HealCondStepClPedAna": { + "type": "Int16", + "unit": "-", + "description": "Step size for healing clutch pedal analogue sensor stuck in range.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/D_HealCondStepClPedAna", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_OkLimClPedAna": { + "type": "Int16", + "unit": "-", + "description": "Ok limit for fault counter for clutch pedal analogue sensor stuck in range.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1300_ClPedAnaDiag/D_OkLimClPedAna", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_FaultCondswStuck": { + "type": "Float32", + "unit": "%", + "description": "Calibration value for the switch stuck limit", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/X_FaultCondswStuck", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_FaultCondCl75swST": { + "type": "Float32", + "unit": "s", + "description": "Time that the clutch pedal 75% switch has to be engaged while being in gear to detect a fault", + "max": 3600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/t_FaultCondCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ResetCondCl75swST": { + "type": "Float32", + "unit": "s", + "description": "Time to reset fault timer for clutch pedal 75% stuck true", + "max": 600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1410_Cl75swSTFault/t_ResetCondCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_BetweenHCCl75swST": { + "type": "Float32", + "unit": "s", + "description": "Minimum time between heal conditions for clutch pedal 75% stuck true diagnosis", + "max": 3600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1420_Cl75swSTHeal/t_BetweenHCCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_HealCondCl75swST": { + "type": "Float32", + "unit": "s", + "description": "Time that the clutch pedal 75% switch has to be false to heal stuck true diagnosis", + "max": 3600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1420_Cl75swSTHeal/t_HealCondCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_RcfWrpIDClPedSwPlausMon": { + "type": "UInt8", + "unit": "-", + "description": "Reconfiguration Wrap ID", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1440_Cl75swSTFaultCoreCall/D_RcfWrpIDClPedSwPlausMon", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_TimerUntilFaultSetCl75sw": { + "type": "UInt16", + "unit": "-", + "description": "Time until the core", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/D_TimerUntilFaultSetCl75sw", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPed75swCounterSet": { + "type": "Float32", + "unit": "s", + "description": "Time before counting up 1 and saving it to NVM in ClPedAna-logic", + "max": "-", + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1450_Cl75swSTTimer/t_ClPed75swCounterSet", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_RcfWrpIDClPedSwMonPerf": { + "type": "UInt8", + "unit": "-", + "description": "Reconfiguration Wrap ID", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/1460_Cl75swSTTimerCoreCall/D_RcfWrpIDClPedSwMonPerf", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTestFail_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTestFail_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTestFail_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTestFail_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTestPassed_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTestPassed_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTestPassed_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTestPassed_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTimerFault_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTimerFault_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTimerFault_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTimerFault_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTimerOk_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTimerOk_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPed75swTimerOk_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/B_ClPed75swTimerOk_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_CounterHighLimCl75swST": { + "type": "Int16", + "unit": "-", + "description": "Upper limit for fault counter for clutch pedal 75% switch stuck true", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/D_CounterHighLimCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_CounterInitCl75swST": { + "type": "UInt16", + "unit": "-", + "description": "TBD", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/D_CounterInitCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_ErrLimCl75swST": { + "type": "Int16", + "unit": "-", + "description": "Fault limit for fault counter for clutch pedal 75%sw stuck true", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/D_ErrLimCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_FaultCondStepCl75swST": { + "type": "Int16", + "unit": "-", + "description": "Step size for fault condition for 75% clutch pedal switch stuck true. (Positive)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/D_FaultCondStepCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_HealCondStepCl75swST": { + "type": "Int16", + "unit": "-", + "description": "Step size for healing Stuck true of 75% clutch pedal switch", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/D_HealCondStepCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_D_OkLimCl75swST": { + "type": "Int16", + "unit": "-", + "description": "Ok limit for fault counter for clutch pedal 75%sw stuck true", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1400_ClPed75swDiag/D_OkLimCl75swST", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_UseClPedAdapt": { + "type": "Bool", + "unit": "%", + "description": "Use adapted clutch pedal sensor to determine foot on / off clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/B_UseClPedAdapt", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaDisengaged": { + "type": "Float32", + "unit": "%", + "description": "Maximum value of analogue clutch pedal to indicate released pedal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/X_ClPedAnaDisengaged", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaFtOffPed": { + "type": "Float32", + "unit": "%", + "description": "Maximum value of analogue clutch pedal to indicate released pedal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/X_ClPedAnaFtOffPed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaFtOnPed": { + "type": "Float32", + "unit": "%", + "description": "Minimum value of analogue clutch pedal to indicate pressed pedal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/X_ClPedAnaFtOnPed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaHighFtOnPed": { + "type": "Float32", + "unit": "%", + "description": "Minimum value of analogue clutch pedal to indicate pressed pedal due to sensor movement.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/X_ClPedAnaHighFtOnPed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaLowFtOnPed": { + "type": "Float32", + "unit": "%", + "description": "Max value before clutch press of analogue clutch pedal to indicate pressed pedal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/X_ClPedAnaLowFtOnPed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedRelease": { + "type": "Float32", + "unit": "%", + "description": "Minimum clutch release distance to indicate released pedal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/X_ClPedRelease", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedAnaFtOnPed": { + "type": "Float32", + "unit": "s", + "description": "time that movement needs to be detected to indicate pressed pedal", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/t_ClPedAnaFtOnPed", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedAnaOkDelay": { + "type": "Float32", + "unit": "s", + "description": "Fall delay for electrical faults concerning ClPedRaw", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/t_ClPedAnaOkDelay", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedRelease": { + "type": "Float32", + "unit": "s", + "description": "Time within which the clutch needs to be released a certain distance to detect released clutch.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1511_FtOnClPed/t_ClPedRelease", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_UseClPedAnaMax": { + "type": "Bool", + "unit": "", + "description": "Use calibratable value for fully pressed point", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/B_UseClPedAnaMax", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_U_MaxClPedAdapt": { + "type": "Float32", + "unit": "V", + "description": "Maximum supply voltage to allow clutch pedal adaptopn", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/U_MaxClPedAdapt", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_U_MinClPedAdapt": { + "type": "Float32", + "unit": "V", + "description": "Minimum supply voltage to allow clutch pedal adaptopn", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/U_MinClPedAdapt", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaInitAdapt": { + "type": "Float32", + "unit": "%", + "description": "Initial adaption value of analogue clutch pedal sensor", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/X_ClPedAnaInitAdapt", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaMax": { + "type": "Float32", + "unit": "%", + "description": "Fully pressed point of clutch pedal analogue position", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/X_ClPedAnaMax", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaMaxAdapt": { + "type": "Float32", + "unit": "%", + "description": "Max adaption value of analogue clutch pedal sensor", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/X_ClPedAnaMaxAdapt", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaMinAdapt": { + "type": "Float32", + "unit": "%", + "description": "Minimum adaption value of analogue clutch pedal sensor", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/X_ClPedAnaMinAdapt", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClPedAnaMinAdaptEnable": { + "type": "Float32", + "unit": "%", + "description": "Minimum value of analogue clutch pedal sensor to enable adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/X_ClPedAnaMinAdaptEnable", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPedAdaptDec": { + "type": "Float32", + "unit": "s", + "description": "Time constant for clutch pedal sensor 0-point adaption per second", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1512_ClPedPosAdaption/t_ClPedAdaptDec", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_UseClPedAdaptCAN": { + "type": "Bool", + "unit": "%", + "description": "Use adapted clutch pedal sensor to indicate clutch pedal position on CAN", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1513_ClPedPos/B_UseClPedAdaptCAN", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_t_ClPed75swReplacement": { + "type": "Float32", + "unit": "s", + "description": "Time until switching to 75% switch due to out of range value of clutch pedal analogue sensor", + "max": 3600, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/1510_ClFtOnOffPed/1513_ClPedPos/t_ClPed75swReplacement", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedPressed_dbi": { + "type": "Bool", + "unit": "-", + "description": "Over ride yVcScACluPed_B_ClPedPressed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_ClPedPressed_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClPedPressed_swi": { + "type": "Bool", + "unit": "", + "description": "Over ride B_ClPedPressed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_ClPedPressed_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_CluPedlPsdSts_dbi": { + "type": "Bool", + "unit": "-", + "description": "Can signal output clutch pedal pressed dbi switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_CluPedlPsdSts_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_CluPedlPsdSts_swi": { + "type": "Bool", + "unit": "", + "description": "CAN signal clutch pedal pressed swi switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_CluPedlPsdSts_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_CluPedlPsd_dbi": { + "type": "Bool", + "unit": "-", + "description": "Can signal output clutch pedal pressed dbi switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_CluPedlPsd_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_CluPedlPsd_swi": { + "type": "Bool", + "unit": "", + "description": "CAN signal clutch pedal pressed swi switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_CluPedlPsd_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_ClutchPedalPos_swi": { + "type": "Bool", + "unit": "", + "description": "Over ride sVcScACluPed_X_ClutchPedalPos", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_ClutchPedalPos_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_FootOffClutchPedal_dbi": { + "type": "Bool", + "unit": "-", + "description": "Over ride yVcScACluPed_B_FootOffClutchPedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_FootOffClutchPedal_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_FootOffClutchPedal_swi": { + "type": "Bool", + "unit": "", + "description": "Over ride yVcScACluPed_B_FootOffClutchPedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_FootOffClutchPedal_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_FootOnClutchPedalASILB_dbi": { + "type": "Bool", + "unit": "-", + "description": "% Over ride yVcScACluPed_B_FootOnClutchPedalASILB", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_FootOnClutchPedalASILB_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_FootOnClutchPedalASILB_swi": { + "type": "Bool", + "unit": "", + "description": "Over ride yVcScACluPed_B_FootOnClutchPedalASILB", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_FootOnClutchPedalASILB_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_FootOnClutchPedal_dbi": { + "type": "Bool", + "unit": "-", + "description": "Over ride yVcScACluPed_B_FootOnClutchPedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_FootOnClutchPedal_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_B_FootOnClutchPedal_swi": { + "type": "Bool", + "unit": "", + "description": "Over ride yVcScACluPed_B_FootOnClutchPedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/B_FootOnClutchPedal_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScACluPed_X_ClutchPedalPos_dbi": { + "type": "Float32", + "unit": "%", + "description": "Over ride sVcScACluPed_X_ClutchPedalPos_dbi", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScACluPed__denso/VcScACluPed/Subsystem/VcScACluPed/VcScACluPed/1000_VcScACluPed/1500_ClFtOnOffPed/X_ClutchPedalPos_dbi", + "configs": ["all"], + "width": 1 + } + } + }, + "VcScBDrvr": { + "version": {}, + "integrity_level": "B", + "outports": { + "yVcScBDrvr_B_DrvrPrsntASILA": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScBDrvr_B_DrvrPrsntASILA", + "name": "yVcScBDrvr_B_DrvrPrsntASILA", + "configs": ["all"], + "description": "Driver present with ASIL A Integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBDrvr_B_InTheLoopASILA": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScBDrvr_B_InTheLoopASILA", + "name": "yVcScBDrvr_B_InTheLoopASILA", + "configs": ["all"], + "description": "Driver in the loop with ASIL A Integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcScBDrvr_D_SchedulingResponse": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcScBDrvr_D_WatchdogResponse", + "name": "sVcScBDrvr_D_SchedulingResponse", + "configs": ["all"], + "description": "Watchdog partial response", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 65535, + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "sVcDepExt_D_Counter": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcDepExt_D_Counter", + "name": "sVcDepExt_D_Counter", + "configs": ["all"], + "description": "Watchdog counter", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBDrvr_B_DrvrInTheLoopASILBCmpl": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScBDrvr_B_DrvrInLoopASILBCmpl", + "name": "yVcScBDrvr_B_DrvrInTheLoopASILBCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBDrvr_B_DrvrInLoopASILB", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBDrvr_B_DrvrPrsntASILBCmpl": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScBDrvr_B_DrvrPrsntASILBCmpl", + "name": "yVcScBDrvr_B_DrvrPrsntASILBCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBDrvr_B_DrvrPrsntASILB", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBDrvr_B_DriveAwayAllowedASILBCmpl": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScBDrvr_B_DrvrInLoopASILBCmpl1", + "name": "yVcScBDrvr_B_DriveAwayAllowedASILBCmpl", + "configs": ["all"], + "description": "Bitwise complement to yVcScBDrvr_B_DriveAwayAllowedASILB", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + }, + "yVcScBDrvr_B_DriveAwayAllowedASILA": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/TLOutport_65", + "name": "yVcScBDrvr_B_DriveAwayAllowedASILA", + "configs": ["all"], + "description": "Drive away is allowed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_B/CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcScCVehMtn_v_VehSpdLgtMin": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcScCVehMtn_v_VehSpdLgtMin", + "name": "sVcScCVehMtn_v_VehSpdLgtMin", + "configs": [["Vc_Pvc_Hw_B_Bosch"], ["all"]], + "description": "Vehicle Speed Over Ground Min", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_DrvrPrsnt": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcCem_B_DrvrPrsnt", + "name": "yVcCem_B_DrvrPrsnt", + "configs": [["all"]], + "description": "Driver present", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_DrvrPrsntOk": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcCem_B_DrvrPrsntOk", + "name": "yVcCem_B_DrvrPrsntOk", + "configs": [["all"]], + "description": "Ok flag for DrvrPrsnt indicating received OK within max-age", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScABrkPed_B_DrvrBrkg": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScABrkPed_B_DrvrBrkg", + "name": "yVcScABrkPed_B_DrvrBrkg", + "configs": [["all"]], + "description": "Driver braking with ASIL A Integrity.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScAAccPed_B_AccPedalPsd": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScAAccPed_B_AccPedalPsd", + "name": "yVcScAAccPed_B_AccPedalPsd", + "configs": [["all"]], + "description": "Accelerator pedal is pressed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_WatchdogQuery": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcEc_D_WatchdogQuery", + "name": "sVcEc_D_WatchdogQuery", + "configs": [["all"]], + "description": "EMS watchdog query to ECM.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 127, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDepExt_D_Counter": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcDepExt_D_Counter1", + "name": "sVcDepExt_D_Counter", + "configs": [["all"]], + "description": "Watchdog counter", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScACluPed_B_CluPedlPsd": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/yVcScACluPed_B_CluPedlPsd", + "name": "yVcScACluPed_B_CluPedlPsd", + "configs": [["all"]], + "description": "Cl ped pressed CAN ASILA", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtMin": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcGp_D_GearBox1", + "name": "sVcScAVehMtn_v_VehSpdLgtMin", + "configs": [["all"]], + "description": "Minimum estimated vehicle speed over ground", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScACluPed_B_FootOnClutchPedalASILB": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcGp_D_GearBox4", + "name": "yVcScACluPed_B_FootOnClutchPedalASILB", + "configs": [["all"]], + "description": "Clutch pedal indicate pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScABrkPed_B_DrvrBrkgASILB": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcGp_D_GearBox28", + "name": "yVcScABrkPed_B_DrvrBrkgASILB", + "configs": [["all"]], + "description": "Driver is pressing the brake pedal WILL BE REMOVED", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDi_X_ClPedRaw": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcGp_D_GearBox54", + "name": "sVcDi_X_ClPedRaw", + "configs": [["all"]], + "description": "Raw unfiltered value from linear clutch pedal sensor. Only valid for Y555 with Clutch pedal analogue sensor HW to ECM.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDi_B_ClPedRawOk": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcGp_D_GearBox53", + "name": "yVcDi_B_ClPedRawOk", + "configs": [["all"]], + "description": "Clutch pedal analog position sensor signal valid.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScAAccPed_B_AccFtOnPed": { + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/sVcGp_D_GearBox5", + "name": "yVcScAAccPed_B_AccFtOnPed", + "configs": [["all"]], + "description": "Foot on acc pedal", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": ["Vc_Pvc_Hw_B_Bosch"], + "local_vars": { + "xVcScBDrvr_B_IntegrityCheck": { + "type": "Bool", + "unit": "", + "description": "Complement check is okay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_B/CVC_DISP", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/F_SchedulingMon/clpOkAND", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScBDrvr_B_DrvrPrsntUseIntASILA": { + "type": "Bool", + "unit": "-", + "description": "Use internal driver present conditions", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/2_ASILA/B_DrvrPrsntUseIntASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScBDrvr_X_ClPedPsdDITL": { + "type": "Float32", + "unit": "%", + "description": "Over this value, clutch pedal is considered pressed for setting Driver In The Loop", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/2_ASILA/X_ClPedPsdDITL", + "configs": ["all"], + "width": 1 + }, + "cVcScBDrvr_t_DrvrInTheLoopASILA": { + "type": "Float32", + "unit": "s", + "description": "Fall delay until driver is judged as not in the loop.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/2_ASILA/t_DrvrInTheLoopASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScBDrvr_t_DrvrPrsntASILA": { + "type": "Float32", + "unit": "s", + "description": "Fall delay until the driver is not judged as present on internal conditions.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/2_ASILA/t_DrvrPrsntASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScBDrvr_v_DrvrPrsntASILA": { + "type": "Float32", + "unit": "km/h", + "description": "Speed threshold when the driver is judged as present", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/2_ASILA/v_DrvrPrsntASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScBDrvr_v_DrvrPrsntResetASILA": { + "type": "Float32", + "unit": "km/h", + "description": "Speed threshold where the driver is allowed to no longer be present.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/2_ASILA/v_DrvrPrsntResetASILA", + "configs": ["all"], + "width": 1 + }, + "cVcScBDrvr_D_ExpectedCounter": { + "type": "UInt8", + "unit": "-", + "description": "Expected value of the counter when this model executes", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_B/CVC_CAL", + "handle": "VcScBDrvr/VcScBDrvr/Subsystem/VcScBDrvr/VcScBDrvr/F_SchedulingMon/D_ExpectedCounter", + "configs": ["all"], + "width": 1 + } + } + }, + "VcScANeuMT__denso": { + "version": {}, + "integrity_level": "A", + "outports": { + "yVcScANeuMT_B_NeutralSens1InNeutral": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcScANeuMT_X_AccPedalPos57", + "name": "yVcScANeuMT_B_NeutralSens1InNeutral", + "configs": ["all"], + "description": "Neutral sensor 1 in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScANeuMT_B_NeutralMT": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/yVcScANeuMT_B_NeutralMT", + "name": "yVcScANeuMT_B_NeutralMT", + "configs": ["all"], + "description": "Gear Lever position indicate gearbox in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScANeuMT_B_NeutralMTValid": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/yVcScANeuMT_B_NeutralMT6", + "name": "yVcScANeuMT_B_NeutralMTValid", + "configs": ["all"], + "description": "Gearbox is determined to be disengaged", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScANeuMT_B_InEvenPosGNS": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcScBTqExt_Tq_PtTqSoftMaxAllwd5", + "name": "yVcScANeuMT_B_InEvenPosGNS", + "configs": ["all"], + "description": "GNS1 is in high position (Even gears)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScANeuMT_B_InOddPosGNS": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcScBTqExt_Tq_PtTqSoftMaxAllwd4", + "name": "yVcScANeuMT_B_InOddPosGNS", + "configs": ["all"], + "description": "GNS1 is in low position (Odd gears).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScANeuMT_B_EvenGearMT": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/yVcScANeuMT_D_EstGear13", + "name": "yVcScANeuMT_B_EvenGearMT", + "configs": ["all"], + "description": "Desired driving direction plausability monitor", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScANeuMT_B_OddGearMT": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/TLOutport_60", + "name": "yVcScANeuMT_B_OddGearMT", + "configs": ["all"], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScANeuMT_X_NeutralSens1": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcScANeuMT_X_AccPedalPos1", + "name": "sVcScANeuMT_X_NeutralSens1", + "configs": ["all"], + "description": "Accelerator Pedal Position NeutralSensor 1 value", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcScATrsm_D_EstGear": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcEc_Qf_vVeh2", + "name": "sVcScATrsm_D_EstGear", + "configs": [["all"]], + "description": "Estimated gear, based on gear ratio", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 15, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScATrsm_B_EstInGear": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/yVcDi_B_ReversedGear2", + "name": "yVcScATrsm_B_EstInGear", + "configs": [["all"]], + "description": "Gear is engaged, calculated based on gear ratio", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TesterClear": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcGp_D_GearBox46", + "name": "yVcEc_B_TesterClear", + "configs": [["all"]], + "description": "Fault code memory reset", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_ClearGNS": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcGp_D_GearBox47", + "name": "yVcEc_B_ClearGNS", + "configs": [["all"]], + "description": "Clear gear neutral sensor adaption with diagnostic tool", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_X_NeutralSensRaw2": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcGp_D_GearBox48", + "name": "sVcEc_X_NeutralSensRaw2", + "configs": [["all"]], + "description": "Neutral sensor from IO on ECM.", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_NeutralSensRaw2Ok": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcGp_D_GearBox50", + "name": "yVcEc_B_NeutralSensRaw2Ok", + "configs": [["all"]], + "description": "No electrical fault detected on GNS2 sensor, signal recieved correctly.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_X_NeutralSensRaw1": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcEc_n_Eng1", + "name": "sVcEc_X_NeutralSensRaw1", + "configs": [["all"]], + "description": "Gear lever sensor indicated Y-position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_NeutralSensRaw1Ok": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcEc_n_Eng2", + "name": "yVcEc_B_NeutralSensRaw1Ok", + "configs": [["all"]], + "description": "No electrical fault detected on GNS1 sensor, signal recieved correctly.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScACluPed_B_FootOffClutchPedal": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcEc_n_Eng3", + "name": "yVcScACluPed_B_FootOffClutchPedal", + "configs": [["all"]], + "description": "Clutch pedal not pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBCoord_B_MTVehicle": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/sVcEc_n_Eng4", + "name": "yVcScBCoord_B_MTVehicle", + "configs": [["all"]], + "description": "Manual gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": { + "VcEvGNS1PlausMon": { + "API_blk": [{ + "path": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/Dem_SetEventStatusPF", + "config": ["all"] + }, { + "path": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/Dem_SetEventStatusPP", + "config": ["all"] + } + ], + "blk_name": "NamedConstant", + "subsystem": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus", + "API_blk_type": "Dem_SetEventStatusPre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "IUMPR": {}, + "FIDs": {}, + "Ranking": { + "VcRvGNS1PlausMon": { + "API_blk": [{ + "path": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/Vc_SetRanking", + "config": ["all"] + } + ], + "blk_name": "NamedConstant1", + "subsystem": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-" + } + }, + "TstId": {} + }, + "dids": {}, + "nvm": { + "sVcScDep_X_valStrAdaptHigh": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1370_StoreAdaptionHigh/sVcScDep_X_valStrAdaptHigh/DataStore", + "name": "sVcScDep_X_valStrAdaptHigh", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "Int16", + "unit": "%", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_Z_nStrAdaptHigh": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1370_StoreAdaptionHigh/sVcScDep_Z_nStrAdaptHigh/DataStore", + "name": "sVcScDep_Z_nStrAdaptHigh", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_X_valStrAdaptLow": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1390_StoreAdaptionLow/sVcScDep_X_valStrAdaptLow/DataStore", + "name": "sVcScDep_X_valStrAdaptLow", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "Int16", + "unit": "%", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_Z_nStrAdaptLow": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1390_StoreAdaptionLow/sVcScDep_Z_nStrAdaptLow/DataStore", + "name": "sVcScDep_Z_nStrAdaptLow", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScIn_X_valStrAdaptEven": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1470_StoreAdaptionHigh/sVcScIn_X_valStrAdaptEven/DataStore", + "name": "sVcScIn_X_valStrAdaptEven", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "Int16", + "unit": "%", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScIn_Z_nStrAdaptEven": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1470_StoreAdaptionHigh/sVcScIn_Z_nStrAdaptEven/DataStore", + "name": "sVcScIn_Z_nStrAdaptEven", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScIn_X_valStrAdaptOdd": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1490_StoreAdaptionLow/sVcScIn_X_valStrAdaptOdd/DataStore", + "name": "sVcScIn_X_valStrAdaptOdd", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "Int16", + "unit": "%", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScIn_Z_nStrAdaptOdd": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1490_StoreAdaptionLow/sVcScIn_Z_nStrAdaptOdd/DataStore", + "name": "sVcScIn_Z_nStrAdaptOdd", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + }, + "sVcScDep_D_FaultCounterNsPlaus": { + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1530_FaultCounterNsPlaus/sVcScDep_D_FaultCounterNsPlaus/DataStore", + "name": "sVcScDep_D_FaultCounterNsPlaus", + "configs": ["all"], + "class": "CVC_DISP_NVM_P", + "description": "Enter a nice description of your variable here", + "type": "UInt16", + "unit": "-", + "offset": "0", + "lsb": "1", + "min": "-", + "max": "-", + "width": "-1" + } + }, + "pre_procs": [], + "local_vars": { + "xVcScANeuMT_B_NeutralSens2Ok": { + "type": "Bool", + "unit": "-", + "description": "Gear lever position sensor 2 in range", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/LogicalOperator4", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NeutralSens1Ok": { + "type": "Bool", + "unit": "-", + "description": "Gear lever position sensor 1 in range", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/LogicalOperator6", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralSens2": { + "type": "Float32", + "unit": "%", + "description": "Neutral Sensor 2 value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralSens1": { + "type": "Float32", + "unit": "%", + "description": "Neutral Sensor 1 signal after rescaling", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_GNSINEvenRange": { + "type": "Bool", + "unit": "-", + "description": "B_GNSINEvenRange", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_SensEstEvenGearCorr": { + "type": "Bool", + "unit": "", + "description": "Sensor and actual gear correlate in high position (even gears)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/LogicalOperator19", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_GNSINOddRange": { + "type": "Bool", + "unit": "-", + "description": "B_GNSINOddRange", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/LogicalOperator2", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_SensEstOddGearCorr": { + "type": "Bool", + "unit": "", + "description": "Sensor and actual gear correlate in low position (Odd gears)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/LogicalOperator20", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_InEvenPosGNS": { + "type": "Bool", + "unit": "-", + "description": "GNS1 is in high position (Even gears)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/LogicalOperator3", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_InOddPosGNS": { + "type": "Bool", + "unit": "-", + "description": "GNS1 is in low position (Odd gears).", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/LogicalOperator4", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValEven_prev": { + "type": "Float32", + "unit": "%", + "description": "Adapted even value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1440_WeightAdaptationHigh/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptOdd1_prev": { + "type": "Bool", + "unit": "", + "description": "Trig adaptation on the low level gears", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1450_TrigAdaptationLow/EdgeDetectRise3/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_DiffLastAdaptOdd1": { + "type": "Float32", + "unit": "%", + "description": "Difference between last adaption and current adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1450_TrigAdaptationLow/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValOdd_prev": { + "type": "Float32", + "unit": "%", + "description": "Adapted odd value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1460_WeightAdaptationLow/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_Z_nStrAdaptEven1": { + "type": "UInt16", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1470_StoreAdaptionHigh/Gain", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valStrAdaptEven1": { + "type": "Float32", + "unit": "%", + "description": "Adapted high y-value to memory", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1470_StoreAdaptionHigh/Gain1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_AdaptionOkNeutralMT1": { + "type": "Bool", + "unit": "", + "description": "Adaption conditions are ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valNeutralEven1": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for the neutral interval", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valNeutralOdd1": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for the neutral interval", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/Sum3", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_GNSAdjusted2": { + "type": "Float32", + "unit": "%", + "description": "GNS value adjusted based on estimated gear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/Sum1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_GearLevSensUnstable2": { + "type": "Bool", + "unit": "-", + "description": "Neutral sensor 1 has too high change rate to allow adaption of neutral position.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1320_GearLevSensorCondition/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptEven2_prev": { + "type": "Bool", + "unit": "", + "description": "Trig adaptation on the high level gears", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1330_TrigAdaptationHigh/EdgeDetectRise2/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptOkHigh": { + "type": "Bool", + "unit": "", + "description": "GNS Plaus Ok for adaption", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1330_TrigAdaptationHigh/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_DiffLastAdaptEven2": { + "type": "Float32", + "unit": "%", + "description": "Difference between adapted value and new adaption", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1330_TrigAdaptationHigh/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValHigh_prev": { + "type": "Float32", + "unit": "%", + "description": "TBD", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1340_WeightAdaptationHigh/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptOdd2_prev": { + "type": "Bool", + "unit": "", + "description": "Trig adaptation on the low level gears", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1350_TrigAdaptationLow/EdgeDetectRise3/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_DiffLastAdaptOdd2": { + "type": "Float32", + "unit": "%", + "description": "Difference between last adaption and current adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1350_TrigAdaptationLow/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValLow_prev": { + "type": "Float32", + "unit": "%", + "description": "TBD", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1360_WeightAdaptationLow/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_Z_nStrAdaptEven2": { + "type": "UInt16", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1370_StoreAdaptionHigh/Gain", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valStrAdaptEven2": { + "type": "Float32", + "unit": "%", + "description": "Adapted high y-value to memory", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1370_StoreAdaptionHigh/Gain1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_AdaptionOkNeutralMT2": { + "type": "Bool", + "unit": "", + "description": "Adaption conditions are ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valNeutralEven2": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for the neutral interval", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valNeutralOdd2": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for the neutral interval", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/Sum3", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_Z_nStrAdaptOdd2": { + "type": "UInt16", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1390_StoreAdaptionLow/Gain2", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valStrAdaptOdd2": { + "type": "Float32", + "unit": "%", + "description": "Adapted low y-value to memory", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1390_StoreAdaptionLow/Gain3", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_Z_nStrAdaptOdd1": { + "type": "UInt16", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1490_StoreAdaptionLow/Gain2", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_valStrAdaptOdd1": { + "type": "Float32", + "unit": "%", + "description": "Adapted low y-value to memory", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1490_StoreAdaptionLow/Gain3", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptEven1": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/RenameSignal/InPort", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptOdd1": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/RenameSignal1/InPort", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_TrigAdaptEven": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/RenameSignal2/InPort", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValOdd": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/RenameSignal3/InPort", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_Z_NsPlausFaultCondFrac": { + "type": "Float32", + "unit": "", + "description": "Value between 0 and 1 indicating how close plausibility of neutral sensors are to detect a fault condition.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1510_FaultCondNsPlaus/OnDelay4/Product1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NsPlausFaultCond": { + "type": "Bool", + "unit": "-", + "description": "Fault condition fulfilled for Neutral sensor plausibility", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1510_FaultCondNsPlaus/OnDelay4/RelationalOperator1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_D_FaultCounterNsPlaus": { + "type": "Int16", + "unit": "-", + "description": "Fault counter for neutral sensor plausibility", + "max": 32767, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1530_FaultCounterNsPlaus/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NsPlausFaulty": { + "type": "Bool", + "unit": "-", + "description": "Diagnosis indicate that neutral sensor signals are is faulty", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/SR_FF7/LogOp3", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_GearboxDisengaged": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalOperator20", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NeutralMTValid": { + "type": "Bool", + "unit": "", + "description": "NeutralMTValid", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalOperator5", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowHigh1": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowHigh1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowHigh2": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowHigh2", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowLow2": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowLow1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowLow1": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowLow1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalSwitch4/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NeutralMT": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/LogicalSwitch8/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NeutralSens2InNeutral": { + "type": "Bool", + "unit": "", + "description": "NeutralSens2InNeutral", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/SR_FF1/LogOp3", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_NeutralSens1InNeutral": { + "type": "Bool", + "unit": "-", + "description": "GNS 1 is in neutral range", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/SR_FF7/LogOp3", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowLowLower2": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowLowLower2", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/Sum1", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowHighUpper2": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowHighUpper2", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowLowLower1": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowLowLower1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/Sum3", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_NeutralWindowHighUpper1": { + "type": "Float32", + "unit": "%", + "description": "NeutralWindowHighUpper1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/Sum4", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptEven2": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/RenameSignal/InPort", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptOdd2": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/RenameSignal1/InPort", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValHigh": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/RenameSignal2/InPort", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_AdaptValLow": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/RenameSignal3/InPort", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_GNSAdjusted1": { + "type": "Float32", + "unit": "%", + "description": "GNS value adjusted based on estimated gear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/Sum1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_GearLevSensUnstable1": { + "type": "Bool", + "unit": "-", + "description": "Neutral sensor 1 has too high change rate to allow adaption of neutral position.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1420_GearLevSensorCondition/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScANeuMT_B_TrigAdaptEven1_prev": { + "type": "Bool", + "unit": "", + "description": "Trig adaptation on the high level gears", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1430_TrigAdaptationHigh/EdgeDetectRise2/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "rVcScANeuMT_X_DiffLastAdaptEven1": { + "type": "Float32", + "unit": "%", + "description": "Difference between adapted value and new adaption", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1430_TrigAdaptationHigh/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScANeuMT_B_GNSOkUseEMS": { + "type": "Bool", + "unit": "s", + "description": "Use EMS Ok flags for GNS sensors", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/B_GNSOkUseEMS", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSOutOfRngHighNM": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for GNS.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/X_GNSOutOfRngHighNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSOutOfRngLowNM": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for GNS.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/X_GNSOutOfRngLowNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_Use1GearMonNM_sw": { + "type": "Bool", + "unit": "", + "description": "Monitor GNS in 1st gear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/B_Use1GearMonNM_sw", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInGearDispHysteresis": { + "type": "Float32", + "unit": "%", + "description": "Hysteresis of estimating in even or odd gear, used for GSH.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/X_GNSInGearDispHysteresis", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInGearHighNM": { + "type": "Float32", + "unit": "%", + "description": "Upper position where GNS indicates in gear.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/X_GNSInGearHighNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInGearHysteresis": { + "type": "Float32", + "unit": "%", + "description": "Hysteresis of limits estimate in gearwith GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/X_GNSInGearHysteresis", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInGearLowNM": { + "type": "Float32", + "unit": "%", + "description": "Lower position where GNS indicates in gear.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/X_GNSInGearLowNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSNotInGearHighNM": { + "type": "Float32", + "unit": "%", + "description": "Upper position where GNS does not indicate in gear.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/X_GNSNotInGearHighNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSNotInGearLowNM": { + "type": "Float32", + "unit": "%", + "description": "Lower position where GNS does not indicate in gear.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/X_GNSNotInGearLowNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDClOffPedNM": { + "type": "Float32", + "unit": "s", + "description": "Rise delay in ClFtOffPed, should match EstInGear delay.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1200_GearPositions/t_TDClOffPedNM", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear1AS_sa2": { + "type": "Float32", + "unit": "%", + "description": "Offset for 1st gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/X_AdjustGear1AS_sa2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear2AS_sa2": { + "type": "Float32", + "unit": "%", + "description": "Offset for 2nd gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/X_AdjustGear2AS_sa2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear3AS_sa2": { + "type": "Float32", + "unit": "%", + "description": "Offset for 3rd gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/X_AdjustGear3AS_sa2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear4AS_sa3": { + "type": "Float32", + "unit": "%", + "description": "Offset for 4th gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/X_AdjustGear4AS_sa3", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear5AS_sa4": { + "type": "Float32", + "unit": "%", + "description": "Offset for 5th gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/X_AdjustGear5AS_sa4", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear6AS_sa5": { + "type": "Float32", + "unit": "%", + "description": "GNS offset for 6th gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1310_AdjustSensor/X_AdjustGear6AS_sa5", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSMaxDiffGLSC2": { + "type": "Float32", + "unit": "%", + "description": "Maximum derivative for GNS sensor signal.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1320_GearLevSensorCondition/X_GNSMaxDiffGLSC2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDGNSDiffGLSC2": { + "type": "Float32", + "unit": "s", + "description": "Time derivative of GNS has to be below limit, to signal OK.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1320_GearLevSensorCondition/t_TDGNSDiffGLSC2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxPlausDiffAdaptValTAH2": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference between old value and new value to allow adaption.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1330_TrigAdaptationHigh/X_MaxPlausDiffAdaptValTAH2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDtrigTAH2": { + "type": "Float32", + "unit": "s", + "description": "Time that Est Gear and Act Gear has to agree, in order to trig adaption.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1330_TrigAdaptationHigh/t_TDtrigTAH2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_nAdaptHighFastWAH2": { + "type": "UInt8", + "unit": "-", + "description": "Number of times allowing fast adaption.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1340_WeightAdaptationHigh/D_nAdaptHighFastWAH2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSHighLowerAdaptLim2": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for GNS adaption for Even gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_GNSHighLowerAdaptLim2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSHighUpperAdaptLim2": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for GNS adaption for Even gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_GNSHighUpperAdaptLim2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracHighFastWAH2": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption. (Fast adaption)", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1340_WeightAdaptationHigh/Z_FracHighFastWAH2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracHighWAH2": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1340_WeightAdaptationHigh/Z_FracHighWAH2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxPlausDiffAdaptValTAL2": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference between old value and new value to allow adaption.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1350_TrigAdaptationLow/X_MaxPlausDiffAdaptValTAL2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDtrigTAL2": { + "type": "Float32", + "unit": "s", + "description": "Time that Est Gear and Act Gear has to agree, in order to trig adaption.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1350_TrigAdaptationLow/t_TDtrigTAL2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_nAdaptLowFastWAL2": { + "type": "UInt8", + "unit": "-", + "description": "Number of times allowing fast adaption.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1360_WeightAdaptationLow/D_nAdaptLowFastWAL2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSLowLowerAdaptLim2": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for GNS adaption for Odd gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_GNSLowLowerAdaptLim2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSLowUpperAdaptLim2": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for GNS adaption for Odd gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_GNSLowUpperAdaptLim2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracLowFastWAL2": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption. (Fast adaption)", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1360_WeightAdaptationLow/Z_FracLowFastWAL2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracLowWAL2": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1360_WeightAdaptationLow/Z_FracLowWAL2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInitHighGLA2": { + "type": "Float32", + "unit": "%", + "description": "Initial high value for GNS adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1370_StoreAdaptionHigh/X_GNSInitHighGLA2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxDiffGLA2": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference in last adaption, to allow setting NeutralMT", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_MaxDiffGLA2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_NeutralPosGLA2": { + "type": "Float32", + "unit": "%", + "description": "Nominal neutral position (point between AdaptLow and AdaptHigh)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_NeutralPosGLA2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_TolValHighGLA2": { + "type": "Float32", + "unit": "%", + "description": "Tolerance that makes the upper limit of the neutral value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_TolValHighGLA2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_TolValLowGLA2": { + "type": "Float32", + "unit": "%", + "description": "Tolerance that makes the lower limit of the neutral value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1380_NeutralLimits/X_TolValLowGLA2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInitLowGLA2": { + "type": "Float32", + "unit": "%", + "description": "Initial low value for GNS adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1300_NeutralAdaptationSens2/1390_StoreAdaptionLow/X_GNSInitLowGLA2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear1AS_s1": { + "type": "Float32", + "unit": "%", + "description": "Offset for 1st gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/X_AdjustGear1AS_s1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear2AS_s1": { + "type": "Float32", + "unit": "%", + "description": "Offset for 2nd gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/X_AdjustGear2AS_s1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear3AS_s1": { + "type": "Float32", + "unit": "%", + "description": "Offset for 3rd gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/X_AdjustGear3AS_s1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear4AS_s1": { + "type": "Float32", + "unit": "%", + "description": "Offset for 4th gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/X_AdjustGear4AS_s1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear5AS_s1": { + "type": "Float32", + "unit": "%", + "description": "Offset for 5th gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/X_AdjustGear5AS_s1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_AdjustGear6A_s1": { + "type": "Float32", + "unit": "%", + "description": "GNS offset for 6th gear", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1410_AdjustSensor/X_AdjustGear6A_s1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSMaxDiffGLSC1": { + "type": "Float32", + "unit": "%", + "description": "Maximum derivative for GNS sensor signal.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1420_GearLevSensorCondition/X_GNSMaxDiffGLSC1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDGNSDiffGLSC1": { + "type": "Float32", + "unit": "s", + "description": "Time derivative of GNS has to be below limit, to signal OK.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1420_GearLevSensorCondition/t_TDGNSDiffGLSC1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxPlausDiffAdaptValTAH1": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference between old value and new value to allow adaption.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1430_TrigAdaptationHigh/X_MaxPlausDiffAdaptValTAH1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDtrigTAH1": { + "type": "Float32", + "unit": "s", + "description": "Time that Est Gear and Act Gear has to agree, in order to trig adaption.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1430_TrigAdaptationHigh/t_TDtrigTAH1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_nAdaptHighFastWAH1": { + "type": "UInt8", + "unit": "-", + "description": "Number of times allowing fast adaption.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1440_WeightAdaptationHigh/D_nAdaptHighFastWAH1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSHighLowerAdaptLim1": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for GNS adaption for Even gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_GNSHighLowerAdaptLim1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSHighUpperAdaptLim1": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for GNS adaption for Even gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_GNSHighUpperAdaptLim1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracHighFastWAH1": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption. (Fast adaption)", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1440_WeightAdaptationHigh/Z_FracHighFastWAH1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracHighWAH1": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1440_WeightAdaptationHigh/Z_FracHighWAH1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxPlausDiffAdaptValTAL1": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference between old value and new value to allow adaption.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1450_TrigAdaptationLow/X_MaxPlausDiffAdaptValTAL1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDtrigTAL1": { + "type": "Float32", + "unit": "s", + "description": "Time that Est Gear and Act Gear has to agree, in order to trig adaption.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1450_TrigAdaptationLow/t_TDtrigTAL1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_nAdaptLowFastWAL1": { + "type": "UInt8", + "unit": "-", + "description": "Number of times allowing fast adaption.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1460_WeightAdaptationLow/D_nAdaptLowFastWAL1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSLowLowerAdaptLim1": { + "type": "Float32", + "unit": "%", + "description": "Lower limit for GNS adaption for Odd gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_GNSLowLowerAdaptLim1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSLowUpperAdaptLim1": { + "type": "Float32", + "unit": "%", + "description": "Upper limit for GNS adaption for Odd gears", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_GNSLowUpperAdaptLim1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracLowFastWAL1": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption. (Fast adaption)", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1460_WeightAdaptationLow/Z_FracLowFastWAL1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_Z_FracLowWAL1": { + "type": "Float32", + "unit": "-", + "description": "Fraction that old value shall be used for adaption.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1460_WeightAdaptationLow/Z_FracLowWAL1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInitHighGLA1": { + "type": "Float32", + "unit": "%", + "description": "Initial high value for GNS adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1470_StoreAdaptionHigh/X_GNSInitHighGLA1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxDiffGLA1": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference in last adaption, to allow setting NeutralMT", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_MaxDiffGLA1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_NeutralPosGLA1": { + "type": "Float32", + "unit": "%", + "description": "Nominal neutral position (point between AdaptLow and AdaptHigh)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_NeutralPosGLA1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_TolValHighGLA1": { + "type": "Float32", + "unit": "%", + "description": "Tolerance that makes the upper limit of the neutral value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_TolValHighGLA1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_TolValLowGLA1": { + "type": "Float32", + "unit": "%", + "description": "Tolerance that makes the lower limit of the neutral value", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1480_NeutralLimits/X_TolValLowGLA1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSInitLowGLA1": { + "type": "Float32", + "unit": "%", + "description": "Initial low value for GNS adaption", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1400_NeutralAdaptationSens1/1490_StoreAdaptionLow/X_GNSInitLowGLA1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_MaxDiffGNSPlaus": { + "type": "Float32", + "unit": "%", + "description": "Maximum difference allowed before detecting fault in GNS sensors", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1510_FaultCondNsPlaus/X_MaxDiffGNSPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_GNSPlausFail": { + "type": "Float32", + "unit": "s", + "description": "Time with a difference in GNS sensors to detect fault", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1510_FaultCondNsPlaus/t_GNSPlausFail", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_GNSPlausClearPass": { + "type": "Float32", + "unit": "s", + "description": "Time with a difference in GNS sensors to clear healing condition", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1520_HealCondNsPlaus/t_GNSPlausClearPass", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_RcfWrpIDGNS1PlausMon": { + "type": "UInt8", + "unit": "-", + "description": "Reconfiguration Wrap ID", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/1540_FaultCoreCallNeutralMTPlaus/D_RcfWrpIDGNS1PlausMon", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_NsPlausTestFail_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/B_NsPlausTestFail_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_NsPlausTestFail_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/B_NsPlausTestFail_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_NsPlausTestPassed_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/B_NsPlausTestPassed_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_NsPlausTestPassed_swi": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/B_NsPlausTestPassed_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_CounterHighLimNsPlaus": { + "type": "Int16", + "unit": "-", + "description": "Upper limit for fault counter for Neutral sensor plausibility", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/D_CounterHighLimNsPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_CounterInitNsPlaus": { + "type": "UInt16", + "unit": "-", + "description": "TBD", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/D_CounterInitNsPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_ErrLimNsPlaus": { + "type": "Int16", + "unit": "-", + "description": "Fault limit for fault counter for Neutral sensor plausibility", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/D_ErrLimNsPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_FaultCondStepNsPlaus": { + "type": "Int16", + "unit": "-", + "description": "Step size for fault condition for Neutral sensor plausibility", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/D_FaultCondStepNsPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_HealCondStepNsPlaus": { + "type": "Int16", + "unit": "-", + "description": "Step size for healing Neutral sensor plausibility", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/D_HealCondStepNsPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_D_OkLimNsPlaus": { + "type": "Int16", + "unit": "-", + "description": "Ok limit for fault counter for Neutral sensor plausibility", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1500_NeutralSensorPlausMonitor/D_OkLimNsPlaus", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_NeutralMT_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debugswitch variable for setting Neutral for manual transmissions.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/B_NeutralMT_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_NeutralMT_swi": { + "type": "Bool", + "unit": "-", + "description": "Debugswitch variable for setting Neutral for manual transmissions.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/B_NeutralMT_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_B_UseGNSAdaption": { + "type": "Bool", + "unit": "-", + "description": "Activate GNS adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/B_UseGNSAdaption", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSHysteresis1": { + "type": "Float32", + "unit": "%", + "description": "Hysteresis of neutral window to estimate neutral with GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/X_GNSHysteresis1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSHysteresis2": { + "type": "Float32", + "unit": "%", + "description": "Hysteresis of neutral window to estimate neutral with GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/X_GNSHysteresis2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSNeutralWindowHigh1": { + "type": "Float32", + "unit": "%", + "description": "Higher limit of neutral window to estimate neutral with GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/X_GNSNeutralWindowHigh1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSNeutralWindowHigh2": { + "type": "Float32", + "unit": "%", + "description": "Higher limit of neutral window to estimate neutral with GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/X_GNSNeutralWindowHigh2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSNeutralWindowLow1": { + "type": "Float32", + "unit": "%", + "description": "Lower limit of neutral window to estimate neutral with GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/X_GNSNeutralWindowLow1", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_X_GNSNeutralWindowLow2": { + "type": "Float32", + "unit": "%", + "description": "Lower limit of neutral window to estimate neutral with GNS", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/X_GNSNeutralWindowLow2", + "configs": ["all"], + "width": 1 + }, + "cVcScANeuMT_t_TDRNeutralMT": { + "type": "Float32", + "unit": "s", + "description": "Time derivative of GNS has to be below limit, to signal OK.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1600_NeutralMT/t_TDRNeutralMT", + "configs": ["all"], + "width": 1 + }, + "tVcScANeuMT_X_NeutralSens1_x": { + "type": "Float32", + "unit": "%", + "description": "Raw singal axis for gear neutral sensor 1", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/X_NeutralSens1/X_NeutralSens1_x", + "configs": ["all"], + "width": [1, 4] + }, + "tVcScANeuMT_X_NeutralSens2_x": { + "type": "Float32", + "unit": "%", + "description": "Raw singal axis for gear neutral sensor 2", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/X_NeutralSens2/X_NeutralSens2_x", + "configs": ["all"], + "width": [1, 4] + }, + "tVcScANeuMT_X_NeutralSens1": { + "type": "Float32", + "unit": "%", + "description": "Raw singal axis for gear neutral sensor 2", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/X_NeutralSens1/X_NeutralSens1", + "configs": ["all"], + "width": [1, 4] + }, + "tVcScANeuMT_X_NeutralSens2": { + "type": "Float32", + "unit": "%", + "description": "Raw singal axis for gear neutral sensor 2", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScANeuMT__denso/VcScANeuMT/Subsystem/VcScANeuMT/VcScANeuMT/1000_ASILA/1100_GnsScaling/X_NeutralSens2/X_NeutralSens2", + "configs": ["all"], + "width": [1, 4] + } + } + }, + "VcScATqExt__denso": { + "version": {}, + "integrity_level": "A", + "outports": { + "sVcScATqExt_Tq_PtTqAtAxleFrntMinReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/TLOutport_9", + "name": "sVcScATqExt_Tq_PtTqAtAxleFrntMinReq", + "configs": ["all"], + "description": "Stability control minimum limitation of front axle torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATqExt_Tq_PtTqAtAxleReMinReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/TLOutport_12", + "name": "sVcScATqExt_Tq_PtTqAtAxleReMinReq", + "configs": ["all"], + "description": "Stability control minimum limitation of rear axle torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATqExt_Tq_PtTqAtAxleReAddReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/TLOutport_13", + "name": "sVcScATqExt_Tq_PtTqAtAxleReAddReq", + "configs": ["all"], + "description": "Stability control additive rear axle torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATqExt_Tq_PtTqAtAxleFrntAddReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/TLOutport_14", + "name": "sVcScATqExt_Tq_PtTqAtAxleFrntAddReq", + "configs": ["all"], + "description": "Stability control additive front axle torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATqExt_Tq_PtTqSoftMaxAllwd": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcScATqExt_Tq_PtTqSoftMaxAllwd", + "name": "sVcScATqExt_Tq_PtTqSoftMaxAllwd", + "configs": ["all"], + "description": "Max autonomus allowed propulsive wheel torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -16380, + "max": 16380, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScTqExt_Tq_PtTqAtAxleFrntMaxReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/TLOutport_8", + "name": "sVcScTqExt_Tq_PtTqAtAxleFrntMaxReq", + "configs": ["all"], + "description": "Stability control maximum limitation of front axle torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcVdm_Tq_PtTqAtAxleReMinReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcBc_Tq_PropRearReqMin", + "name": "sVcVdm_Tq_PtTqAtAxleReMinReq", + "configs": [["all"]], + "description": "Minimum allowed powertrain applied wheel torque on the rear axle. Positive value indicates limitation of powertrain torque in the desired driving direction of the driver. The signal shall not be compensated for powertrain inertia.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -20000, + "max": 20000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_PtTqAtAxleFrntMinReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcBc_Tq_PropRearReqMin1", + "name": "sVcVdm_Tq_PtTqAtAxleFrntMinReq", + "configs": [["all"]], + "description": "Minimum allowed powertrain applied wheel torque on the front axle. Positive value indicates limitation of powertrain torque in the desired driving direction of the driver. The signal shall not be compensated for powertrain inertia.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -20000, + "max": 20000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_PtTqAtAxleReAddReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcGp_D_GearBox14", + "name": "sVcVdm_Tq_PtTqAtAxleReAddReq", + "configs": [["all"]], + "description": "Dynamic torque vectoring (DTV) additive torque to propulsion torque request to compensate for DTV braking at rear axle.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1023, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_PtTqAtAxleFrntAddReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcGp_D_GearBox15", + "name": "sVcVdm_Tq_PtTqAtAxleFrntAddReq", + "configs": [["all"]], + "description": "Dynamic torque vectoring (DTV) additive torque to propulsion torque request to compensate for DTV braking at front axle.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1023, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_PtTqAtAxleFrntMinReqOk": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcGp_D_GearBox2", + "name": "yVcVdm_B_PtTqAtAxleFrntMinReqOk", + "configs": [["all"]], + "description": "Ok flag for PtAtAxleFrntMinReq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_PtTqAtAxleReMinReqOk": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcGp_D_GearBox4", + "name": "yVcVdm_B_PtTqAtAxleReMinReqOk", + "configs": [["all"]], + "description": "Ok flag for PtTqAtAxleReMinReq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_PtTqAtAxleAddReqOk": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcGp_D_GearBox40", + "name": "yVcVdm_B_PtTqAtAxleAddReqOk", + "configs": [["all"]], + "description": "Ok flag for DTV additive torque (for both front and rear axle)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_PtTqSoftMaxAllwd": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/yVcEc_B_ICETorqueFault12", + "name": "sVcVdm_Tq_PtTqSoftMaxAllwd", + "configs": [["all"]], + "description": "Max allowed wheel torque for road gradient compensation.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -16384, + "max": 16380, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_PtTqSoftMaxOk": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/yVcEc_B_ICETorqueFault13", + "name": "yVcVdm_B_PtTqSoftMaxOk", + "configs": [["all"]], + "description": "Signal OK flag for PtTqSoftMaxAllwd.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TrqDrvrDirConf": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/yVcEc_B_ICETorqueFault14", + "name": "yVcEc_B_TrqDrvrDirConf", + "configs": [["all"]], + "description": "Torque direction confirmed by high integrity monitoring", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_PtTqAtAxleFrntMaxReq": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcBc_Tq_PropRearReqMax1", + "name": "sVcVdm_Tq_PtTqAtAxleFrntMaxReq", + "configs": [["all"]], + "description": "Maximum allowed powertrain applied wheel torque on the front axle. Positive value indicates limitation of powertrain torque in the desired driving direction of the driver. The signal shall not be compensated for powertrain inertia.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -20000, + "max": 20000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_PtTqAtAxleFrntMaxReqOk": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/sVcGp_D_GearBox26", + "name": "yVcVdm_B_PtTqAtAxleFrntMaxReqOk", + "configs": [["all"]], + "description": "Ok flag for PtTqAtAxleFrntMaxReq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcBDesDir_B_Fwd": { + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/yVcEc_B_ForceReqAllow5", + "name": "yVcTcBDesDir_B_Fwd", + "configs": [["all"]], + "description": "Desired driving torque direction is forward. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": {}, + "calib_consts": { + "cVcScATqExt_B_PtTqAtAxleFrntAddReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Override sVcScATqExt_Tq_PtTqAtAxleFrntAddReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/B_PtTqAtAxleFrntAddReq_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_B_PtTqAtAxleFrntMaxReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Override sVcScATqExt_Tq_PtTqAtAxleFrntMaxReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/B_PtTqAtAxleFrntMaxReq_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_B_PtTqAtAxleFrntMinReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Override sVcScATqExt_Tq_PtTqAtAxleFrntMinReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/B_PtTqAtAxleFrntMinReq_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_B_PtTqAtAxleReAddReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Override sVcScATqExt_Tq_PtTqAtAxleReAddReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/B_PtTqAtAxleReAddReq_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_B_PtTqAtAxleReMinReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Override sVcScATqExt_Tq_PtTqAtAxleReMinReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/B_PtTqAtAxleReMinReq_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqAtAxleFrntAddReq_dbi": { + "type": "Float32", + "unit": "Nm", + "description": "Override value of Override sVcScATqExt_Tq_PtTqAtAxleFrntAddReq", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqAtAxleFrntAddReq_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqAtAxleFrntMaxReq_dbi": { + "type": "Float32", + "unit": "Nm", + "description": "Override value of Override sVcScATqExt_Tq_PtTqAtAxleFrntMaxReq", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqAtAxleFrntMaxReq_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqAtAxleFrntMinReq_dbi": { + "type": "Float32", + "unit": "Nm", + "description": "Override value of Override sVcScATqExt_Tq_PtTqAtAxleFrntMinReq", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqAtAxleFrntMinReq_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqAtAxleReAddReq_dbi": { + "type": "Float32", + "unit": "Nm", + "description": "Override value of Override sVcScATqExt_Tq_PtTqAtAxleReAddReq", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqAtAxleReAddReq_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqAtAxleReMinReq_dbi": { + "type": "Float32", + "unit": "Nm", + "description": "Override value of Override sVcScATqExt_Tq_PtTqAtAxleReMinReq", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqAtAxleReMinReq_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqFrntAddSafe": { + "type": "Float32", + "unit": "Nm", + "description": "Replacement value in case of invalid/no data", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqFrntAddSafe", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqFrntMaxSafe": { + "type": "Float32", + "unit": "Nm", + "description": "Replacement value in case of invalid/no data", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqFrntMaxSafe", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqFrntMinSafe": { + "type": "Float32", + "unit": "Nm", + "description": "Replacement value in case of invalid/no data", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqFrntMinSafe", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqReAddSafe": { + "type": "Float32", + "unit": "Nm", + "description": "Replacement value in case of invalid/no data", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqReAddSafe", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqReMinSafe": { + "type": "Float32", + "unit": "Nm", + "description": "Replacement value in case of invalid/no data", + "max": 20000, + "min": -20000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqReMinSafe", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tq_PtTqSoftMaxAllwd": { + "type": "Float32", + "unit": "Nm", + "description": "Maximum allowed value on sVcScATqExt_Tq_PtTqSoftMax", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tq_PtTqSoftMaxAllwd", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tqd_PtTqFrntAdd": { + "type": "Float32", + "unit": "Nm/s", + "description": "Ramp speed towards safe value", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tqd_PtTqFrntAdd", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tqd_PtTqFrntMax": { + "type": "Float32", + "unit": "Nm/s", + "description": "Ramp speed towards safe value", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tqd_PtTqFrntMax", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tqd_PtTqFrntMin": { + "type": "Float32", + "unit": "Nm/s", + "description": "Ramp speed towards safe value", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tqd_PtTqFrntMin", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tqd_PtTqReAdd": { + "type": "Float32", + "unit": "Nm/s", + "description": "Ramp speed towards safe value", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tqd_PtTqReAdd", + "configs": ["all"], + "width": 1 + }, + "cVcScATqExt_Tqd_PtTqReMin": { + "type": "Float32", + "unit": "Nm/s", + "description": "Ramp speed towards safe value", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATqExt__denso/VcScATqExt/Subsystem/VcScATqExt/VcScATqExt/Tqd_PtTqReMin", + "configs": ["all"], + "width": 1 + } + } + }, + "VcScATrsm__denso": { + "version": {}, + "integrity_level": "A", + "outports": { + "yVcScATrsm_B_Gearshift": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_2", + "name": "yVcScATrsm_B_Gearshift", + "configs": ["all"], + "description": "Gearshift detected by looking at gear ratio", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_EstInGear": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_55", + "name": "yVcScATrsm_B_EstInGear", + "configs": ["all"], + "description": "Gear is engaged, calculated based on gear ratio", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_D_EstGear": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScATrsm_rt_DrDirection14", + "name": "sVcScATrsm_D_EstGear", + "configs": ["all"], + "description": "Estimated gear, based on gear ratio", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 127, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_rt_EstGearRatio": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_16", + "name": "sVcScATrsm_rt_EstGearRatio", + "configs": ["all"], + "description": "Estimated gear ratio", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_GearboxDisengagedAT": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_1", + "name": "yVcScATrsm_B_GearboxDisengagedAT", + "configs": ["all"], + "description": "GearboxDisengaged for automatic transmissions", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_GearboxLimitedEngagement": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScATrsm_rt_DrDirection1", + "name": "yVcScATrsm_B_GearboxLimitedEngagement", + "configs": ["all"], + "description": "Gearbox is not able to transfer a signifcant amount of torque to the wheels.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_Te_OilAT": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcScATrsm_B_NeutralMT11", + "name": "sVcScATrsm_Te_OilAT", + "configs": ["all"], + "description": "Gear box oil temperature, filtered to mitigate sensor faults.", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -40, + "max": 200, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_TrsmActrPosnVld": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScATrsm_rt_DrDirection6", + "name": "yVcScATrsm_B_TrsmActrPosnVld", + "configs": ["all"], + "description": "TCM position info is judged as valid in VcScATrsm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ConvLockUpClosed": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_6", + "name": "yVcScATrsm_B_ConvLockUpClosed", + "configs": ["all"], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_Tq_ConvImpOL": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_7", + "name": "sVcScATrsm_Tq_ConvImpOL", + "configs": ["all"], + "description": "TBD", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_PowertrainDisengagedASILB": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_10", + "name": "yVcScATrsm_B_PowertrainDisengagedASILB", + "configs": ["all"], + "description": "Powertrain is disengaged from the wheels, to ASILB integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_rt_TrsmTrqRat": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_29", + "name": "sVcScATrsm_rt_TrsmTrqRat", + "configs": ["all"], + "description": "TBD", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ActlTqDirFrntFwd": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_38", + "name": "yVcScATrsm_B_ActlTqDirFrntFwd", + "configs": ["all"], + "description": "Actual torque direction front forward", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ActlTqDirFrntRev": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_11", + "name": "yVcScATrsm_B_ActlTqDirFrntRev", + "configs": ["all"], + "description": "Actual torque direction front reverse", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ActlTqDirFrntNtrl": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_40", + "name": "yVcScATrsm_B_ActlTqDirFrntNtrl", + "configs": ["all"], + "description": "Actual torque direction front neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ActlTqDirFrntPark": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_47", + "name": "yVcScATrsm_B_ActlTqDirFrntPark", + "configs": ["all"], + "description": "Actual torque direction front Park", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_PN": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_26", + "name": "yVcScATrsm_B_PN", + "configs": ["all"], + "description": "PN selected for automatic transmissions.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_FrntWhlsParkd": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScDep_rt_DrDirection38", + "name": "yVcScATrsm_B_FrntWhlsParkd", + "configs": ["all"], + "description": "Front wheels mechanically locked.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_D_TrsmParkLockd": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_41", + "name": "sVcScATrsm_D_TrsmParkLockd", + "configs": ["all"], + "description": "Transmission locked in P. Part of ASIL B concept.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ActlTqDirFrntVld": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScBTqExt_Tq_PtTqSoftMaxAllwd3", + "name": "yVcScATrsm_B_ActlTqDirFrntVld", + "configs": ["all"], + "description": "Actual front torque direction valid", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_Tq_AllwdATCompMax": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_54", + "name": "sVcScATrsm_Tq_AllwdATCompMax", + "configs": ["all"], + "description": "Maximum allowed AT drive compensation used in VcScATrsm. After idle speed compensation.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_n_Eng": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcScDep_B_NeutralMT5", + "name": "sVcScATrsm_n_Eng", + "configs": ["all"], + "description": "Filtered engine speed signal with rockback logic", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_Tq_GearLoss": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScATrsm_Tq_InstReqDeviationFilt1", + "name": "sVcScATrsm_Tq_GearLoss", + "configs": ["all"], + "description": "TBD", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_Tq_ATCompMax": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScATrsm_Tq_InstReqDeviationFilt2", + "name": "sVcScATrsm_Tq_ATCompMax", + "configs": ["all"], + "description": "TBD", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_Tq_PVCGearLosses": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcScATrsm_Tq_InstReqDeviationFilt3", + "name": "sVcScATrsm_Tq_PVCGearLosses", + "configs": ["all"], + "description": "Gear losses according to PVC", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ConvImpOLOk": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcDepExt_D_Counter3", + "name": "yVcScATrsm_B_ConvImpOLOk", + "configs": ["all"], + "description": "OpenLockup torque estimate is valid.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_PtParkReqToWhlsRe": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_3", + "name": "yVcScATrsm_B_PtParkReqToWhlsRe", + "configs": ["all"], + "description": "EPB application request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "yVcScATrsm_B_ActlTqDirFrntNotPark": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_4", + "name": "yVcScATrsm_B_ActlTqDirFrntNotPark", + "configs": ["all"], + "description": "Transmission is surely not in park.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + }, + "sVcScATrsm_D_PtDirAllwdToTrsmActr": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/TLOutport_5", + "name": "sVcScATrsm_D_PtDirAllwdToTrsmActr", + "configs": ["all"], + "description": "FuSa for 7DCT - Bit 0: Fwd, Bit 1: Neut, Bit 2: ParkRls, Bit 3: Rvs", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "ASIL_A/CVC_DISP", + "width": 1 + } + }, + "inports": { + "yVcScAVehMtn_B_nFrntWhlOk": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear1", + "name": "yVcScAVehMtn_B_nFrntWhlOk", + "configs": [["all"]], + "description": "Ok flag for vehicle speed over ground.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Tq_CrShaft": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear2", + "name": "sVcEc_Tq_CrShaft", + "configs": [["all"]], + "description": "Actual crankshaft torque before clutch , instantaneous realisation", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScAVehMtn_n_FrntWhl": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear3", + "name": "sVcScAVehMtn_n_FrntWhl", + "configs": [["all"]], + "description": "TBD", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBCoord_B_MTVehicle": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear4", + "name": "yVcScBCoord_B_MTVehicle", + "configs": [["all"]], + "description": "Manual gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_nEngSafeOk": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox28", + "name": "yVcEc_B_nEngSafeOk", + "configs": [["all"]], + "description": "Engine speed plausibility check with high integrity software for ASIL B concept.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBCoord_B_ATVehicle": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox1", + "name": "yVcScBCoord_B_ATVehicle", + "configs": [["all"]], + "description": "Conventional AT gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_n_TrsmNRecInp1": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/ 3", + "name": "sVcTcm_n_TrsmNRecInp1", + "configs": [["all"]], + "description": "Transmission input speed 1", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16383, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_n_TrsmNRecOutp": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/ 4", + "name": "sVcTcm_n_TrsmNRecOutp", + "configs": [["all"]], + "description": "Transmission output speed", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16383, + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmNRecOk": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox42", + "name": "yVcTcm_B_TrsmNRecOk", + "configs": [["all"]], + "description": "Ok flag for CAN signal group TrsmNRec stating that TrsmNRec was received correctly within a calibratable time and E2E check was verified OK", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmActrPosnOk": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear6", + "name": "yVcTcm_B_TrsmActrPosnOk", + "configs": [["all"]], + "description": "Ok flag for transmission actuator position.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmEngmtLimd3": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_Qf_vVeh2", + "name": "yVcTcm_B_TrsmEngmtLimd3", + "configs": [["all"]], + "description": "CAN signal indicating that transmission lockup status is open.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmEngmtLimd3Ok": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_Qf_vVeh3", + "name": "yVcTcm_B_TrsmEngmtLimd3Ok", + "configs": [["all"]], + "description": "E2E ok flag for the TrsmEngmtLimd3 signal group", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_Te_TrsmOilT": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/ 7", + "name": "sVcTcm_Te_TrsmOilT", + "configs": [["all"]], + "description": "Gear box oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -40, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmOilTOk": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/ 8", + "name": "yVcTcm_B_TrsmOilTOk", + "configs": [["all"]], + "description": "Ok flag for transmission oil temperatire.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmActrPosn2Ok": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox5", + "name": "yVcTcm_B_TrsmActrPosn2Ok", + "configs": [["all"]], + "description": "The signal group TrsmActrPosn2 is received ok with correct E2E.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScANeuMT_B_NeutralMT": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear5", + "name": "yVcScANeuMT_B_NeutralMT", + "configs": [["all"]], + "description": "Gear Lever position indicate gearbox in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBTrsm_B_AllwFrntPrkRels": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng60", + "name": "yVcScBTrsm_B_AllwFrntPrkRels", + "configs": [["all"]], + "description": "Allow front park release", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScAVehMtn_v_FrntWhl": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng3", + "name": "sVcScAVehMtn_v_FrntWhl", + "configs": [["all"]], + "description": "Mean front wheel speed ", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBCoord_B_SbWVehicle": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcDi_B_ReversedGear12", + "name": "yVcScBCoord_B_SbWVehicle", + "configs": [["all"]], + "description": "Shift by wire", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_ReverseMT": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox57", + "name": "yVcEc_B_ReverseMT", + "configs": [["all"]], + "description": "Reversed gear engaged (MT)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_NeutralMT": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox58", + "name": "yVcScIn_B_NeutralMT", + "configs": [["all"]], + "description": "Gear Lever position indicate gearbox in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_EngSafe": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng", + "name": "sVcEc_n_EngSafe", + "configs": [["all"]], + "description": "Engine speed for SPM ASIL B concept", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_GearLoss": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcDtcCta_Tq_CrShBaseReq1", + "name": "sVcDseWt_Tq_GearLoss", + "configs": [["all"]], + "description": "Transmission gear loss", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_GearLossIdle": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcEc_B_ICETorqueFault4", + "name": "sVcDseWt_Tq_GearLossIdle", + "configs": [["all"]], + "description": "Gerbox Loss for compensation at idle", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTqeAEst_Tq_EstCrshTrq": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcEc_B_ICETorqueFault95", + "name": "sVcTqeAEst_Tq_EstCrshTrq", + "configs": [["all"]], + "description": "TBD", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_rt_TrqRat": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/yVcEc_B_ICETorqueFault1", + "name": "sVcEc_rt_TrqRat", + "configs": [["all"]], + "description": "Level2 calculated transmission torque ratio (incl. converter gain if applicable)", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": -30, + "max": 30, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_D_TrsmActrPosn": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng2", + "name": "sVcTcm_D_TrsmActrPosn", + "configs": [["all"]], + "description": "Transmission actuator position.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_D_TrsmActrPosn2TrsmActrPosn": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcGp_D_GearBox3", + "name": "sVcTcm_D_TrsmActrPosn2TrsmActrPosn", + "configs": [["all"]], + "description": "Transmission actuator position. Backup to TrsmActrPosn", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScAVehMtn_v_VehSpdLgtMax": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_Qf_vVeh1", + "name": "sVcScAVehMtn_v_VehSpdLgtMax", + "configs": [["all"]], + "description": "Maximum estimated vehicle speed over ground", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBDrvr_B_DrvrPrsntASILA": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng1", + "name": "yVcScBDrvr_B_DrvrPrsntASILA", + "configs": [["all"]], + "description": "Driver present from CEM and signal received correctly", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScBDrvr_B_DriveAwayAllowedASILA": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng4", + "name": "yVcScBDrvr_B_DriveAwayAllowedASILA", + "configs": [["all"]], + "description": "Drive away is allowed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcBDesDir_D_DrvgDirDes": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng5", + "name": "sVcTcBDesDir_D_DrvgDirDes", + "configs": [["all"]], + "description": "Desired driving direction0# park, 1# R, 2#N, 3#D", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcDc_Tq_CompInst": { + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/sVcEc_n_Eng6", + "name": "sVcDtcDc_Tq_CompInst", + "configs": [["all"]], + "description": "Crank shaft compensation torque (N to D compensation)", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": { + "rVcScATrsm_rt_EstGearRatioMT": { + "type": "Float32", + "unit": "-", + "description": "Estimated gear ratio for MT", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1100_GearRatioMT/Safe_Divide2/Product", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_EstNEngOverNFrntWhlOk": { + "type": "Bool", + "unit": "-", + "description": "Ok flag for engine speed divided by front wheel speed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1200_GearRatioAT/LogicalOperator3", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_EstNEngOverNFrntWhl": { + "type": "Float32", + "unit": "-", + "description": "Engine Speed divided by front wheel sped", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1200_GearRatioAT/Safe_Divide1/Product", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_EstGearRatioAT": { + "type": "Float32", + "unit": "-", + "description": "Estiamted gear ratio for AT", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1200_GearRatioAT/Safe_Divide2/Product", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_AllowInGearEst": { + "type": "Bool", + "unit": "-", + "description": "Allow in gear estimation", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/LogicalOperator18", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_nd_ConvSpeedDiff": { + "type": "Float32", + "unit": "rpm/s", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/DLPF1_pole_v2/LogicalSwitch/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_GearboxLimitedEngagement": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/LogicalOperator7", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_ConvSpeedDiff": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/Relay/LogicalOperator3", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_ConvSpeed": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/LPF1_pole3/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_ConvImpOL": { + "type": "Float32", + "unit": "Nm", + "description": "TBD", + "max": 10000000, + "min": -100000000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/Product1", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_ConvSpeedRaw": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/Safe_Divide3/Product", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_ConvCapPos": { + "type": "Float32", + "unit": "Nm", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/Tq_ConvCapPos/Tq_ConvCapPos", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_t_ConvSpeed": { + "type": "Float32", + "unit": "s", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/t_ConvSpeed/t_ConvSpeed", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_Complnst": { + "type": "Float32", + "unit": "Nm", + "description": "", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Sum1", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_PV1GearLosses": { + "type": "Float32", + "unit": "Nm", + "description": "Gear losses according to PVC", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_EstCrshTrq": { + "type": "Float32", + "unit": "Nm", + "description": "Estimated base torque losses due to gearbox oil temperatures.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_EstCrshTrq/Tq_EstCrshTrq", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_GearLossMax": { + "type": "Float32", + "unit": "Nm", + "description": "Maximum allowed transmission gear losses", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_GearLossMax/Tq_GearLossMax", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Tq_OilCompBase": { + "type": "Float32", + "unit": "Nm", + "description": "Estimated base torque losses due to gearbox oil temperatures.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_OilCompBase/Tq_OilCompBase", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_AllowNotInGearEst": { + "type": "Bool", + "unit": "", + "description": "Circumstances to allow not in gear estimation", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/LogicalOperator3", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_EstInGear": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1420_EstGear/LogicalOperator2", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_D_EstGear": { + "type": "Int8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1420_EstGear/LogicalSwitch10/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_NewGearDetected": { + "type": "Bool", + "unit": "-", + "description": "A specific gear has been detected based on gear ratio.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/EdgeDetectRise1/LogicalOperator", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_GearshiftTimeout": { + "type": "Bool", + "unit": "-", + "description": "Less than a certain time has passed since last being in a specific gear.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/OffDelay/RelationalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_OldGearDiffNewGear": { + "type": "Bool", + "unit": "-", + "description": "Previous detected gear differs from current gear.", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/RelationalOperator4", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_D_OldGear": { + "type": "Int8", + "unit": "-", + "description": "Value of precvious detected gear", + "max": 127, + "min": -128, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/UnitDelay4", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_EstGearRatioRate": { + "type": "Float32", + "unit": "-", + "description": "Estimated change rate of gear ratio", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1500_EstGearRatioRate/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_EstPTDisRolling": { + "type": "Bool", + "unit": "", + "description": "Powertrain Disengaged estimated by considering rolling with engine turned off", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_EstNotInGear": { + "type": "Bool", + "unit": "-", + "description": "Estimate not in gear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/LogicalSwitch10/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_Te_OilAT": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/LogicalSwitch4/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_GearboxDisengagedAT": { + "type": "Bool", + "unit": "", + "description": "GearboxDisengaged for automatic transmissions", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_FrntWhlsParkd": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/5000_ActlTqDir/5100_ActlTqDirFrntAT/LogicalOperator11", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_ActlTqDirFrntNotPark": { + "type": "Bool", + "unit": "-", + "description": "Transmission not in Park", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/5000_ActlTqDir/5100_ActlTqDirFrntAT/LogicalOperator15", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_ActlTqDirFrntFwd": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/5000_ActlTqDir/5200_ActlTqDirFrntMT/LogicalOperator1", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_ActlTqDirFrntPark": { + "type": "Bool", + "unit": "", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/5000_ActlTqDir/Merge6", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmParkLockdBUSbW": { + "type": "Bool", + "unit": "-", + "description": "BU-RAM value of TrsmParkLockdSbW", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/6110_TrsmParkLockATSbWBU/6111_ReadBURAMScIn/RelationalOperator3", + "configs": ["all"], + "width": 1 + }, + "sVcScATrsm_D_TrsmParkLockdBUSbW": { + "type": "UInt16", + "unit": "", + "description": "Stored value of last known TrsmParkLocked. 0 = unlocked, code word value = parked", + "max": 65535, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP_BURAM", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/6110_TrsmParkLockATSbWBU/DataStoreMemory1", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmParkLockdSbW": { + "type": "Bool", + "unit": "-", + "description": "TrsmParkLockd with latch logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/LogicalSwitch2/Switch", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmParkLockdSbWInclInit": { + "type": "Bool", + "unit": "-", + "description": "TrsmParkLockd incl BURAM store", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_n_Eng": { + "type": "Float32", + "unit": "rpm", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/8000_EngineSpeed/LPF1_pole3/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_ConvGain": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/LPF1_pole3/Sum2", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_TrsmTrqRat": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/LogicalSwitch1/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_TrnsmTrqRatEst": { + "type": "Float32", + "unit": "-", + "description": "Estimated transmission torque ratio", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/LogicalSwitch3/Switch", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_TrnsmSpeedRatConv": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/Safe_Divide1/Product", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_ConvGain1": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/Saturation1/MinMax1", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_TrqRatioAT": { + "type": "Float32", + "unit": "-", + "description": "Torque ratio on AT vehicles based on gear ratio", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_GearRatio2TrqRatioAT/rt_GearRatio2TrqRatioAT", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_TrqRatioMT": { + "type": "Float32", + "unit": "-", + "description": "Torque ratio on MT vehicles based on gear ratio", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_GearRatio2TrqRatioMT/rt_GearRatio2TrqRatioMT", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_ConvGainRaw": { + "type": "Float32", + "unit": "-", + "description": "Torque ratio on MT vehicles based on gear ratio", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_TrqRatioConv/rt_TrqRatioConv", + "configs": ["all"], + "width": 1 + }, + "rVcScATrsm_rt_EstGearRatio": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/Merge1", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmActrPosnFwd": { + "type": "Bool", + "unit": "-", + "description": "Transmission actuator in Forward", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2100_ActualPositionDecoding/LogicalOperator27", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmActrPosnVld": { + "type": "Bool", + "unit": "", + "description": "TCM position info is judged as valid in VcScATrsm", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2100_ActualPositionDecoding/LogicalOperator29", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmActrPosnPark": { + "type": "Bool", + "unit": "-", + "description": "Transmission actuator in Park", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2100_ActualPositionDecoding/LogicalOperator31", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmActrPosnRev": { + "type": "Bool", + "unit": "-", + "description": "Transmission actuator in Reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2100_ActualPositionDecoding/LogicalOperator33", + "configs": ["all"], + "width": 1 + }, + "xVcScATrsm_B_TrsmActrPosnNtrl": { + "type": "Bool", + "unit": "-", + "description": "Transmission actuator in Neutral", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "ASIL_A/CVC_DISP", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2100_ActualPositionDecoding/LogicalOperator35", + "configs": ["all"], + "width": 1 + } + }, + "calib_consts": { + "cVcScATrsm_n_MINnWheelEIG": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum wheel rpm used to estimate gear ratio", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1100_GearRatioMT/n_MINnWheelEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MINnWheelEIGAT": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum wheel rpm used to estimate gear ratio for AT", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1200_GearRatioAT/n_MINnWheelEIGAT", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_FinalDriveEIGAT": { + "type": "Float32", + "unit": "-", + "description": "Final drive ratio, AT", + "max": 1000, + "min": 0.001, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1200_GearRatioAT/rt_FinalDriveEIGAT", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Tq_LowerCrshTqAGE": { + "type": "Float32", + "unit": "Nm", + "description": "Engine torque lower than this value allows in gear estimation due to engine braking", + "max": 500, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/Tq_LowerCrshTqAGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Tq_MINCrshTqAGE": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum engine torque to allow gear estimatation", + "max": 500, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/Tq_MINCrshTqAGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MINnEngAGE": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum engine rpm to allow in gear estimatation", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/n_MINnEngAGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MINnEngANGE": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum RPM for detecting disengaged", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/n_MINnEngANGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MinFrntWhlAGE": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum front wheel rotational speed to allow gear estimatation", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/n_MinFrntWhlAGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MinFrntWhlANGE": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum front wheel rotational speed for detecting disengaged.", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/n_MinFrntWhlANGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_MaxGearRatioRateAGE": { + "type": "Float32", + "unit": "-", + "description": "Maximum derivative of gear ratio (absolute value) to allow in gear estimation", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1300_ActivateInGearAndNotInGearEstimation/rt_MaxGearRatioRateAGE", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_Use1GearEIG": { + "type": "Bool", + "unit": "-", + "description": "If 1st gear shall be detected by EstGear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/B_Use1GearEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear1RatioHigh": { + "type": "Float32", + "unit": "-", + "description": "Gear 1 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear1RatioHigh", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear1RatioLow": { + "type": "Float32", + "unit": "-", + "description": "Gear 1 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear1RatioLow", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear2RatioHigh": { + "type": "Float32", + "unit": "-", + "description": "Gear 2 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear2RatioHigh", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear2RatioLow": { + "type": "Float32", + "unit": "-", + "description": "Gear 2 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear2RatioLow", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear3RatioHigh": { + "type": "Float32", + "unit": "-", + "description": "Gear 3 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear3RatioHigh", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear3RatioLow": { + "type": "Float32", + "unit": "-", + "description": "Gear 3 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear3RatioLow", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear4RatioHigh": { + "type": "Float32", + "unit": "-", + "description": "Gear 4 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear4RatioHigh", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear4RatioLow": { + "type": "Float32", + "unit": "-", + "description": "Gear 4 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear4RatioLow", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear5RatioHigh": { + "type": "Float32", + "unit": "-", + "description": "Gear 5 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear5RatioHigh", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear5RatioLow": { + "type": "Float32", + "unit": "-", + "description": "Gear 5 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear5RatioLow", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear6RatioHigh": { + "type": "Float32", + "unit": "-", + "description": "Gear 6 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear6RatioHigh", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_Gear6RatioLow": { + "type": "Float32", + "unit": "-", + "description": "Gear 6 Ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/rt_Gear6RatioLow", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_TDPreEstGear": { + "type": "Float32", + "unit": "s", + "description": "Rise delay to determine that a gear has been found based on gear ratio.", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL_MERGEABLE", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1410_GearEstEngaged/t_TDPreEstGear", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_TDPreEstInGear": { + "type": "Float32", + "unit": "s", + "description": "Rise delay where ActivateEstGear has to be true, shall be matched to rise delay in EstGear.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1420_EstGear/t_TDPreEstInGear", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_Gearshift_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/B_Gearshift_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_Gearshift_swi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/B_Gearshift_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_DurationGearshiftDet": { + "type": "Float32", + "unit": "s", + "description": "Maximum time between two gear detections for to detect gearshift", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/t_DurationGearshiftDet", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_InGearGearshiftDet": { + "type": "Float32", + "unit": "s", + "description": "Rise delay in determining being in gear for gearshift detection based on EstGear and EstInGear", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1400_InGearEstimationAndGearShiftDetection/1430_GearshiftDetection/t_InGearGearshiftDet", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_GearRatioLPFiltEIG": { + "type": "Float32", + "unit": "s", + "description": "Gear ratio LowPass filter limit", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1500_EstGearRatioRate/t_GearRatioLPFiltEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MaxEngPowDisRolling1": { + "type": "Float32", + "unit": "rpm", + "description": "Disengaged if under this RPM and v > y.", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/n_MaxEngPowDisRolling1", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MaxEngPowDisRolling2": { + "type": "Float32", + "unit": "rpm", + "description": "Disengaged if under this RPM and v > y.", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/n_MaxEngPowDisRolling2", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MaxEngPowDisRolling3": { + "type": "Float32", + "unit": "rpm", + "description": "Disengaged if under this RPM and v > y.", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/n_MaxEngPowDisRolling3", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MinWhlPowDisRolling1": { + "type": "Float32", + "unit": "rpm", + "description": "Disengaged if over this Speed and under x RPM", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/n_MinWhlPowDisRolling1", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MinWhlPowDisRolling2": { + "type": "Float32", + "unit": "rpm", + "description": "Disengaged if over this Speed and under x RPM", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/n_MinWhlPowDisRolling2", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_MinWhlPowDisRolling3": { + "type": "Float32", + "unit": "rpm", + "description": "Disengaged if over this Speed and under x RPM", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/n_MinWhlPowDisRolling3", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_PowDisRolling1": { + "type": "Float32", + "unit": "s", + "description": "rise delay in detecting disengaged by rpmy.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/t_PowDisRolling1", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_PowDisRolling2": { + "type": "Float32", + "unit": "s", + "description": "rise delay in detecting disengaged by rpmy.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/t_PowDisRolling2", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_PowDisRolling3": { + "type": "Float32", + "unit": "s", + "description": "rise delay in detecting disengaged by rpmy.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/1610_RollingEngineOff/t_PowDisRolling3", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_EstNotInGearEIG_dbi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/B_EstNotInGearEIG_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_EstNotInGearEIG_swi": { + "type": "Bool", + "unit": "-", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/B_EstNotInGearEIG_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_GearRatio2PowDisEIG": { + "type": "Float32", + "unit": "-", + "description": "Gear Ratio where we estimate to be disengaged", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/rt_GearRatio2PowDisEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_GearRatioHighPowDisEIG": { + "type": "Float32", + "unit": "-", + "description": "Gear Ratio where we estimate to be disengaged", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/rt_GearRatioHighPowDisEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_GearRatioPowDisEIG": { + "type": "Float32", + "unit": "-", + "description": "Gear Ratio where we estimate to be disengaged", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/rt_GearRatioPowDisEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_MinGearRatioRate2EIG": { + "type": "Float32", + "unit": "-", + "description": "Minimum gear ratio rate to allow not in gear estimation", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/rt_MinGearRatioRate2EIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_MinGearRatioRateEIG": { + "type": "Float32", + "unit": "-", + "description": "Minimum gear ratio to allow not in gear estimation", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/rt_MinGearRatioRateEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_TDNotInGearEstEIG": { + "type": "Float32", + "unit": "s", + "description": "Global rise delay for EstNotInGear", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/t_TDNotInGearEstEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_TDPowDis2EIG": { + "type": "Float32", + "unit": "s", + "description": "Rise delay in determining disengaged based on gear ratio2 and gear ratio rate2.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/t_TDPowDis2EIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_TDPowDisEIG": { + "type": "Float32", + "unit": "s", + "description": "Rise delay in determining disengaged based on gear ratio and gear ratio rate.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/t_TDPowDisEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_TDRatioHighEIG": { + "type": "Float32", + "unit": "s", + "description": "Rise delay in disengagement detection based solely on high gear ratio.", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1600_NotInGearEstimation/t_TDRatioHighEIG", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_UseL2TrqRat": { + "type": "Bool", + "unit": "-", + "description": "Switch to use Level 2 estimated transmission torque ratio", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/B_UseL2TrqRat", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_EstGearRatioMax": { + "type": "Float32", + "unit": "-", + "description": "Maximum estimated gear ratio", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_EstGearRatioMax", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_EstGearRatioMin": { + "type": "Float32", + "unit": "-", + "description": "Minimum estimated gear ratio", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_EstGearRatioMin", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_TrnsmTrqRatDef": { + "type": "Float32", + "unit": "-", + "description": "Default estimated transmission torque ratio in case of GearboxInRpm fault and front wheel speed fault", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_TrnsmTrqRatDef", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_TrnsmTrqRatMax": { + "type": "Float32", + "unit": "-", + "description": "Maximum estimated transmission torque ratio", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_TrnsmTrqRatMax", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_rt_TrnsmTrqRatMin": { + "type": "Float32", + "unit": "-", + "description": "Minimum estimated transmission torque ratio", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_TrnsmTrqRatMin", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_ConvGain": { + "type": "Float32", + "unit": "s", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/t_ConvGain", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_TrsmActrPosn": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2100_ActualPositionDecoding/B_TrsmActrPosn", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_UseLockUpClosed": { + "type": "Bool", + "unit": "", + "description": "TBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/B_UseLockUpClosed", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_ConvMaxDiff": { + "type": "Float32", + "unit": "rpm", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/n_ConvMaxDiff", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_ConvSpeedDiffOff": { + "type": "Float32", + "unit": "rpm", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/n_ConvSpeedDiffOff", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_ConvSpeedDiffOn": { + "type": "Float32", + "unit": "rpm", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/n_ConvSpeedDiffOn", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_n_ConvSpeedNEngMin": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum absolute engine speed to judge closed lockup", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/n_ConvSpeedNEngMin", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_nd_ConvSpeedGradLim": { + "type": "Float32", + "unit": "rpm/s", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/nd_ConvSpeedGradLim", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_ConvSpeedFlt": { + "type": "Float32", + "unit": "s", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/t_ConvSpeedFlt", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_GearboxLimEngOk": { + "type": "Float32", + "unit": "s", + "description": "Time to listen to accept GearboxLimitedEngagement after loss of communication.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2200_LockUp/t_GearboxLimEngOk", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Ted_OilATFall": { + "type": "Float32", + "unit": "deg C/s", + "description": "Riserate of AT gearbox oiltemperature", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2400_GearboxOilTemp/Ted_OilATFall", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Ted_OilATRise": { + "type": "Float32", + "unit": "deg C/s", + "description": "Riserate of AT gearbox oiltemperature", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2400_GearboxOilTemp/Ted_OilATRise", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_UseATComp": { + "type": "Bool", + "unit": "", + "description": "Enable using ATComp functionality (inherited from 313)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/B_UseATComp", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_UseTqGearLoss": { + "type": "Bool", + "unit": "", + "description": "Enable using Gear Losses from TCM", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/B_UseTqGearLoss", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Tq_ComplnstOffset": { + "type": "Float32", + "unit": "Nm", + "description": "offset for GearLoss from cvc", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_ComplnstOffset", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Tq_GearLossCvcOffset": { + "type": "Float32", + "unit": "Nm", + "description": "Input offset for GearLoss from cvc", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_GearLossCvcOffset", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_GearboxLimitedEngagement_dbi": { + "type": "Bool", + "unit": "-", + "description": "Override yVcScATrsm_B_GearboxLimitedEngagement", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/B_GearboxLimitedEngagement_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_GearboxLimitedEngagement_swi": { + "type": "Bool", + "unit": "", + "description": "Override yVcScATrsm_B_GearboxLimitedEngagement", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/B_GearboxLimitedEngagement_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_OilAT_swi": { + "type": "Bool", + "unit": "", + "description": "Override sVcScATrsm_Te_OilAT", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/B_OilAT_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_Te_OilAT_dbi": { + "type": "Float32", + "unit": "deg C", + "description": "Override sVcScATrsm_Te_OilAT", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/Te_OilAT_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_GearboxDisengagedAT_dbi": { + "type": "Bool", + "unit": "-", + "description": "Override B_GearboxDisengagedAT", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/B_GearboxDisengagedAT_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_GearboxDisengagedAT_swi": { + "type": "Bool", + "unit": "", + "description": "Override B_GearboxDisengagedAT", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/B_GearboxDisengagedAT_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_PN_dbi": { + "type": "Bool", + "unit": "-", + "description": "Override yVcScATrsm_B_PN", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/B_PN_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_PN_swi": { + "type": "Bool", + "unit": "", + "description": "Override yVcScATrsm_B_PN", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/B_PN_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_PowertrainDisengagedASILB_dbi": { + "type": "Bool", + "unit": "-", + "description": "Override yVcScATrsm_B_PowertrainDisengagedASILB", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/B_PowertrainDisengagedASILB_dbi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_PowertrainDisengagedASILB_swi": { + "type": "Bool", + "unit": "", + "description": "Override yVcScATrsm_B_PowertrainDisengagedASILB", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/4000_PowertrainDisengaged/B_PowertrainDisengagedASILB_swi", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_v_FrntWhlsParkdMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed when front wheel lock engages physically", + "max": 500, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/5000_ActlTqDir/5100_ActlTqDirFrntAT/v_FrntWhlsParkdMax", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_ReadTrsmParkLockdSbWBU": { + "type": "Bool", + "unit": "", + "description": "Read data from BU-RAM for TrsmParkLockdSbW", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/6110_TrsmParkLockATSbWBU/B_ReadTrsmParkLockdSbWBU", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_WriteTrsmParkLockdSbWBU": { + "type": "Bool", + "unit": "", + "description": "Write data to BU-RAM for TrsmParkLockd SbW", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/6110_TrsmParkLockATSbWBU/B_WriteTrsmParkLockdSbWBU", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_B_TrsmParkLockdSbWBUInit": { + "type": "Bool", + "unit": "-", + "description": "Use logic for saving TrsmParkLockdSbW to BU-RAM", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/B_TrsmParkLockdSbWBUInit", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_ActlTqDirParkLockdSbWDly": { + "type": "Float32", + "unit": "s", + "description": "Time post AllwFrntParkRls FALSE that Park information is evaluated", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/6000_TrsmParkLock/6100_TrsmParkLockATSbW/t_ActlTqDirParkLockdSbWDly", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_PtDirAllwdDelay": { + "type": "Float32", + "unit": "s", + "description": "TBD", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/7000_PtDirAllwdToTrsmActr/t_PtDirAllwdDelay", + "configs": ["all"], + "width": 1 + }, + "cVcScATrsm_t_nEngLPFiltEIG": { + "type": "Float32", + "unit": "s", + "description": "engine rpm LowPass filter limit", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/8000_EngineSpeed/t_nEngLPFiltEIG", + "configs": ["all"], + "width": 1 + }, + "tVcScATrsm_rt_GearRatio2TrqRatioAT_x": { + "type": "Float32", + "unit": "-", + "description": "Gearbox gear ratio as input to calculating worst case torque ratio with unknown lockup status.", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_GearRatio2TrqRatioAT/rt_GearRatio2TrqRatioAT_x", + "configs": ["all"], + "width": [1, 5] + }, + "tVcScATrsm_rt_GearRatio2TrqRatioMT_x": { + "type": "Float32", + "unit": "-", + "description": "Gear ratio used for estimating torque ratio on MT vehicles", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_GearRatio2TrqRatioMT/rt_GearRatio2TrqRatioMT_x", + "configs": ["all"], + "width": [1, 5] + }, + "tVcScATrsm_rt_TrqRatioConv_x": { + "type": "Float32", + "unit": "-", + "description": "Gearbox input speed to engine speed ratio", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_TrqRatioConv/rt_TrqRatioConv_x", + "configs": ["all"], + "width": [1, 9] + }, + "tVcScATrsm_Tq_ConvCapPos_x": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": 200, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/Tq_ConvCapPos/Tq_ConvCapPos_x", + "configs": ["all"], + "width": [1, 11] + }, + "tVcScATrsm_t_ConvSpeed_x": { + "type": "Float32", + "unit": "-", + "description": "TBD", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/t_ConvSpeed/t_ConvSpeed_x", + "configs": ["all"], + "width": [1, 5] + }, + "tVcScATrsm_Tq_EstCrshTrq_x": { + "type": "Float32", + "unit": "Nm", + "description": "Estimated Crankshaft torque used for AT compensation", + "max": 180, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_EstCrshTrq/Tq_EstCrshTrq_x", + "configs": ["all"], + "width": [1, 5] + }, + "mVcScATrsm_Tq_GearLossMax_c": { + "type": "Float32", + "unit": "Nm", + "description": "Crankshaft torque for maximum transmission losses", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_GearLossMax/Tq_GearLossMax_c", + "configs": ["all"], + "width": [1, 8] + }, + "mVcScATrsm_Tq_GearLossMax_r": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed for max transmission losses", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_GearLossMax/Tq_GearLossMax_r", + "configs": ["all"], + "width": [1, 8] + }, + "tVcScATrsm_Tq_OilCompBase_x": { + "type": "Float32", + "unit": "deg C", + "description": "Gearbox oil temperature used for AT compensation", + "max": 180, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_OilCompBase/Tq_OilCompBase_x", + "configs": ["all"], + "width": [1, 4] + }, + "tVcScATrsm_rt_GearRatio2TrqRatioAT": { + "type": "Float32", + "unit": "-", + "description": "Worst case torque ratio as a function of gear ratio, assuming unknown lockup status.", + "max": 50, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_GearRatio2TrqRatioAT/rt_GearRatio2TrqRatioAT", + "configs": ["all"], + "width": [1, 5] + }, + "tVcScATrsm_rt_GearRatio2TrqRatioMT": { + "type": "Float32", + "unit": "-", + "description": "Torque ratio on MT vehicles based on gear ratio", + "max": 30, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_GearRatio2TrqRatioMT/rt_GearRatio2TrqRatioMT", + "configs": ["all"], + "width": [1, 5] + }, + "tVcScATrsm_rt_TrqRatioConv": { + "type": "Float32", + "unit": "-", + "description": "Converter torque amplification factor", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/1000_EstimatedInGear/1700_TorqueRatioCalculation/rt_TrqRatioConv/rt_TrqRatioConv", + "configs": ["all"], + "width": [1, 9] + }, + "tVcScATrsm_Tq_ConvCapPos": { + "type": "Float32", + "unit": "Nm", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/Tq_ConvCapPos/Tq_ConvCapPos", + "configs": ["all"], + "width": [1, 11] + }, + "tVcScATrsm_t_ConvSpeed": { + "type": "Float32", + "unit": "s", + "description": "TBD", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2300_ConvImpOL/t_ConvSpeed/t_ConvSpeed", + "configs": ["all"], + "width": [1, 5] + }, + "tVcScATrsm_Tq_EstCrshTrq": { + "type": "Float32", + "unit": "Nm", + "description": "Estimated base torque losses due to estimated Crankshaft torque", + "max": 200, + "min": -40, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_EstCrshTrq/Tq_EstCrshTrq", + "configs": ["all"], + "width": [1, 5] + }, + "mVcScATrsm_Tq_GearLossMax": { + "type": "Float32", + "unit": "Nm", + "description": "Maximum allowed transmission losses", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_GearLossMax/Tq_GearLossMax", + "configs": ["all"], + "width": [8, 8] + }, + "tVcScATrsm_Tq_OilCompBase": { + "type": "Float32", + "unit": "Nm", + "description": "Estimated base torque losses due to gearbox oil temperatures.", + "max": 200, + "min": -40, + "lsb": 1, + "offset": 0, + "class": "ASIL_A/CVC_CAL", + "handle": "VcScATrsm__denso/VcScATrsm/Subsystem/VcScATrsm/VcScATrsm/2000_GearboxAT/2500_GbxLosses/Tq_OilCompBase/Tq_OilCompBase", + "configs": ["all"], + "width": [1, 4] + } + } + } +} diff --git a/tests/pybuild/cnfg_files/ProjectCfg.json b/tests/pybuild/cnfg_files/ProjectCfg.json new file mode 100644 index 0000000..9640522 --- /dev/null +++ b/tests/pybuild/cnfg_files/ProjectCfg.json @@ -0,0 +1,14 @@ +{ + "ConfigFileVersion": "0.0.1", + "BaseConfig": "./BaseConfig.json", + "ProjectInfo": { + "projConfig": "GEP3_BEV", + "a2LFileName": "VEA_VED4_SPA.a2l", + "baseNvmStructs": "nvm_structs_ref_empty.json", + "ecuSupplier": "Denso", + "ecuType": "G2", + "unitCfgDeliveryDir": "../output/UnitCfgs", + "prjUnitCfgDir": "./cnfg_files/unit_cfgs/" + }, + "UnitCfgs": "./rasters.json" +} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/SPMEMSInterfaceRequirements_ExportedToCSV.xlsm b/tests/pybuild/cnfg_files/SPMEMSInterfaceRequirements_ExportedToCSV.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..a92ca71afcb51e2a37d7433bc59093c591cf7da6 GIT binary patch literal 449555 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

    |H(IZ$@V?GvN%>D*f+(4l86O+kmM*RW4kAA&&0| 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�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 + *** Target : Generic + *** ANSI-C compatible code : yes + *** Code Optimization : enabled + *** Constant style : decimal + *** Clean code option : enabled + *** Logging mode : Do not log anything + *** Code Coverage : disabled + *** Generate empty conditional branches : disabled + *** Loop unroll threshold : 5 + *** Shift mode : automatic + *** Handle unscaled SF expr. with TL type : enabled + *** Assignment of conditions : AllBooleanOutputs + *** Scope reduction only to function level : disabled + *** Exploit ranges if not erasable : disabled + *** Exploit Compute Through Overflow : optimized + *** Linker sections : enabled + *** Enable Assembler : disabled + *** Variable name length : 31 chars + *** Use global bitfields : disabled + *** Stateflow: use of bitfields : enabled + *** State activity encoding limit : 5 + *** Omit zero inits in restart function : disabled + *** Share functions between TL subsystems : enabled + *** Generate 64bit functions : disabled + *** Inlining Threshold : 6 + *** Line break limit : 100 + *** Target optimized boolean data type : enabled + *** Keep saturation elements : disabled + *** Extended variable sharing : disabled + *** Extended lifetime optimization : enabled + *** Style definition file : C:\TL4_3\dSPACE TargetLink 4.3\Matlab\Tl\Config\code + *** gen\cconfig.xml + *** Root style sheet : C:\TL4_3\dSPACE TargetLink 4.3\Matlab\Tl\XML\CodeGen + *** \Stylesheets\TL_CSourceCodeSS.xsl + *** + *** SUBSYS CORRESPONDING SIMULINK SUBSYSTEM + *** SVmcPmm__HE1 VcVmcPmm + *** SVmcPmm__HE2 VcVmcPmm/VcVmcPmm + *** SVmcPmm__HE3 VcVmcPmm/VcVmcPmm/1000_Hev + *** SVmcPmm__HE4 VcVmcPmm/VcVmcPmm/PreprocessorName + *** SVmcPmm__HE5 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval + *** SVmcPmm__HE6 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control + *** SVmcPmm__HE7 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map + *** SVmcPmm__HE8 VcVmcPmm/VcVmcPmm/1000_Hev/y1 + *** SVmcPmm__HE9 VcVmcPmm/VcVmcPmm/1000_Hev/y11 + *** SVmcPmm__HE10 VcVmcPmm/VcVmcPmm/1000_Hev/y19 + *** SVmcPmm__HE11 VcVmcPmm/VcVmcPmm/1000_Hev/y29 + *** SVmcPmm__HE12 VcVmcPmm/VcVmcPmm/1000_Hev/y3 + *** SVmcPmm__HE13 VcVmcPmm/VcVmcPmm/1000_Hev/y49 + *** SVmcPmm__HE14 VcVmcPmm/VcVmcPmm/1000_Hev/y50 + *** SVmcPmm__HE15 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + *** SVmcPmm__HE16 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus + *** SVmcPmm__HE17 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake + *** SVmcPmm__HE18 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation + *** SVmcPmm__HE19 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev + *** SVmcPmm__HE20 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Out1 + *** SVmcPmm__HE21 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/PreprocessorName + *** SVmcPmm__HE22 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/PreprocessorName1 + *** SVmcPmm__HE23 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/PreprocessorName2 + *** SVmcPmm__HE24 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/y5 + *** SVmcPmm__HE25 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev + *** SVmcPmm__HE26 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown + *** SVmcPmm__HE27 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive + *** SVmcPmm__HE28 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/PreprocessorName + *** SVmcPmm__HE29 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/PreprocessorName1 + *** SVmcPmm__HE30 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch1 + *** SVmcPmm__HE31 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch10 + *** SVmcPmm__HE32 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch11 + *** SVmcPmm__HE33 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch12 + *** SVmcPmm__HE34 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch13 + *** SVmcPmm__HE35 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch17 + *** SVmcPmm__HE36 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch18 + *** SVmcPmm__HE37 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch2 + *** SVmcPmm__HE38 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch3 + *** SVmcPmm__HE39 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch4 + *** SVmcPmm__HE40 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch5 + *** SVmcPmm__HE41 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch6 + *** SVmcPmm__HE42 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch7 + *** SVmcPmm__HE43 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch8 + *** SVmcPmm__HE44 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/LogicalSwitch9 + *** SVmcPmm__HE45 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OffDelay1 + *** SVmcPmm__HE46 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OnDelay1 + *** SVmcPmm__HE47 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OnDelay2 + *** SVmcPmm__HE48 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OnDelay3 + *** SVmcPmm__HE49 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OnDelay4 + *** SVmcPmm__HE50 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/SR_FF7 + *** SVmcPmm__HE51 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OffDelay1/y + *** SVmcPmm__HE52 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11111_PowerDown/OffDelay1/y/EncapsulatedSubsystem + *** SVmcPmm__HE53 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT + *** SVmcPmm__HE54 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT + *** SVmcPmm__HE55 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch1 + *** SVmcPmm__HE56 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch10 + *** SVmcPmm__HE57 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch11 + *** SVmcPmm__HE58 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch12 + *** SVmcPmm__HE59 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch13 + *** SVmcPmm__HE60 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch14 + *** SVmcPmm__HE61 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch15 + *** SVmcPmm__HE62 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch16 + *** SVmcPmm__HE63 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch17 + *** SVmcPmm__HE64 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch18 + *** SVmcPmm__HE65 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch2 + *** SVmcPmm__HE66 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch20 + *** SVmcPmm__HE67 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch21 + *** SVmcPmm__HE68 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch23 + *** SVmcPmm__HE69 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch3 + *** SVmcPmm__HE70 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch4 + *** SVmcPmm__HE71 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch5 + *** SVmcPmm__HE72 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch6 + *** SVmcPmm__HE73 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch7 + *** SVmcPmm__HE74 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch8 + *** SVmcPmm__HE75 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/LogicalSwitch9 + *** SVmcPmm__HE76 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/OffDelay1 + *** SVmcPmm__HE77 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/OffDelay3 + *** SVmcPmm__HE78 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/OnDelay4 + *** SVmcPmm__HE79 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out1 + *** SVmcPmm__HE80 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out10 + *** SVmcPmm__HE81 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out11 + *** SVmcPmm__HE82 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out2 + *** SVmcPmm__HE83 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out3 + *** SVmcPmm__HE84 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out4 + *** SVmcPmm__HE85 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out5 + *** SVmcPmm__HE86 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out6 + *** SVmcPmm__HE87 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out7 + *** SVmcPmm__HE88 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out8 + *** SVmcPmm__HE89 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out9 + *** SVmcPmm__HE90 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Relay + *** SVmcPmm__HE91 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Relay1 + *** SVmcPmm__HE92 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Relay2 + *** SVmcPmm__HE93 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/SR_FF2 + *** SVmcPmm__HE94 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/EdgeDetectRise1 + *** SVmcPmm__HE95 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16 + *** SVmcPmm__HE96 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1 + *** SVmcPmm__HE97 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7 + *** SVmcPmm__HE98 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalSwitch18 + *** SVmcPmm__HE99 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out1/EncapsulatedSubsystem + *** SVmcPmm__HE100 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out10/EncapsulatedSubsystem + *** SVmcPmm__HE101 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out11/EncapsulatedSubsystem + *** SVmcPmm__HE102 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out2/EncapsulatedSubsystem + *** SVmcPmm__HE103 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out3/EncapsulatedSubsystem + *** SVmcPmm__HE104 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out4/EncapsulatedSubsystem + *** SVmcPmm__HE105 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out5/EncapsulatedSubsystem + *** SVmcPmm__HE106 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out6/EncapsulatedSubsystem + *** SVmcPmm__HE107 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out7/EncapsulatedSubsystem + *** SVmcPmm__HE108 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out8/EncapsulatedSubsystem + *** SVmcPmm__HE109 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + *** ev/11112_StopStartActive/Out9/EncapsulatedSubsystem + *** SVmcPmm__HE110 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/EdgeDetectRise1 + *** SVmcPmm__HE111 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch1 + *** SVmcPmm__HE112 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch2 + *** SVmcPmm__HE113 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch3 + *** SVmcPmm__HE114 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch4 + *** SVmcPmm__HE115 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5 + *** SVmcPmm__HE116 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch6 + *** SVmcPmm__HE117 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch7 + *** SVmcPmm__HE118 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1 + *** SVmcPmm__HE119 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1 + *** SVmcPmm__HE120 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3 + *** SVmcPmm__HE121 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4 + *** SVmcPmm__HE122 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/PreprocessorName + *** SVmcPmm__HE123 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq1 + *** SVmcPmm__HE124 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq2 + *** SVmcPmm__HE125 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch1 + *** SVmcPmm__HE126 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch2 + *** SVmcPmm__HE127 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch3 + *** SVmcPmm__HE128 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch4 + *** SVmcPmm__HE129 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch5 + *** SVmcPmm__HE130 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch6 + *** SVmcPmm__HE131 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch7 + *** SVmcPmm__HE132 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch8 + *** SVmcPmm__HE133 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1 + *** SVmcPmm__HE134 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3 + *** SVmcPmm__HE135 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF1 + *** SVmcPmm__HE136 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF2 + *** SVmcPmm__HE137 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay + *** SVmcPmm__HE138 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh + *** SVmcPmm__HE139 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq1/EncapsulatedSubsystem + *** SVmcPmm__HE140 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq2/EncapsulatedSubsystem + *** SVmcPmm__HE141 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2 + *** SVmcPmm__HE142 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1 + *** SVmcPmm__HE143 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3 + *** SVmcPmm__HE144 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4 + *** SVmcPmm__HE145 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2 + *** SVmcPmm__HE146 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4 + *** SVmcPmm__HE147 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch5 + *** SVmcPmm__HE148 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6 + *** SVmcPmm__HE149 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/OnDelay + *** SVmcPmm__HE150 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1 + *** SVmcPmm__HE151 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8 + *** SVmcPmm__HE152 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Saturation + *** SVmcPmm__HE153 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg + *** SVmcPmm__HE154 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient + *** SVmcPmm__HE155 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Logica + *** lSwitch + *** SVmcPmm__HE156 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest + *** SVmcPmm__HE157 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle + *** SVmcPmm__HE158 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/LogicalSwi + *** tch1 + *** SVmcPmm__HE159 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF2 + *** SVmcPmm__HE160 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF4 + *** SVmcPmm__HE161 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SignalDela + *** y1 + *** SVmcPmm__HE162 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/Logica + *** lSwitch3 + *** SVmcPmm__HE163 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDela + *** y + *** SVmcPmm__HE164 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDela + *** y1 + *** SVmcPmm__HE165 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDela + *** y2 + *** SVmcPmm__HE166 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDela + *** y2/y + *** SVmcPmm__HE167 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDela + *** y2/y/EncapsulatedSubsystem + *** SVmcPmm__HE168 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Out1/EncapsulatedSubsystem + *** SVmcPmm__HE169 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/y5/EncapsulatedSubsystem + *** SVmcPmm__HE170 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control + *** SVmcPmm__HE171 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control + *** SVmcPmm__HE172 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control + *** SVmcPmm__HE173 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + *** SVmcPmm__HE174 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval + *** SVmcPmm__HE175 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1270_12VStartEnable + *** SVmcPmm__HE176 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch1 + *** SVmcPmm__HE177 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch11 + *** SVmcPmm__HE178 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2 + *** SVmcPmm__HE179 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4 + *** SVmcPmm__HE180 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch7 + *** SVmcPmm__HE181 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch8 + *** SVmcPmm__HE182 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch9 + *** SVmcPmm__HE183 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1 + *** SVmcPmm__HE184 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14 + *** SVmcPmm__HE185 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out15 + *** SVmcPmm__HE186 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17 + *** SVmcPmm__HE187 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out19 + *** SVmcPmm__HE188 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2 + *** SVmcPmm__HE189 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out20 + *** SVmcPmm__HE190 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out24 + *** SVmcPmm__HE191 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out25 + *** SVmcPmm__HE192 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32 + *** SVmcPmm__HE193 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out4 + *** SVmcPmm__HE194 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out42 + *** SVmcPmm__HE195 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out43 + *** SVmcPmm__HE196 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/PreprocessorName + *** SVmcPmm__HE197 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/PreprocessorName1 + *** SVmcPmm__HE198 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/PreprocessorName2 + *** SVmcPmm__HE199 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS + *** SVmcPmm__HE200 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver + *** SVmcPmm__HE201 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm + *** SVmcPmm__HE202 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em + *** SVmcPmm__HE203 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1214_Brake + *** SVmcPmm__HE204 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1215_Sapp + *** SVmcPmm__HE205 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans + *** SVmcPmm__HE206 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems + *** SVmcPmm__HE207 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv + *** SVmcPmm__HE208 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim + *** SVmcPmm__HE209 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt + *** SVmcPmm__HE210 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm + *** SVmcPmm__HE211 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121C_Fuel + *** SVmcPmm__HE212 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG + *** SVmcPmm__HE213 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote + *** SVmcPmm__HE214 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl + *** SVmcPmm__HE215 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave + *** SVmcPmm__HE216 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis + *** SVmcPmm__HE217 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121I_Obd + *** SVmcPmm__HE218 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep + *** SVmcPmm__HE219 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC + *** SVmcPmm__HE220 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121L_Rc + *** SVmcPmm__HE221 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** SVmcPmm__HE222 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V + *** SVmcPmm__HE223 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode + *** SVmcPmm__HE224 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i + *** SVmcPmm__HE225 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd + *** SVmcPmm__HE226 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + *** SVmcPmm__HE227 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/BypassSwitch13 + *** SVmcPmm__HE228 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable + *** SVmcPmm__HE229 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/DID + *** SVmcPmm__HE230 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect + *** SVmcPmm__HE231 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect1 + *** SVmcPmm__HE232 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect2 + *** SVmcPmm__HE233 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetectRise1 + *** SVmcPmm__HE234 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch + *** SVmcPmm__HE235 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1 + *** SVmcPmm__HE236 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch10 + *** SVmcPmm__HE237 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch11 + *** SVmcPmm__HE238 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch12 + *** SVmcPmm__HE239 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch13 + *** SVmcPmm__HE240 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch14 + *** SVmcPmm__HE241 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15 + *** SVmcPmm__HE242 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch16 + *** SVmcPmm__HE243 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17 + *** SVmcPmm__HE244 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch18 + *** SVmcPmm__HE245 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19 + *** SVmcPmm__HE246 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2 + *** SVmcPmm__HE247 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch20 + *** SVmcPmm__HE248 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch21 + *** SVmcPmm__HE249 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch22 + *** SVmcPmm__HE250 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch23 + *** SVmcPmm__HE251 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch24 + *** SVmcPmm__HE252 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch25 + *** SVmcPmm__HE253 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch26 + *** SVmcPmm__HE254 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch27 + *** SVmcPmm__HE255 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch28 + *** SVmcPmm__HE256 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch29 + *** SVmcPmm__HE257 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3 + *** SVmcPmm__HE258 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch30 + *** SVmcPmm__HE259 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch31 + *** SVmcPmm__HE260 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch32 + *** SVmcPmm__HE261 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch33 + *** SVmcPmm__HE262 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch34 + *** SVmcPmm__HE263 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch35 + *** SVmcPmm__HE264 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch36 + *** SVmcPmm__HE265 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch37 + *** SVmcPmm__HE266 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch38 + *** SVmcPmm__HE267 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch39 + *** SVmcPmm__HE268 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch4 + *** SVmcPmm__HE269 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch40 + *** SVmcPmm__HE270 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch41 + *** SVmcPmm__HE271 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch42 + *** SVmcPmm__HE272 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch43 + *** SVmcPmm__HE273 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch44 + *** SVmcPmm__HE274 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch45 + *** SVmcPmm__HE275 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch46 + *** SVmcPmm__HE276 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch47 + *** SVmcPmm__HE277 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch48 + *** SVmcPmm__HE278 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch49 + *** SVmcPmm__HE279 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch5 + *** SVmcPmm__HE280 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch50 + *** SVmcPmm__HE281 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch51 + *** SVmcPmm__HE282 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch52 + *** SVmcPmm__HE283 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch53 + *** SVmcPmm__HE284 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch54 + *** SVmcPmm__HE285 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch55 + *** SVmcPmm__HE286 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch56 + *** SVmcPmm__HE287 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch57 + *** SVmcPmm__HE288 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch58 + *** SVmcPmm__HE289 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch59 + *** SVmcPmm__HE290 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6 + *** SVmcPmm__HE291 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch60 + *** SVmcPmm__HE292 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch61 + *** SVmcPmm__HE293 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch62 + *** SVmcPmm__HE294 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch63 + *** SVmcPmm__HE295 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch64 + *** SVmcPmm__HE296 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch65 + *** SVmcPmm__HE297 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch66 + *** SVmcPmm__HE298 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch67 + *** SVmcPmm__HE299 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch68 + *** SVmcPmm__HE300 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch69 + *** SVmcPmm__HE301 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch7 + *** SVmcPmm__HE302 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70 + *** SVmcPmm__HE303 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch71 + *** SVmcPmm__HE304 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch72 + *** SVmcPmm__HE305 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch73 + *** SVmcPmm__HE306 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74 + *** SVmcPmm__HE307 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch8 + *** SVmcPmm__HE308 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch9 + *** SVmcPmm__HE309 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay + *** SVmcPmm__HE310 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1 + *** SVmcPmm__HE311 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay2 + *** SVmcPmm__HE312 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay3 + *** SVmcPmm__HE313 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay4 + *** SVmcPmm__HE314 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay5 + *** SVmcPmm__HE315 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10 + *** SVmcPmm__HE316 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out17 + *** SVmcPmm__HE317 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out18 + *** SVmcPmm__HE318 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out19 + *** SVmcPmm__HE319 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2 + *** SVmcPmm__HE320 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20 + *** SVmcPmm__HE321 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21 + *** SVmcPmm__HE322 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out22 + *** SVmcPmm__HE323 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out26 + *** SVmcPmm__HE324 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3 + *** SVmcPmm__HE325 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4 + *** SVmcPmm__HE326 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5 + *** SVmcPmm__HE327 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7 + *** SVmcPmm__HE328 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/PreprocessorName + *** SVmcPmm__HE329 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/PreprocessorName1 + *** SVmcPmm__HE330 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/PreprocessorName2 + *** SVmcPmm__HE331 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/PreprocessorName3 + *** SVmcPmm__HE332 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/PreprocessorName4 + *** SVmcPmm__HE333 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/PreprocessorName5 + *** SVmcPmm__HE334 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay + *** SVmcPmm__HE335 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF1 + *** SVmcPmm__HE336 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF2 + *** SVmcPmm__HE337 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF3 + *** SVmcPmm__HE338 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7 + *** SVmcPmm__HE339 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF8 + *** SVmcPmm__HE340 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay + *** SVmcPmm__HE341 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1 + *** SVmcPmm__HE342 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3 + *** SVmcPmm__HE343 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwi + *** tch17 + *** SVmcPmm__HE344 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalS + *** witch17 + *** SVmcPmm__HE345 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwit + *** ch17 + *** SVmcPmm__HE346 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitc + *** h17 + *** SVmcPmm__HE347 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1214_Brake/LogicalSw + *** itch17 + *** SVmcPmm__HE348 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1215_Sapp/LogicalSwi + *** tch17 + *** SVmcPmm__HE349 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/EdgeDetec + *** tRise1 + *** SVmcPmm__HE350 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/EdgeDetec + *** tRise2 + *** SVmcPmm__HE351 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/EdgeDetec + *** tRise3 + *** SVmcPmm__HE352 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSw + *** itch17 + *** SVmcPmm__HE353 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSw + *** itch24 + *** SVmcPmm__HE354 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1 + *** SVmcPmm__HE355 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2 + *** SVmcPmm__HE356 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/EdgeDetectR + *** ise4 + *** SVmcPmm__HE357 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwit + *** ch17 + *** SVmcPmm__HE358 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwit + *** ch25 + *** SVmcPmm__HE359 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4 + *** SVmcPmm__HE360 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/EdgeDetect + *** Rise5 + *** SVmcPmm__HE361 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwi + *** tch17 + *** SVmcPmm__HE362 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwi + *** tch26 + *** SVmcPmm__HE363 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6 + *** SVmcPmm__HE364 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/EdgeDetect + *** Rise6 + *** SVmcPmm__HE365 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwi + *** tch17 + *** SVmcPmm__HE366 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwi + *** tch27 + *** SVmcPmm__HE367 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5 + *** SVmcPmm__HE368 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/Logical + *** Switch17 + *** SVmcPmm__HE369 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/EdgeDetectRi + *** se4 + *** SVmcPmm__HE370 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitc + *** h17 + *** SVmcPmm__HE371 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitc + *** h25 + *** SVmcPmm__HE372 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4 + *** SVmcPmm__HE373 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121C_Fuel/LogicalSwi + *** tch17 + *** SVmcPmm__HE374 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwit + *** ch17 + *** SVmcPmm__HE375 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalS + *** witch17 + *** SVmcPmm__HE376 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/Logica + *** lSwitch17 + *** SVmcPmm__HE377 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/Logical + *** Switch17 + *** SVmcPmm__HE378 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/EdgeDet + *** ectRise6 + *** SVmcPmm__HE379 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/Logical + *** Switch17 + *** SVmcPmm__HE380 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/Logical + *** Switch27 + *** SVmcPmm__HE381 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDela + *** y5 + *** SVmcPmm__HE382 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121I_Obd/LogicalSwit + *** ch17 + *** SVmcPmm__HE383 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwit + *** ch17 + *** SVmcPmm__HE384 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/EdgeDetectR + *** ise4 + *** SVmcPmm__HE385 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwit + *** ch17 + *** SVmcPmm__HE386 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwit + *** ch25 + *** SVmcPmm__HE387 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4 + *** SVmcPmm__HE388 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121L_Rc/LogicalSwitc + *** h17 + *** SVmcPmm__HE389 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid + *** SVmcPmm__HE390 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/EdgeDetect + *** SVmcPmm__HE391 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/EdgeDetect1 + *** SVmcPmm__HE392 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/EdgeDetect2 + *** SVmcPmm__HE393 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/EdgeDetect3 + *** SVmcPmm__HE394 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/EdgeDetect4 + *** SVmcPmm__HE395 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/EdgeDetect5 + *** SVmcPmm__HE396 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/LogicalSwitch1 + *** SVmcPmm__HE397 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/LogicalSwitch2 + *** SVmcPmm__HE398 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/LogicalSwitch6 + *** SVmcPmm__HE399 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/SR_FF + *** SVmcPmm__HE400 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/SR_FF1 + *** SVmcPmm__HE401 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/SR_FF2 + *** SVmcPmm__HE402 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid + *** /121M1_StartModeHybrid/SR_FF5 + *** SVmcPmm__HE403 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V + *** SVmcPmm__HE404 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect + *** SVmcPmm__HE405 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect1 + *** SVmcPmm__HE406 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect10 + *** SVmcPmm__HE407 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect11 + *** SVmcPmm__HE408 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect2 + *** SVmcPmm__HE409 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect3 + *** SVmcPmm__HE410 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect4 + *** SVmcPmm__HE411 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect5 + *** SVmcPmm__HE412 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect6 + *** SVmcPmm__HE413 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect7 + *** SVmcPmm__HE414 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect8 + *** SVmcPmm__HE415 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/EdgeDetect9 + *** SVmcPmm__HE416 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/LogicalSwitch1 + *** SVmcPmm__HE417 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/LogicalSwitch13 + *** SVmcPmm__HE418 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/LogicalSwitch2 + *** SVmcPmm__HE419 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/LogicalSwitch3 + *** SVmcPmm__HE420 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/LogicalSwitch4 + *** SVmcPmm__HE421 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/LogicalSwitch5 + *** SVmcPmm__HE422 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/SR_FF1 + *** SVmcPmm__HE423 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/SR_FF11 + *** SVmcPmm__HE424 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/SR_FF2 + *** SVmcPmm__HE425 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/SR_FF5 + *** SVmcPmm__HE426 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/SR_FF8 + *** SVmcPmm__HE427 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid + *** 12V/121N1_StartModeHybrid12V/SR_FF9 + *** SVmcPmm__HE428 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logic + *** alSwitch15 + *** SVmcPmm__HE429 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logic + *** alSwitch23 + *** SVmcPmm__HE430 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logic + *** alSwitch24 + *** SVmcPmm__HE431 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logic + *** alSwitch25 + *** SVmcPmm__HE432 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF + *** 1 + *** SVmcPmm__HE433 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF + *** 2 + *** SVmcPmm__HE434 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + *** lDelay1 + *** SVmcPmm__HE435 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + *** lDelay2 + *** SVmcPmm__HE436 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + *** lDelay3 + *** SVmcPmm__HE437 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/EdgeDetect + *** SVmcPmm__HE438 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/EdgeDetect1 + *** SVmcPmm__HE439 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/EdgeDetectRise3 + *** SVmcPmm__HE440 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/Out11 + *** SVmcPmm__HE441 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/Out12 + *** SVmcPmm__HE442 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SR_FF + *** SVmcPmm__HE443 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SR_FF3 + *** SVmcPmm__HE444 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SR_FF4 + *** SVmcPmm__HE445 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SignalDelay2 + *** SVmcPmm__HE446 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SignalDelay4 + *** SVmcPmm__HE447 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SignalDelay5 + *** SVmcPmm__HE448 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SignalDelay7 + *** SVmcPmm__HE449 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/SignalDelay8 + *** SVmcPmm__HE450 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/Out11/EncapsulatedSubsystem + *** SVmcPmm__HE451 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + *** i/Out12/EncapsulatedSubsystem + *** SVmcPmm__HE452 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/EdgeDetec + *** tRise1 + *** SVmcPmm__HE453 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/LogicalSw + *** itch5 + *** SVmcPmm__HE454 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SR_FF2 + *** SVmcPmm__HE455 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SignalDel + *** ay1 + *** SVmcPmm__HE456 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** DLPF1_pole_v2 + *** SVmcPmm__HE457 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** EdgeDetect2 + *** SVmcPmm__HE458 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** LogicalSwitch1 + *** SVmcPmm__HE459 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** LogicalSwitch2 + *** SVmcPmm__HE460 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** SR_FF8 + *** SVmcPmm__HE461 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** SignalDelay + *** SVmcPmm__HE462 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + *** DLPF1_pole_v2/LogicalSwitch + *** SVmcPmm__HE463 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE464 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out17/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE465 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out18/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE466 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out19/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE467 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/EncapsulatedSub + *** system + *** SVmcPmm__HE468 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE469 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE470 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out22/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE471 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out26/EncapsulatedSu + *** bsystem + *** SVmcPmm__HE472 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3/EncapsulatedSub + *** system + *** SVmcPmm__HE473 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4/EncapsulatedSub + *** system + *** SVmcPmm__HE474 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/EncapsulatedSub + *** system + *** SVmcPmm__HE475 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7/EncapsulatedSub + *** system + *** SVmcPmm__HE476 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPres + *** BuildUp + *** SVmcPmm__HE477 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReq + *** Hybrid + *** SVmcPmm__HE478 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReq + *** IdleCoast + *** SVmcPmm__HE479 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + *** isabled + *** SVmcPmm__HE480 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/EdgeDetect1 + *** SVmcPmm__HE481 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + *** SVmcPmm__HE482 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + *** 1 + *** SVmcPmm__HE483 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + *** 4 + *** SVmcPmm__HE484 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + *** 9 + *** SVmcPmm__HE485 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch2 + *** SVmcPmm__HE486 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch3 + *** SVmcPmm__HE487 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch4 + *** SVmcPmm__HE488 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch5 + *** SVmcPmm__HE489 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch6 + *** SVmcPmm__HE490 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch7 + *** SVmcPmm__HE491 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8 + *** SVmcPmm__HE492 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch9 + *** SVmcPmm__HE493 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Out4 + *** SVmcPmm__HE494 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me + *** SVmcPmm__HE495 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me1 + *** SVmcPmm__HE496 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me2 + *** SVmcPmm__HE497 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me3 + *** SVmcPmm__HE498 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me4 + *** SVmcPmm__HE499 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me5 + *** SVmcPmm__HE500 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me6 + *** SVmcPmm__HE501 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/PreprocessorNa + *** me7 + *** SVmcPmm__HE502 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF + *** SVmcPmm__HE503 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1 + *** SVmcPmm__HE504 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2 + *** SVmcPmm__HE505 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF4 + *** SVmcPmm__HE506 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF7 + *** SVmcPmm__HE507 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + *** SVmcPmm__HE508 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay1 + *** SVmcPmm__HE509 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay2 + *** SVmcPmm__HE510 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay3 + *** SVmcPmm__HE511 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay4 + *** SVmcPmm__HE512 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPres + *** BuildUp/CounterReset1 + *** SVmcPmm__HE513 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPres + *** BuildUp/EdgeDetect2 + *** SVmcPmm__HE514 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPres + *** BuildUp/SR_FF3 + *** SVmcPmm__HE515 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReq + *** Hybrid/SignalDelay1 + *** SVmcPmm__HE516 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReq + *** Hybrid/SignalDelay2 + *** SVmcPmm__HE517 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReq + *** Hybrid/SignalDelay3 + *** SVmcPmm__HE518 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReq + *** IdleCoast/LogicalSwitch10 + *** SVmcPmm__HE519 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReq + *** IdleCoast/LogicalSwitch9 + *** SVmcPmm__HE520 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + *** isabled/LogicalSwitch1 + *** SVmcPmm__HE521 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + *** isabled/LogicalSwitch12 + *** SVmcPmm__HE522 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + *** isabled/LogicalSwitch9 + *** SVmcPmm__HE523 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + *** isabled/SignalDelay10 + *** SVmcPmm__HE524 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Out4/Encapsula + *** tedSubsystem + *** SVmcPmm__HE525 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetect + *** SVmcPmm__HE526 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetect2 + *** SVmcPmm__HE527 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRise + *** 1 + *** SVmcPmm__HE528 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRise + *** 2 + *** SVmcPmm__HE529 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRise + *** 3 + *** SVmcPmm__HE530 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRise + *** 5 + *** SVmcPmm__HE531 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** SVmcPmm__HE532 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 0 + *** SVmcPmm__HE533 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 1 + *** SVmcPmm__HE534 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 2 + *** SVmcPmm__HE535 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 3 + *** SVmcPmm__HE536 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 4 + *** SVmcPmm__HE537 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 5 + *** SVmcPmm__HE538 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 6 + *** SVmcPmm__HE539 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 7 + *** SVmcPmm__HE540 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 8 + *** SVmcPmm__HE541 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + *** 9 + *** SVmcPmm__HE542 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** SVmcPmm__HE543 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 0 + *** SVmcPmm__HE544 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 1 + *** SVmcPmm__HE545 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 2 + *** SVmcPmm__HE546 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 3 + *** SVmcPmm__HE547 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 4 + *** SVmcPmm__HE548 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 5 + *** SVmcPmm__HE549 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 6 + *** SVmcPmm__HE550 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 7 + *** SVmcPmm__HE551 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 8 + *** SVmcPmm__HE552 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + *** 9 + *** SVmcPmm__HE553 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** SVmcPmm__HE554 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 0 + *** SVmcPmm__HE555 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 1 + *** SVmcPmm__HE556 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 2 + *** SVmcPmm__HE557 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 3 + *** SVmcPmm__HE558 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 4 + *** SVmcPmm__HE559 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 5 + *** SVmcPmm__HE560 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 6 + *** SVmcPmm__HE561 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 7 + *** SVmcPmm__HE562 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 8 + *** SVmcPmm__HE563 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + *** 9 + *** SVmcPmm__HE564 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** SVmcPmm__HE565 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 0 + *** SVmcPmm__HE566 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 1 + *** SVmcPmm__HE567 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 2 + *** SVmcPmm__HE568 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 3 + *** SVmcPmm__HE569 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 4 + *** SVmcPmm__HE570 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 5 + *** SVmcPmm__HE571 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 6 + *** SVmcPmm__HE572 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 7 + *** SVmcPmm__HE573 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + *** 8 + *** SVmcPmm__HE574 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5 + *** SVmcPmm__HE575 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6 + *** SVmcPmm__HE576 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch7 + *** SVmcPmm__HE577 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8 + *** SVmcPmm__HE578 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch9 + *** SVmcPmm__HE579 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay1 + *** SVmcPmm__HE580 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay2 + *** SVmcPmm__HE581 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay3 + *** SVmcPmm__HE582 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay + *** SVmcPmm__HE583 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay1 + *** SVmcPmm__HE584 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay2 + *** SVmcPmm__HE585 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay4 + *** SVmcPmm__HE586 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay5 + *** SVmcPmm__HE587 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay6 + *** SVmcPmm__HE588 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7 + *** SVmcPmm__HE589 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF1 + *** SVmcPmm__HE590 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF2 + *** SVmcPmm__HE591 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3 + *** SVmcPmm__HE592 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF4 + *** SVmcPmm__HE593 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay + *** SVmcPmm__HE594 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay1 + *** SVmcPmm__HE595 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay2 + *** SVmcPmm__HE596 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay3 + *** SVmcPmm__HE597 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay4 + *** SVmcPmm__HE598 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay5 + *** SVmcPmm__HE599 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay6 + *** SVmcPmm__HE600 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay7 + *** SVmcPmm__HE601 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF1/Q + *** SVmcPmm__HE602 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF1/Q/Encap + *** sulatedSubsystem + *** SVmcPmm__HE603 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + *** SVmcPmm__HE604 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + *** SVmcPmm__HE605 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg + *** SVmcPmm__HE606 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatR + *** eq + *** SVmcPmm__HE607 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/B_IsgEnable1 + *** SVmcPmm__HE608 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/D_IsgModeReq + *** SVmcPmm__HE609 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/PreprocessorNam + *** e + *** SVmcPmm__HE610 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/PreprocessorNam + *** e1 + *** SVmcPmm__HE611 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/PreprocessorNam + *** e2 + *** SVmcPmm__HE612 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/PreprocessorNam + *** e3 + *** SVmcPmm__HE613 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/RenameSignal1 + *** SVmcPmm__HE614 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad + *** SVmcPmm__HE615 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/Abs1 + *** SVmcPmm__HE616 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/B_EradClutchReq + *** SVmcPmm__HE617 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/B_EradClutchReq1 + *** SVmcPmm__HE618 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/EdgeDetect + *** SVmcPmm__HE619 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch + *** SVmcPmm__HE620 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch1 + *** SVmcPmm__HE621 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch2 + *** SVmcPmm__HE622 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch3 + *** SVmcPmm__HE623 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch5 + *** SVmcPmm__HE624 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/OffDelay1 + *** SVmcPmm__HE625 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/OffDelay2 + *** SVmcPmm__HE626 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/OnDelay1 + *** SVmcPmm__HE627 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/SR_FF1 + *** SVmcPmm__HE628 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/SR_FF2 + *** SVmcPmm__HE629 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/SR_FF8 + *** SVmcPmm__HE630 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/SignalDelay + *** SVmcPmm__HE631 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/B_EradClutchReq/EncapsulatedSubsystem + *** SVmcPmm__HE632 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/B_EradClutchReq1/EncapsulatedSubsystem + *** SVmcPmm__HE633 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch/Out1 + *** SVmcPmm__HE634 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch/Out1/EncapsulatedSubsystem + *** SVmcPmm__HE635 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch2/Out1 + *** SVmcPmm__HE636 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411 + *** _Erad/LogicalSwitch2/Out1/EncapsulatedSubsystem + *** SVmcPmm__HE637 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad + *** SVmcPmm__HE638 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination + *** SVmcPmm__HE639 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq + *** SVmcPmm__HE640 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/D_EradModeReq1 + *** SVmcPmm__HE641 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/D_EradModeReq4 + *** SVmcPmm__HE642 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/D_IsgModeReq7 + *** SVmcPmm__HE643 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/EdgeDetect1 + *** SVmcPmm__HE644 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/EdgeDetect3 + *** SVmcPmm__HE645 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch1 + *** SVmcPmm__HE646 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch12 + *** SVmcPmm__HE647 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch13 + *** SVmcPmm__HE648 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch14 + *** SVmcPmm__HE649 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch2 + *** SVmcPmm__HE650 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch21 + *** SVmcPmm__HE651 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch3 + *** SVmcPmm__HE652 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch5 + *** SVmcPmm__HE653 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch8 + *** SVmcPmm__HE654 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/LogicalSwitch9 + *** SVmcPmm__HE655 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/RenameSignal5 + *** SVmcPmm__HE656 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/RenameSignal7 + *** SVmcPmm__HE657 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SR_FF1 + *** SVmcPmm__HE658 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SR_FF3 + *** SVmcPmm__HE659 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SR_FF6 + *** SVmcPmm__HE660 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SR_FF7 + *** SVmcPmm__HE661 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay1 + *** SVmcPmm__HE662 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay10 + *** SVmcPmm__HE663 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay11 + *** SVmcPmm__HE664 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay2 + *** SVmcPmm__HE665 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay3 + *** SVmcPmm__HE666 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay4 + *** SVmcPmm__HE667 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay5 + *** SVmcPmm__HE668 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay6 + *** SVmcPmm__HE669 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay7 + *** SVmcPmm__HE670 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay8 + *** SVmcPmm__HE671 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/SignalDelay9 + *** SVmcPmm__HE672 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR + *** SVmcPmm__HE673 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart + *** SVmcPmm__HE674 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242113_IsgStartAllowed + *** SVmcPmm__HE675 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed + *** SVmcPmm__HE676 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetect + *** SVmcPmm__HE677 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetect1 + *** SVmcPmm__HE678 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetect2 + *** SVmcPmm__HE679 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetect3 + *** SVmcPmm__HE680 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetect4 + *** SVmcPmm__HE681 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise1 + *** SVmcPmm__HE682 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise2 + *** SVmcPmm__HE683 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise3 + *** SVmcPmm__HE684 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise4 + *** SVmcPmm__HE685 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise5 + *** SVmcPmm__HE686 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise6 + *** SVmcPmm__HE687 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/EdgeDetectRise8 + *** SVmcPmm__HE688 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch1 + *** SVmcPmm__HE689 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch11 + *** SVmcPmm__HE690 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch12 + *** SVmcPmm__HE691 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch15 + *** SVmcPmm__HE692 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch16 + *** SVmcPmm__HE693 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch2 + *** SVmcPmm__HE694 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch3 + *** SVmcPmm__HE695 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch4 + *** SVmcPmm__HE696 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch5 + *** SVmcPmm__HE697 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch6 + *** SVmcPmm__HE698 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch7 + *** SVmcPmm__HE699 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch8 + *** SVmcPmm__HE700 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/LogicalSwitch9 + *** SVmcPmm__HE701 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF1 + *** SVmcPmm__HE702 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF2 + *** SVmcPmm__HE703 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF3 + *** SVmcPmm__HE704 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF5 + *** SVmcPmm__HE705 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF6 + *** SVmcPmm__HE706 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF7 + *** SVmcPmm__HE707 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SR_FF9 + *** SVmcPmm__HE708 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay + *** SVmcPmm__HE709 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay1 + *** SVmcPmm__HE710 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay2 + *** SVmcPmm__HE711 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay3 + *** SVmcPmm__HE712 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay4 + *** SVmcPmm__HE713 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay5 + *** SVmcPmm__HE714 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/SignalDelay6 + *** SVmcPmm__HE715 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding + *** SVmcPmm__HE716 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIn + *** cline + *** SVmcPmm__HE717 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/EdgeDetect + *** SVmcPmm__HE718 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/EdgeDetect1 + *** SVmcPmm__HE719 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch1 + *** SVmcPmm__HE720 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch19 + *** SVmcPmm__HE721 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch2 + *** SVmcPmm__HE722 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch5 + *** SVmcPmm__HE723 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF10 + *** SVmcPmm__HE724 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8 + *** SVmcPmm__HE725 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1 + *** SVmcPmm__HE726 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay2 + *** SVmcPmm__HE727 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay3 + *** SVmcPmm__HE728 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIn + *** cline/FirstOrderFilter1 + *** SVmcPmm__HE729 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIn + *** cline/LogicalSwitch5 + *** SVmcPmm__HE730 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIn + *** cline/Z_BrkRoadIncline + *** SVmcPmm__HE731 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/EdgeDetect2 + *** SVmcPmm__HE732 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1 + *** SVmcPmm__HE733 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1 + *** SVmcPmm__HE734 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10 + *** SVmcPmm__HE735 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2 + *** SVmcPmm__HE736 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay1 + *** SVmcPmm__HE737 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5 + *** SVmcPmm__HE738 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1 + *** SVmcPmm__HE739 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5 + *** SVmcPmm__HE740 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7 + *** SVmcPmm__HE741 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSwitch + *** SVmcPmm__HE742 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSwitch1 + *** SVmcPmm__HE743 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv + *** SVmcPmm__HE744 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq + *** SVmcPmm__HE745 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/Abs + *** SVmcPmm__HE746 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/LogicalSwitch1 + *** SVmcPmm__HE747 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/LogicalSwitch8 + *** SVmcPmm__HE748 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/Relay + *** SVmcPmm__HE749 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/Relay1 + *** SVmcPmm__HE750 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/Relay2 + *** SVmcPmm__HE751 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/Relay3 + *** SVmcPmm__HE752 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/Relay4 + *** SVmcPmm__HE753 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SR_FF2 + *** SVmcPmm__HE754 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay1 + *** SVmcPmm__HE755 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay10 + *** SVmcPmm__HE756 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay2 + *** SVmcPmm__HE757 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay3 + *** SVmcPmm__HE758 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay4 + *** SVmcPmm__HE759 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay5 + *** SVmcPmm__HE760 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay6 + *** SVmcPmm__HE761 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay7 + *** SVmcPmm__HE762 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/SignalDelay9 + *** SVmcPmm__HE763 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch + *** SVmcPmm__HE764 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1 + *** SVmcPmm__HE765 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch10 + *** SVmcPmm__HE766 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch11 + *** SVmcPmm__HE767 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch2 + *** SVmcPmm__HE768 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch3 + *** SVmcPmm__HE769 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch4 + *** SVmcPmm__HE770 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch5 + *** SVmcPmm__HE771 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3 + *** SVmcPmm__HE772 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay4 + *** SVmcPmm__HE773 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay8 + *** SVmcPmm__HE774 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect + *** SVmcPmm__HE775 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect1 + *** SVmcPmm__HE776 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect2 + *** SVmcPmm__HE777 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR + *** SVmcPmm__HE778 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR1 + *** SVmcPmm__HE779 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay + *** SVmcPmm__HE780 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8 + *** SVmcPmm__HE781 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/D_EradModeReq1/EncapsulatedSubsystem + *** SVmcPmm__HE782 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/D_EradModeReq4/EncapsulatedSubsystem + *** SVmcPmm__HE783 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421 + *** _Efad/D_IsgModeReq7/EncapsulatedSubsystem + *** SVmcPmm__HE784 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg + *** SVmcPmm__HE785 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V + *** SVmcPmm__HE786 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124312_IsgStartCoordination + *** SVmcPmm__HE787 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/Abs2 + *** SVmcPmm__HE788 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/EdgeDetectRise3 + *** SVmcPmm__HE789 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/LogicalSwitch11 + *** SVmcPmm__HE790 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/LogicalSwitch3 + *** SVmcPmm__HE791 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/LogicalSwitch4 + *** SVmcPmm__HE792 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/LogicalSwitch6 + *** SVmcPmm__HE793 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/LogicalSwitch7 + *** SVmcPmm__HE794 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/LogicalSwitch8 + *** SVmcPmm__HE795 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/OffDelay3 + *** SVmcPmm__HE796 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/PreprocessorName + *** SVmcPmm__HE797 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/PreprocessorName1 + *** SVmcPmm__HE798 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/RenameSignal1 + *** SVmcPmm__HE799 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/RenameSignal2 + *** SVmcPmm__HE800 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/RenameSignal3 + *** SVmcPmm__HE801 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/RenameSignal4 + *** SVmcPmm__HE802 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/SR_FF3 + *** SVmcPmm__HE803 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/SR_FF4 + *** SVmcPmm__HE804 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/SignalDelay1 + *** SVmcPmm__HE805 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/SignalDelay2 + *** SVmcPmm__HE806 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/SignalDelay3 + *** SVmcPmm__HE807 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/EdgeDetect1 + *** SVmcPmm__HE808 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/EdgeDetectRise1 + *** SVmcPmm__HE809 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/EdgeDetectRise3 + *** SVmcPmm__HE810 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/LogicalSwitch2 + *** SVmcPmm__HE811 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/LogicalSwitch3 + *** SVmcPmm__HE812 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/LogicalSwitch4 + *** SVmcPmm__HE813 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/LogicalSwitch5 + *** SVmcPmm__HE814 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/OffDelay1 + *** SVmcPmm__HE815 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/OffDelay3 + *** SVmcPmm__HE816 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/SR_FF4 + *** SVmcPmm__HE817 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow + *** SVmcPmm__HE818 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_ + *** Isg/124312_IsgStartCoordination/LogicalSwitch1 + *** SVmcPmm__HE819 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatR + *** eq/OnDelay4 + *** SVmcPmm__HE820 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatR + *** eq/SR_FF5 + *** SVmcPmm__HE821 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatR + *** eq/Tq_TransHeatReq + *** SVmcPmm__HE822 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatR + *** eq/SR_FF5/Q + *** SVmcPmm__HE823 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatR + *** eq/SR_FF5/Q/EncapsulatedSubsystem + *** SVmcPmm__HE824 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/B_IsgEnable1/En + *** capsulatedSubsystem + *** SVmcPmm__HE825 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/D_IsgModeReq/En + *** capsulatedSubsystem + *** SVmcPmm__HE826 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch1 + *** SVmcPmm__HE827 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch11 + *** SVmcPmm__HE828 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch2 + *** SVmcPmm__HE829 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch23 + *** SVmcPmm__HE830 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem + *** SVmcPmm__HE831 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem + *** SVmcPmm__HE832 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out15/EncapsulatedSubsystem + *** SVmcPmm__HE833 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem + *** SVmcPmm__HE834 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out19/EncapsulatedSubsystem + *** SVmcPmm__HE835 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2/EncapsulatedSubsystem + *** SVmcPmm__HE836 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out20/EncapsulatedSubsystem + *** SVmcPmm__HE837 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out24/EncapsulatedSubsystem + *** SVmcPmm__HE838 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out25/EncapsulatedSubsystem + *** SVmcPmm__HE839 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem + *** SVmcPmm__HE840 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out4/EncapsulatedSubsystem + *** SVmcPmm__HE841 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out42/EncapsulatedSubsystem + *** SVmcPmm__HE842 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out43/EncapsulatedSubsystem + *** SVmcPmm__HE843 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch1 + *** SVmcPmm__HE844 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch2 + *** SVmcPmm__HE845 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch3 + *** SVmcPmm__HE846 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch4 + *** SVmcPmm__HE847 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5 + *** SVmcPmm__HE848 VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch6 + *** SVmcPmm__HE849 VcVmcPmm/VcVmcPmm/1000_Hev/y1/EncapsulatedSubsystem + *** SVmcPmm__HE850 VcVmcPmm/VcVmcPmm/1000_Hev/y11/EncapsulatedSubsystem + *** SVmcPmm__HE851 VcVmcPmm/VcVmcPmm/1000_Hev/y19/EncapsulatedSubsystem + *** SVmcPmm__HE852 VcVmcPmm/VcVmcPmm/1000_Hev/y29/EncapsulatedSubsystem + *** SVmcPmm__HE853 VcVmcPmm/VcVmcPmm/1000_Hev/y3/EncapsulatedSubsystem + *** SVmcPmm__HE854 VcVmcPmm/VcVmcPmm/1000_Hev/y49/EncapsulatedSubsystem + *** SVmcPmm__HE855 VcVmcPmm/VcVmcPmm/1000_Hev/y50/EncapsulatedSubsystem + *** + *** SUBSYS CORRESPONDING MODEL BLOCK (REFERENCED MODEL) + *** + *** SF-NODE CORRESPONDING STATEFLOW NODE DESCRIPTION + *** CVmcPmm__HE0 VcVmcPmm__HEP7_OPortMvd + *** CVmcPmm__HE1 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceSt + *** atus/1131_IceStatus + *** CVmcPmm__HE2 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceSt + *** atus/1131_IceStatus.Stopping + *** CVmcPmm__HE3 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceSt + *** atus/1131_IceStatus.Stopped + *** CVmcPmm__HE4 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceSt + *** atus/1131_IceStatus.Running + *** CVmcPmm__HE5 VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceSt + *** atus/1131_IceStatus.Starting + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef VCVMCPMM_C +#define VCVMCPMM_C + +/*------------------------------------------------------------------------------------------------*\ + DEFINES (OPT) +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INCLUDES +\*------------------------------------------------------------------------------------------------*/ + +#include "tl_aux_defines_VmcPmm__HE.h" +#include "VcVmcPmm__HEP7_OPortMvd_LocalDefs.h" +#include "VcVmcPmm.h" +#include "VcUnitTsDefines.h" +#include "TabIdxS18T6.h" +#include "TabIdxS18T390.h" +#include "Tab2DIntpI1T6.h" +#include "Tab1DIntpI1T6.h" +#include "Tab1DIntpI1T54.h" + +/*------------------------------------------------------------------------------------------------*\ + ENUMS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + DEFINES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + TYPEDEFS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + VARIABLES +\*------------------------------------------------------------------------------------------------*/ + +#include "CVC_CODE_START.h" +/**************************************************************************************************\ + UserSLStaticGlobalInit: SLStaticGlobalInit = { DFLT_GLBL_STATIC } | Width: 32 +\**************************************************************************************************/ +static Float32 X_SVmcPmm__HE161_UnitDelay = 0.F; +static Float32 X_SVmcPmm__HE163_UnitDelay = 0.F; +static Float32 X_SVmcPmm__HE164_UnitDelay = 0.F; +static Float32 X_SVmcPmm__HE165_UnitDelay = 0.F; + +/**************************************************************************************************\ + UserSLStaticGlobalInit: SLStaticGlobalInit = { DFLT_GLBL_STATIC } | Width: 8 +\**************************************************************************************************/ +static Bool X_SVmcPmm__HE159_UnitDelay1 = 0; +static Bool X_SVmcPmm__HE160_UnitDelay1 = 0; +#include "CVC_CODE_END.h" + +#include "PREDECL_CAL_EXT_START.h" +/**************************************************************************************************\ + CVC_CAL_EXT: External CVC calibration constants in FLASH | Width: 8 +\**************************************************************************************************/ +CVC_CAL_EXT Bool cVc_B_SeriesHev; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Series Hybrid */ +#include "PREDECL_CAL_EXT_END.h" + +#include "CVC_CAL_START.h" +/**************************************************************************************************\ + CVC_CAL: CVC calibration constants in FLASH | Width: 32 +\**************************************************************************************************/ +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_Pw_IsgStrtAllow = 4.F; /* + Unit: W + MIN/MAX: -1000 .. 1000 + Description: Minimum available ISG power to allow ISG start */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ +CVC_CAL Float32 cVcVmcPmm_Te_AbrtStallEngClntL = -10.F; /* + Unit: deg C + MIN/MAX: -80 .. 160 + Description: Min Engine Cooland Temperature to do stall recovery */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbHighH = 25.F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: Ambient temp to allow off stop/start, high hysteresis limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbHighL = 20.F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: Ambient temp to allow off stop/start, low hysteresis limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbLowH = 2.F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: Ambient temp to allow off stop/start, high hysteresis limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbLowL = 0.F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: Ambient temp to allow off stop/start, low hysteresis limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_CAL Float32 cVcVmcPmm_Te_EngClntEngOffReq = 10.F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: If the engine coolant temperature raises above this value, the ICE is allowed to be + stopped */ +CVC_CAL Float32 cVcVmcPmm_Te_EngClntEngRunReq = -4.5F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: If the engine coolant temperature drops below this value, an ICE start is requested + */ +CVC_CAL Float32 cVcVmcPmm_Te_FCAdaptEngClntRst = 40.F; /* + Unit: deg C + MIN/MAX: -200 .. 200 + Description: Selected coolant temp for fuel cut adaption reset */ +CVC_CAL Float32 cVcVmcPmm_Te_FCAdaptEngClntSet = 50.F; /* + Unit: deg C + MIN/MAX: -200 .. 200 + Description: Selected coolant temp for fuel cut adaption */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_Te_IsgStartPossible = 0.F; /* + Unit: deg C + MIN/MAX: -1000 .. 1000 + Description: Use oil temperature to determine if ISG start i possible */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Float32 cVcVmcPmm_Te_TrnMdeC3OilPresMax = 20.F; /* + Unit: deg C + MIN/MAX: -10000 .. 10000 + Description: Mac gearbox temperature for enabling C3 oil pressure build up function */ +#endif + +/* SVmcPmm__HE512_Switch_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Te_TrnOil = 0.F; /* + Unit: deg C + MIN/MAX: -5000 .. 5000 + Description: Allow for a longer first start time (from button press to ICE running) if the transm + ission oil temperature is low */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_CrShRampDown = 20.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Determine when crankshaft is ramped down */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_CrShRampUp = -20.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Determine when crankshaft is ramped up */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_DrCrShRampDown = 20.F; /* + Unit: Nm + MIN/MAX: 0 .. 1000 + Description: Determine when driver requested CrSh torque is ramped down */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_DrCrShRampUp = -20.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Determine when Driver requested CrSh torque is ramped up */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_ERADRampDown = 20.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: limit to consider erad path to be ramped out */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadBrkOKIsgBrk = 1000.F; /* + Unit: Nm + MIN/MAX: -5000 .. 5000 + Description: Brake torque limit to enable an ISG request (when braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtDi = 2.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Prevent an ISG start when the crankshaft wheel torque is above this level */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtDiFlt = 8.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Prevent an ISG start when the crankshaft wheel torque is above this level (when ther + e's a fault present on one or more start actuators) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtEna = 1.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Allow an ISG start when the crankshaft wheel torque is below this level */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtEnaFlt = 6.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Allow an ISG start when the crankshaft wheel torque is below this level (when there' + s a fault present on one or more start actuators) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax = 1.F; /* + Unit: Nm + MIN/MAX: 1 .. 100000 + Description: Max brake torque request to request fast engagement mode during ISG-start */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgRampDown = 10.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: limit to consider erad path to be ramped out */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStandStillBrkTqOK = 1000.F; /* + Unit: Nm + MIN/MAX: -5000 .. 5000 + Description: Brake torque limit to enable an ISG request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStandStillBslTqOK = 1.F; /* + Unit: Nm + MIN/MAX: -5000 .. 5000 + Description: VcVmcBsl torque limit to enable an ISG request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStopCoastDrReqMax = 0.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Max driver requested torque (including regen) to allow ISG stop in coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStopCoastDrReqMin = 0.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Min driver requested torque (including regen) to allow ISG stop in coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_PropFrntRampDown = 100.F; /* + Unit: Nm + MIN/MAX: 0 .. 1000 + Description: Determine when prop front is ramped down */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_PropFrntRampUp = -100.F; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Determine when prop frontt is ramped up */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_TransHeatReqOffset = 10.F; /* + Unit: Nm + MIN/MAX: -500 .. 500 + Description: Torque offset to reset heat request to TmStrt */ +#endif + +/* SVmcPmm__HE821__ransHeatReq_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_Wait4CluStrtDi = 0.F; /* + Unit: Nm + MIN/MAX: -5000 .. 5000 + Description: If the requested wheel torque is above this level, it's NOT possible to wait for the + vehicle speed to increase before requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_Wait4CluStrtEna = 500.F; /* + Unit: Nm + MIN/MAX: -5000 .. 5000 + Description: If the requested wheel torque is below this level, it's possible to wait for the veh + icle speed to increase before requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_X_AccPedFastEngmtMin = 0.F; /* + Unit: % + MIN/MAX: 0 .. 110 + Description: Min acclerator position to set fast engagement torque demand */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_EfadAccPedOKIsgBrk = 1.F; /* + Unit: % + MIN/MAX: -5000 .. 5000 + Description: Acc ped limit to enable an ISG request (when braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_X_FanAfterrunLimHi = 0.F; /* + Unit: % + MIN/MAX: 0 .. 100 + Description: High threshold for Fan Afterrun */ +CVC_CAL Float32 cVcVmcPmm_X_FanAfterrunLimLo = 0.F; /* + Unit: % + MIN/MAX: 0 .. 100 + Description: Low threshold for Fan Afterrun */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_IsgStopRoadGradMax = 100.F; /* + Unit: % + MIN/MAX: 0 .. 100 + Description: Maximum road gradient to allow ISG-stop in D/R standstill */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_IsgStopRoadGradMaxHyst = 0.F; /* + Unit: % + MIN/MAX: 0 .. 100 + Description: Maximum road gradient to allow ISG-stop in D/R standstill, hysteresis */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_X_StallRcvClNtrl = 30.F; /* + Unit: % + MIN/MAX: 0 .. 120 + Description: Limit to determine if clutch pedal is pressed */ +CVC_CAL Float32 cVcVmcPmm_X_StallRcvClOnly = 60.F; /* + Unit: % + MIN/MAX: 0 .. 120 + Description: Limit to determine if clutch pedal is pressed */ +CVC_CAL Float32 cVcVmcPmm_X_StrtAbrtAcc = 10.F; /* + Unit: % + MIN/MAX: 0 .. 110 + Description: accelerator pedal limit to deactivate start abortion */ +CVC_CAL Float32 cVcVmcPmm_X_StrtAbrtCl = 50.F; /* + Unit: % + MIN/MAX: 0 .. 110 + Description: Clutch pedal released to activate start abortion */ +CVC_CAL Float32 cVcVmcPmm_X_StrtMdeAcc = 110.F; /* + Unit: % + MIN/MAX: 0 .. 110 + Description: Accelerator pedal limit to set StartMode=2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_Wait4CluStrtDi = 2.F; /* + Unit: % + MIN/MAX: -5000 .. 5000 + Description: If the acc pedal drops below this level, it's NOT possible to wait for the vehicle s + peed to increase before requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_Wait4CluStrtEna = 5.F; /* + Unit: % + MIN/MAX: -5000 .. 5000 + Description: If the acc pedal is above this level, it's possible to wait for the vehicle speed to + increase before requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_Xd_AccPedFastEngmtMin = 30.F; /* + Unit: %/s + MIN/MAX: -10000 .. 10000 + Description: Min accelerator pedal derivative to set fast engagement */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkDownH = -16.F; /* + Unit: deg + MIN/MAX: -100 .. 100 + Description: Downhill high hysteresis disallowing stop trigger on gearlever to P */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkDownL = -15.F; /* + Unit: deg + MIN/MAX: -100 .. 100 + Description: Downhill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGra + dStart inhibits */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkUpH = 16.F; /* + Unit: deg + MIN/MAX: -100 .. 100 + Description: Uphill high hysteresis disallowing stop trigger on gearlever to P */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkUpL = 15.F; /* + Unit: deg + MIN/MAX: -100 .. 100 + Description: Uphill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradS + tart inhibits */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_ResetLimDownHill = -7.F; /* + Unit: deg + MIN/MAX: -10000000000 .. 10000000000000 + Description: What down hill dergee limit for reset stop inhibit */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_ResetLimUpHill = 6.F; /* + Unit: deg + MIN/MAX: -10000000000 .. 10000000000 + Description: What up hill dergee limit for reset stop inhibit */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_SetLimDownHill = -8.5F; /* + Unit: deg + MIN/MAX: -100000000 .. 1000000000000 + Description: What down hill dergee limit for enable stop inhibit */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_SetLimUpHill = 9.F; /* + Unit: deg + MIN/MAX: -9000000000 .. 900000000000 + Description: What up hill dergee limit for enable stop inhibit */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Z_SsActTrailerUpHillH = -100.F; /* + Unit: deg + MIN/MAX: -100 .. 100 + Description: Uphill limit for inhibit stop with trailer, upper hysterersis */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Z_SsActTrailerUpHillL = -100.F; /* + Unit: deg + MIN/MAX: -100 .. 100 + Description: Uphill limit for inhibit stop with trailer, lower hysterersis */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_a_HillGradientFault = 0.F; /* + Unit: m/s2 + MIN/MAX: -100 .. 100 + Description: Hillgradient acc used when fault detected */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_a_HillGradientMax = 4.F; /* + Unit: m/s2 + MIN/MAX: -100 .. 100 + Description: Max acceleration for Hillgradient */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_a_HillGradientMin = -4.F; /* + Unit: m/s2 + MIN/MAX: -100 .. 100 + Description: Min acceleration for Hillgradient */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_a_Wait4CluStrtDi = 0.F; /* + Unit: m/s2 + MIN/MAX: -5000 .. 5000 + Description: If the vehicle acceleration drops below this level, it's NOT possible to wait for th + e vehicle speed to increase before requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_a_Wait4CluStrtEna = 0.F; /* + Unit: m/s2 + MIN/MAX: -5000 .. 5000 + Description: If the vehicle acceleration is above this level, it's possible to wait for the vehic + le speed to increase before requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_n_12VStrtAllwdEngSpdMax = -10000.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Max engine speed to allow 12V start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_n_CFTStop = 300.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: Rpm threashold for requesting a restart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_n_CluStrtAllwdEngSpdMax = -10000.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Max engine speed to allow clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_n_EngOnDelayOff = 10000.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Engine speed offset from idle for delay of EngOnReq (Off) */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Float32 cVcVmcPmm_n_FCAdaptEngRst = 800.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Selected engine speed for fuel cut adaption reset */ +CVC_CAL Float32 cVcVmcPmm_n_FCAdaptEngSet = 1000.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Selected engine speed for fuel cut adaption */ +CVC_CAL Float32 cVcVmcPmm_n_IceStallMax = 10000.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: Maximum engine speed where IceStall signal is allowed to shut down engine */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_n_IsgStrtAllwdEngSpdMax = -10000.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Max engine speed to allow ISG-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_n_PwdRpmOnly = 100.F; /* + Unit: rpm + MIN/MAX: -1000 .. 100000000 + Description: Below this rpm threashold an powerdown will be carried out if seat belt is unbuckled + or engine fault has occured */ +#endif +CVC_CAL Float32 cVcVmcPmm_n_StallEmiMinEngSpd = 100.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Minimum engine speed for StartMode=0 before an Ice Stall is detected */ +CVC_CAL Float32 cVcVmcPmm_n_StallRcv = 10000.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Max rpm for stall recovery */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_n_TrnEngBlockMin = 1000.F; /* + Unit: rpm + MIN/MAX: 0 .. 100000 + Description: Max speed for blocking TrnMode */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ +CVC_CAL Float32 cVcVmcPmm_n_Wait4Eng2StopLim = 450.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: If the engine speed is below this level, the engine must be stopped completely befor + e another engine start attempt is performed */ +CVC_CAL Float32 cVcVmcPmm_n_Wait4Eng2StopLimHigh = 500.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: If the engine speed is below this level, the engine must be stopped completely befor + e another engine start attempt is performed */ +CVC_CAL Float32 cVcVmcPmm_n_Wait4Eng2StopLimHighTest = -10000.F; /* + Unit: rpm + MIN/MAX: -100000 .. 100000 + Description: Engine speed condition used for testing */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_p_AmbH = 85.F; /* + Unit: kPa + MIN/MAX: 0 .. 200 + Description: Ambient pressure to allow off stop/start, high hysteresis limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_p_AmbL = 84.F; /* + Unit: kPa + MIN/MAX: 0 .. 200 + Description: Ambient pressure to allow off stop/start, low hysteresis limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_p_BrVacuum = -4.5F; /* + Unit: kPa + MIN/MAX: -10000 .. 10000 + Description: Brake vacuum level to request an restart */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_rt_EfadLowAvailTrq = -1000.F; /* + Unit: - + MIN/MAX: -100000 .. 100000 + Description: Max Efad torque losses to allow an ISG-start attempt */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_rt_EfadStrtAllow = 0.5F; /* + Unit: - + MIN/MAX: 0 .. 1 + Description: Max Efad torque loss to permit Efad start and permit engine stop. */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_rt_FCLvlRunning = 0.F; /* + Unit: - + MIN/MAX: -10000 .. 10000 + Description: Min Fuel cut level for detecting engine on */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_12VStrtActrRdyDly = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actua + tor ready signal (to avoid trying another start one sample after the start abort is detected) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_ATComStrt = 0.1F; /* + Unit: s + MIN/MAX: 0 .. 10 + Description: Duration to allow Change of mind restart (without PowerTrainDisengaged) on AT after + EngOnReqTrans deactivation */ +CVC_CAL Float32 cVcVmcPmm_t_AbrtFrstDrCycle = 5.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time before stall recovery becomes re-allowed after first start (set higher value th + an t_BlockAbrtFrstDrCycle) */ +CVC_CAL Float32 cVcVmcPmm_t_AbrtStall = 10.F; /* + Unit: s + MIN/MAX: 0 .. 10000 + Description: time in stall to trigger a powerdown */ +CVC_CAL Float32 cVcVmcPmm_t_AbsStrt = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay off for holding ABS, used to ensure no start after Abs active */ +CVC_CAL Float32 cVcVmcPmm_t_BlockAbrtFrstDrCycle = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time before stall recovery becomes disallowed after first start (set lower value tha + n t_AbrtFrstDrCycle) */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_BlockPsmPwd = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time to ignore PowerDownHMI signal from VcPpmPsm after an open DriverDoor triggered + a powerdown */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_BrakeRunReqOnDelayHmi = 20.F; /* + Unit: s + MIN/MAX: 0 .. 10000000 + Description: On delay for engine run req to HMI-signal */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_t_BrkAbs = 4.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay off for holding ABS, used to ensure no stop after Abs active */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_t_BrkEngRunReqAlive = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay for starting engine if EngRunReq signal from brake system is missing */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_t_BrkHillGrad = 10.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay off for holding gradient, used to ensure no stop after gradient estimation act + ive */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR = 0.5F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection of logic connected to requesting ISG start as a function of + requested brake torque when gear lever is placed in Drive */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_BrkStrt = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay off for holding Brake inhibit active (actually ABS pump active), used to ensur + e no start during ABS pump active */ +CVC_CAL Float32 cVcVmcPmm_t_CTFStop = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: time for reaching a certain value until restart is triggered */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv = 5.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit to detect that the vehicle speed is OK for an ISG-mode request during cat + heating */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_ChrgReqDly = 0.06F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Delay time for Em_B_ChrgReq */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_CluStrtActrRdyDly = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actua + tor ready signal (to avoid trying another start one sample after the start abort is detected) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_ComInhbtIceStatus = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Max time to listen to ChangeOfMindInhibit signal, used as stop request in IceStatus + */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_CrShPahDiTiOut = 5.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Maximum time allowed to wait for there being no torque acting on the ICE (when closi + ng the crankshaft path) */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Float32 cVcVmcPmm_t_DrLeaveAutoParkReq = 30.F; /* + Unit: s + MIN/MAX: 0 .. 100000000 + Description: Time to activate driver leave vehicle after power-up */ +CVC_CAL Float32 cVcVmcPmm_t_DrLeaveDCADly = 1.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time to activate driver leave vehicle after power-up */ +CVC_CAL Float32 cVcVmcPmm_t_DrLeavePwrDwnDly = 4800.F; /* + Unit: s + MIN/MAX: 0 .. 100000000 + Description: Time to activate driver leave vehicle after power-up */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_DrvCycActvFirstStrt = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Timeout for first start logic connected to the DriveCycleActive signal */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadAccPedOKIsgBrk = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit to detect that the acc ped level is OK for an ISG-mode request (when brak + ing) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadBrkOKIsgBrk = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit to detect that the brake torque level is OK for an ISG-mode request (when + braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadDrvCycTiOut = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Limit for drivecycle timeout indication */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadGearLvrPNDetn = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: Time limit for detection of when the gear lever is in park or neutral */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadIceStsDlyIsgDrv = 5.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection that Pmm_D_IceStatus = running */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadLowAvailTrqDly = 0.25F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time delay for detection of maximum Efad torque losses to allow an ISG-start attempt + */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadRunReqDelay = 2.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Delay time to send run req due to low trq from Efad or low power from HV battery */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadShftProgsOffDly = 0.3F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: CAN delay compensation for EfadShiftInProgress-signal */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadShftProgsTimeOut = 3.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time out detection for Efad gear shifting */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadTrqAllowTiOut = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: Timeout before torque allow from dep disables Tq-ctrl */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadVehSpdOKIsgBrk = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit to detect that the vehicle speed is OK for an ISG-mode request (when brak + ing) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_EngEngmtFastRstDelay = 1.F; /* + Unit: ns + MIN/MAX: -10000 .. 10000 + Description: Delay resetting EngEngmtFast flag since this is used after TransMode == Engaged */ +CVC_CAL Float32 cVcVmcPmm_t_EngOff = 0.2F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: hold eng running for this amount of time after an stop request */ +CVC_CAL Float32 cVcVmcPmm_t_EngOffFcAdapt = 0.01F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: hold eng running for this amount of time after an stop request durign FC request con + dition */ +CVC_CAL Float32 cVcVmcPmm_t_EngOffMax = 1000.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Max time for the engine to be shut off */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_EngOnDelayOff = 2.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Deley ftime for EngOnReq off */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Float32 cVcVmcPmm_t_EngOnOff = 4.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: hold eng running after an restart this amount of time */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EngOnReqDly = 0.05F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Delay for EngOnReq */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EngRunReqIsgStopMax = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: Max time to hold ISG stop run req */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EngRunReqIsgStopMin = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: Min time to hold ISG stop run req */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradDisable = 2.F; /* + Unit: s + MIN/MAX: 0 .. 5 + Description: Time out torque ramp for erad disable */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradNtrlGlitch = 0.5F; /* + Unit: s + MIN/MAX: 0 .. 2 + Description: Glitch time in neutral for Erad disable */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradOffGlitch = 0.F; /* + Unit: s + MIN/MAX: 0 .. 5 + Description: Glitch time disengage erad */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradOnGlitch = 0.F; /* + Unit: s + MIN/MAX: 0 .. 5 + Description: Glitch time engage erad */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_FCAdaptIdleDelayOff = 0.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Fuel cut request reset delay time off when not in idle */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi = 0.F; /* + Unit: s + MIN/MAX: 0 .. 10000000 + Description: On delay for FC Adapt run req to HMI-signal */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ +CVC_CAL Float32 cVcVmcPmm_t_FanAfterrunDelay = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Deley for Eng On Req due to afterrun */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_FirstStrtDlyOff = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time out delay for waiting with an ISG-start request during first start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_GearLevDRDly = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time delay for detection that GearLev = Drive or Reverese */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_GearLevNDly = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time delay for detection that GearLev = Neutral */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_GearLevPNDlyOn = 0.F; /* + Unit: s + MIN/MAX: 0 .. 10000 + Description: Time delay for detection of gear lever in park or neutral */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Float32 cVcVmcPmm_t_GlitchEngOnTrans = 0.5F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Block transmission request if glitching */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IceRunng12VStrt = 0.5F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time before ice status = running is detected for a 12V-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IceRunngCluStrt = 0.5F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time before ice status = running is detected for an clutch-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IceRunngIsgStrt = 0.5F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time before ice status = running is detected for an ISG-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgAdapt = 0.1F; /* + Unit: s + MIN/MAX: 0 .. 5 + Description: Time for ISG calibration request */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgDisable = 0.5F; /* + Unit: s + MIN/MAX: 0 .. 5 + Description: Time out torque ramp for erad disable */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgDrCycStop = 0.F; /* + Unit: s + MIN/MAX: 0 .. 10 + Description: Keep ISG activation for a short time after engine has been stopped */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgDrCycStopMax = 0.F; /* + Unit: s + MIN/MAX: 0 .. 10 + Description: Allow keep ISG activation after end of drive cycle, intended for soft stop */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgICEStop = 0.F; /* + Unit: s + MIN/MAX: 0 .. 10 + Description: Delay on for ICE stop for ISG stanby request */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_IsgIceStopACCTimeout = 1.5F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown during ACC + active */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_IsgIceStopTimeout = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgPahDiTiOut = 5.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Maximum time allowed to wait for there being no torque acting on the electric motor + (when closing the ISG path) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStandStillBrkTqOK = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection of brake torque OK for an ISG request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStandStillBslTqOK = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection of VcVmcBsl torque request being low enough for an ISG requ + est */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStandStillVehSpdOK = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection of vehicle speed OK for an ISG request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtActrRdyDly = 0.F; /* + Unit: s + MIN/MAX: 0 .. 255 + Description: When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actua + tor ready signal (to avoid trying another start one sample after the start abort is detected) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtOkDelay = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay to wait on Isg start Ok */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtPahReqTiOut = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Timeout detection for an ISG start path request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtWhlTrqOK = 1.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection of the driver request being low enough to request an ISG-st + art */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopCEC = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopChas = 3.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopClim = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopEMS = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopEmLv = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopTime = 0.2F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: minimum stop timer */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopTm = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ +CVC_CAL Float32 cVcVmcPmm_t_MinStopTrans = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: block system request for this amount of time */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdRcShutOff = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time with two-mass flywheel protection active to allow a pwd */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdRpm = 0.04F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: time with no rpm to allow a pwd */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdSeatBeltAT = 100000.F; /* + Unit: s + MIN/MAX: 0 .. 100000 + Description: Powerdown after this timeout if belt is off for Auto transmission */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdTcmModeFail = 4.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: No response from Transmission */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_RunReqObdDelayHmi = 5.F; /* + Unit: s + MIN/MAX: 0 .. 10 + Description: On delay for engine run req to HMI-signal */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_RunReqOnDelayHmi = 2.F; /* + Unit: s + MIN/MAX: 0 .. 10000000 + Description: On delay for engine run req to HMI-signal */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ +CVC_CAL Float32 cVcVmcPmm_t_Running = 0.5F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: time to determine eng running */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActAbs = 4.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay off for holding ABS, used to ensure no stop after Abs active */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActBrk = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay off for holding brake request, used to ensure no stop after ABS pump activatio + n */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActSeatBelt = 100000.F; /* + Unit: s + MIN/MAX: 0 .. 100000 + Description: Reset SsActive after a delay if Driver belt off in Park */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActTcmModeFail = 2.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: No response from Transmission */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_CAL Float32 cVcVmcPmm_t_StallEmiMinEngSpd = 0.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time delay for detection of low engine speed for StartMode=0 */ +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrt = 2.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: time from EngOnReq until a stall is determined */ +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtActrFinishd = 0.5F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time delay to detect that the ICE start was not successful after the start actuator + is finished */ +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtEmi = 40.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Time from EngOnReq until a stall is determined (for emission starts) */ +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtEmiExtra = 2.F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time from EngOnReq until a stall is determined (for emission starts with extra logic + ) */ +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtIsgDrv = 4.F; /* + Unit: ns + MIN/MAX: -1000 .. 1000 + Description: Time from EngOnReq until a stall is determined when performing an ISG-start while ge + ar leaver is placed in Drive (only for HEP7) */ +CVC_CAL Float32 cVcVmcPmm_t_StallRcvClDelay = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time delay until clutch sets OK to start. */ +CVC_CAL Float32 cVcVmcPmm_t_StallRcvNeutral = 0.1F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time in Neutral until trigger start */ +CVC_CAL Float32 cVcVmcPmm_t_StallRun = 0.5F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: time from EngOnReq until a stall is determined */ +CVC_CAL Float32 cVcVmcPmm_t_StallRunComInhbt = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Max time that ChangeOfMindInhibit signal can override StallRun detection */ +CVC_CAL Float32 cVcVmcPmm_t_StallRunUnintd = 0.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Time from EngOnReq until an Unintended stall is determined */ +CVC_CAL Float32 cVcVmcPmm_t_StallStrtM = 1.5F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: time from EngOnReq until a stall is determined */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_t_StandStill = 0.7F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Time StandStill */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_CAL Float32 cVcVmcPmm_t_Started = 0.04F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: time to determine eng started */ +CVC_CAL Float32 cVcVmcPmm_t_StrtAbrt = 0.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: time from triggering an start abortion until requesting an stall */ +CVC_CAL Float32 cVcVmcPmm_t_StrtMdeAccRst = 1.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay for resetting StartMode=2 after releasing accelerator pedal */ +CVC_CAL Float32 cVcVmcPmm_t_StrtMdeAccRun = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Delay for resetting StartMode=2 after reaching Running */ +CVC_CAL Float32 cVcVmcPmm_t_StrtMdeRunning = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Deley for ICEStatus Running before set of B_StrtMdeRunning */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 cVcVmcPmm_t_TransHeatDelayOn = 2.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Delay on time for trans heat request */ +#endif + +/* SVmcPmm__HE821__ransHeatReq_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_TransRunReqOnDelayHmi = 1.F; /* + Unit: s + MIN/MAX: 0 .. 1000000 + Description: On delay for trans run req to HMI-signal */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnEngBlockMax = 1.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Max block time */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnEngCatHeatDly = 5.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: delay off for catalyst heat */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnEngRpmDly = 0.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Max block time */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnMdeC3OilPresMax = 25.F; /* + Unit: s + MIN/MAX: 0 .. 100000 + Description: Max duration to build up oil pressure in C3 clutch */ +#endif + +/* SVmcPmm__HE512_Switch_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR = 0.5F; /* + Unit: ns + MIN/MAX: -5000 .. 5000 + Description: Time limit for detection of logic connected to requesting ISG start as a function of + vehicle speed when gear lever is placed in Drive */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_VehSpdOKIsgDrv = 0.5F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time limit to detect that the vehicle speed is OK for an ISG-mode request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_Wait4CluStrtTiOut = 10.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Timeout detection for the Wait4ClutStart-logic */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_t_Wait4Eng2StopTiOut = 2.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Timeout detection for the Wait4Eng2Stop-logic */ +CVC_CAL Float32 cVcVmcPmm_t_Wait4EngRunReqTot = 0.02F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Time delay for the EngRunReqTot-signal (necessary to solve the algebraic loop caused + by the Wait4CluStrt-logic) */ +CVC_CAL Float32 cVcVmcPmm_t_WaitToReset = 2.F; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: for this amount of time, is it ok for all other EngRunReqs to become 0, uhev */ +CVC_CAL Float32 cVcVmcPmm_tc_AccPedDer = 0.1F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Time constant of accelerator pedal low pass derivative filter */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_BcmLongAccFilt = 0.5F; /* + Unit: s + MIN/MAX: -1000000000 .. 1000000000 + Description: Filter constant for acceleration from BCM LongAcc */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_BrkTrqFilt = 0.F; /* + Unit: s + MIN/MAX: -10000000 .. 1000000000 + Description: Filter constant for Brake trq filter */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_tc_LatAccFilt = 0.F; /* + Unit: s + MIN/MAX: 0 .. 10 + Description: Lat acc filter constant */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_StandStill = 0.1F; /* + Unit: s + MIN/MAX: -10000000 .. 10000000000 + Description: Filter constant for filter when stand still */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_tc_VdmAccFilt = 0.F; /* + Unit: s + MIN/MAX: -10000 .. 10000 + Description: Filter constant for vehicle acceleration signal from VDM */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_VehAccFilt = 0.3F; /* + Unit: s + MIN/MAX: -1000000000000 .. 10000000000000 + Description: Filter constant for acceleration calculated from vehicle speed */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_v_12VStrtMax = 0.F; /* + Unit: km/h + MIN/MAX: -1000 .. 1000 + Description: Maximum speed for 12V start */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_CluStrtSpdAllw = 70.F; /* + Unit: km/h + MIN/MAX: 0 .. 255 + Description: Speed-limits for allowing clu-strt instead of 12V start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_v_DrLeaveLim = 5.F; /* + Unit: km/h + MIN/MAX: -500 .. 500 + Description: Vehicle speed limit to activate driver leave vehicle logic */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadCluStrtDi = 8.F; /* + Unit: km/h + MIN/MAX: -100 .. 400 + Description: Vehicle speed limit to prevent a clutch start request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadCluStrtEna = 10.F; /* + Unit: km/h + MIN/MAX: -100 .. 400 + Description: Vehicle speed limit to enable a clutch start request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadGearLvrPNDiseng = 0.F; /* + Unit: km/h + MIN/MAX: 0 .. 255 + Description: Max speed to keep Efad engaged to wheels in P/N */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKIsgBrk = 1.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to disable the ISG-mode request (when braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKIsgDrv = 5.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive) + */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco = 5.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive) + in HybridEco */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv = 8.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lev + er is placed in Drive) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco = 8.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lev + er is placed in Drive) in HybridEco */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKIsgBrk = 0.1F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to allow an ISG reconfig request (when braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKIsgDrv = 0.1F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in D + rive) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco = 0.1F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in D + rive) in HybridEco */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv = 4.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and + gear lever is placed in Drive) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco = 4.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and + gear lever is placed in Drive) in HybridEco */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_EngStopReqAT = 350.F; /* + Unit: km/h + MIN/MAX: 0 .. 350 + Description: Vehicle speed threshold to allow engine stop request */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_v_EradOffSpdLim = 140.F; /* + Unit: km/h + MIN/MAX: -300 .. 300 + Description: Erad disengage speed to high */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_v_EradOnSpdLim = 130.F; /* + Unit: km/h + MIN/MAX: -300 .. 300 + Description: Erad engage speed limit */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_v_EradSpdCtrl = 255.F; /* + Unit: km/h + MIN/MAX: 0 .. 500 + Description: Vehicle speed to request erad idle speed (speed control) */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ +CVC_CAL Float32 cVcVmcPmm_v_FCAdaptVehRst = 35.F; /* + Unit: km/h + MIN/MAX: -300 .. 300 + Description: Selected gear for fuel cut adaption */ +CVC_CAL Float32 cVcVmcPmm_v_FCAdaptVehSet = 40.F; /* + Unit: km/h + MIN/MAX: -300 .. 300 + Description: Selected vehicle speed for fuel cut adaption */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStandStillVehSpdOK = 0.F; /* + Unit: km/h + MIN/MAX: -5000 .. 5000 + Description: Vehicle speed is low enough for an ISG-request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStopCoastSpdMax = 0.F; /* + Unit: km/h + MIN/MAX: 0 .. 300 + Description: Max vehicle speed to allow ISG stop during coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStopCoastSpdMinOff = 0.F; /* + Unit: km/h + MIN/MAX: 0 .. 300 + Description: Min vehicle speed to allow ISG stop during coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStopCoastSpdMinOn = 0.F; /* + Unit: km/h + MIN/MAX: 0 .. 300 + Description: Min vehicle speed to allow ISG stop during coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_v_PwdSpeedLimit = 10.F; /* + Unit: km/h + MIN/MAX: 0 .. 1000 + Description: threashold to allow powerdown */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_ReqEngDrDir = -1.F; /* + Unit: km/h + MIN/MAX: -350 .. 350 + Description: vehicle speed threashold to go to total neutral due to not moving in intended direct + ion */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_v_SpeedLimitHG = 2.F; /* + Unit: km/h + MIN/MAX: -300 .. 300 + Description: Speedlimit. below set speed Stop inhibit is active */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_CAL Float32 cVcVmcPmm_v_StallRcvStart = 5.F; /* + Unit: km/h + MIN/MAX: 0 .. 10000 + Description: vehicle speed to allow stall restart on only cl or/and neutral */ +CVC_CAL Float32 cVcVmcPmm_v_StallReset = -2.F; /* + Unit: km/h + MIN/MAX: -500 .. 500 + Description: Stall recovery when vehicle is near standing still */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_v_StandStillLoLim = 2.F; /* + Unit: km/h + MIN/MAX: -300 .. 300 + Description: Low Speed Activation for Stand Still Time Constant */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_TotNtrlReset = 18.F; /* + Unit: km/h + MIN/MAX: 0 .. 350 + Description: vehicle speed threashold to exit total neutral */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_TotNtrlSet = 25.F; /* + Unit: km/h + MIN/MAX: 0 .. 350 + Description: vehicle speed threashold to go to total neutral */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_TotNtrlVehDrDir = -1.F; /* + Unit: km/h + MIN/MAX: -350 .. 350 + Description: vehicle speed threashold to go to total neutral due to not moving in intended direct + ion */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_v_TransRunRqDlyMaxHmi = 125.F; /* + Unit: km/h + MIN/MAX: 0 .. 250 + Description: Min speed to skip delay on fr trans run request in power meter logic */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_v_TrnEngBlockMax = 5.F; /* + Unit: km/h + MIN/MAX: -1000 .. 1000 + Description: Max speed for blocking TrnMode */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Float32 cVcVmcPmm_v_TrnMdeC3OilPresMax = 20.F; /* + Unit: km/h + MIN/MAX: 0 .. 350 + Description: vehicle speed threashold to go to total neutral during C3 oil pressure build up */ +#endif + +/* SVmcPmm__HE512_Switch_AUX */ +CVC_CAL Float32 cVcVmcPmm_v_VehMaxStallRcv = 10.F; /* + Unit: km/h + MIN/MAX: 0 .. 255 + Description: Max speed to do stall recovery */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR = -1000.F; /* + Unit: m/s + MIN/MAX: -10000 .. 10000 + Description: Vehicle speed limit to be able to request an ISG-start when gear lever is placed in + Drive */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Float32 cVcVmcPmm_v_WaitToReset = 350.F; /* + Unit: km/h + MIN/MAX: 0 .. 350 + Description: Vehicle speed threshold to allow engine stop for a while after EngRunReqDriver condi + tion */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 mVcVmcPmm_Z_BrkRoadIncline_c[8] = +{ + /* [0..7] */ 1.F, 2.F, 3.F, 4.F, 5.F, 6.F, 7.F, 8.F + /* 1.F, 2.F, 3.F, 4.F, 5.F, 6.F, 7.F, 8.F */ +}; /* + Unit: - + MIN/MAX: -100000 .. 100000 + Description: Road inclination */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 mVcVmcPmm_Z_BrkRoadIncline_r[8] = +{ + /* [0..7] */ 1.F, 2.F, 3.F, 4.F, 5.F, 6.F, 7.F, 8.F + /* 1.F, 2.F, 3.F, 4.F, 5.F, 6.F, 7.F, 8.F */ +}; /* + Unit: Nm + MIN/MAX: -100000 .. 100000 + Description: Brake torque */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 mVcVmcPmm_tc_HillGradient[6][4] = +{ + { + /* [0][0..3] */ 1.F, 2.F, 4.F, 4.F + /* 1.F, 2.F, 4.F, 4.F */ + }, + { + /* [1][0..3] */ 1.F, 2.F, 4.F, 4.F + /* 1.F, 2.F, 4.F, 4.F */ + }, + { + /* [2][0..3] */ 1.F, 2.F, 4.F, 4.F + /* 1.F, 2.F, 4.F, 4.F */ + }, + { + /* [3][0..3] */ 1.F, 2.F, 4.F, 4.F + /* 1.F, 2.F, 4.F, 4.F */ + }, + { + /* [4][0..3] */ 1.F, 2.F, 4.F, 4.F + /* 1.F, 2.F, 4.F, 4.F */ + }, + { + /* [5][0..3] */ 1.F, 2.F, 4.F, 4.F + /* 1.F, 2.F, 4.F, 4.F */ + } +}; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: Hill Gradient Time Constant for filter depending on TrqWhlBrk and Vehicle Speed. */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 mVcVmcPmm_tc_HillGradient_c[4] = +{ + /* [0..3] */ 0.F, 500.F, 1000.F, 2000.F + /* 0.F, 500.F, 1000.F, 2000.F */ +}; /* + Unit: Nm + MIN/MAX: 0 .. 5000 + Description: Total Wheel Trq Brake */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 mVcVmcPmm_tc_HillGradient_r[6] = +{ + /* [0..5] */ 0.F, 2.F, 5.F, 10.F, 50.F, 100.F + /* 0.F, 2.F, 5.F, 10.F, 50.F, 100.F */ +}; /* + Unit: km/h + MIN/MAX: 0 .. 300 + Description: Vehicle speed */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_IsgStrtAllow[6] = +{ + /* [0..5] */ 50.F, 50.F, 50.F, 0.F, 0.F, 0.F + /* 50.F, 50.F, 50.F, 0.F, 0.F, 0.F */ +}; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: Minimum available ISG torque to allow ISG start */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_IsgStrtAllow_x[6] = +{ + /* [0..5] */ 500.F, 1000.F, 1500.F, 2500.F, 3500.F, 5000.F + /* 500.F, 1000.F, 1500.F, 2500.F, 3500.F, 5000.F */ +}; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Engine speed */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_TransHeatReq[6] = +{ + /* [0..5] */ 600.F, 600.F, 500.F, 325.F, 250.F, 200.F + /* 600.F, 600.F, 500.F, 325.F, 250.F, 200.F */ +}; /* + Unit: Nm + MIN/MAX: -1000 .. 1000 + Description: Minimum torque to send heat request to TmStrt to warm transmission oil */ +#endif + +/* SVmcPmm__HE821__ransHeatReq_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_TransHeatReq_x[6] = +{ + /* [0..5] */ 0.F, 50.F, 55.F, 80.F, 110.F, 140.F + /* 0.F, 50.F, 55.F, 80.F, 110.F, 140.F */ +}; /* + Unit: km/h + MIN/MAX: 0 .. 300 + Description: Vehicle speed */ +#endif + +/* SVmcPmm__HE821__ransHeatReq_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 tVcVmcPmm_Z_HillGradAcc2deg[5] = +{ + /* [0..4] */ -90.F, -45.F, 0.F, 45.F, 90.F + /* -90.F, -45.F, 0.F, 45.F, 90.F */ +}; /* + Unit: Deg + MIN/MAX: -90 .. 90 + Description: Hill Gradient i degree */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 tVcVmcPmm_Z_HillGradAcc2deg_x[5] = +{ + /* [0..4] */ -9.81F, -4.9F, 0.F, 4.9F, 9.81F + /* -9.81F, -4.9F, 0.F, 4.9F, 9.81F */ +}; /* + Unit: m/s2 + MIN/MAX: -500 .. 500 + Description: X-value (longit. accel. input), relation of accel. to slope(deg); */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 tVcVmcPmm_p_BrVacuumVeh[7] = +{ + /* [0..6] */ -45.F, -50.F, -55.F, -60.F, -65.F, -70.F, -90.F + /* -45.F, -50.F, -55.F, -60.F, -65.F, -70.F, -90.F */ +}; /* + Unit: kPa + MIN/MAX: -10000 .. 10000 + Description: Brake vacuum level to request an restart, depending on vehicle speed */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 tVcVmcPmm_p_BrVacuumVeh_x[7] = +{ + /* [0..6] */ 0.F, 15.F, 30.F, 45.F, 60.F, 75.F, 300.F + /* 0.F, 15.F, 30.F, 45.F, 60.F, 75.F, 300.F */ +}; /* + Unit: km/h + MIN/MAX: -500 .. 500 + Description: Vehicle speed */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/**************************************************************************************************\ + CVC_CAL: CVC calibration constants in FLASH | Width: 8 +\**************************************************************************************************/ +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStartEnable_dbi = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 12V Start Enable debug */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStartEnable_swi = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 12V Start Enable debug */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtBlk_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtBlk_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtTrigNewPos = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use new position of flank trigger for 12V-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_ATComStrt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Change of mind situation can set StartAllowedPath (even if PowerTrainDisengaged=0) a + s long as EngOnReqTrans is still =1 */ +CVC_CAL Bool cVcVmcPmm_B_AbrtFrstStrtStall = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recoverty to close to fisrt start */ +CVC_CAL Bool cVcVmcPmm_B_AbrtNtrlAdapt = 1; /* Description: demand neutral to be valid for stall rec + overy */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallAbortHard = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort Stall on StrtAbortHard */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallEngClntL = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort Stall on Engine coolant temperature low */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallGp = 0; /* Description: Stallrecoveryonly if an stop/start vehicle + */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallMicHev = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort Stall on MicHevMode set to stop/start off */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallRcShutOff = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort Stall on PpmRc flywheel protection */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallRcvInSpd = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery if veh is in higher speed. */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallSeatBelt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort Stall on Driver Seat Belt */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallSsRcfSet = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set enable stall recovery if vehicle have crashed. */ +CVC_CAL Bool cVcVmcPmm_B_AbrtStallTime = 1; /* Description: power down after a certain time in stall + */ +CVC_CAL Bool cVcVmcPmm_B_AbsStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block start if ABS is active */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkAbs = 1; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Keep engine running if ABS is active */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkEngRunReq = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use the enigne running request from brake control */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkEngRunReqAlive = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: If engine running request from brake control is missing, request start */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkHGSkipPark = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use separate HillGradient conditions to allow engine stop if gearlever in P */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkHillGrad = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use brake for ensureing engine is running when in high slopes */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Bool cVcVmcPmm_B_BrkHillGradStart = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Value sent out if not Epb Qf Long Acc is correct */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_CAL Bool cVcVmcPmm_B_BrkStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block/delay start if ABS Pump is active (indicated by EngRunngReqByBrk == 1) */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkUseNegVacuum = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use negative brake vacuum signal */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkVacuum = 1; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use brake vacuum for stop/start */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkVacuumVeh = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use brake vacuum adapted for vehicle speed for stop/start */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +CVC_CAL Bool cVcVmcPmm_B_CTFStart = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Start Change of mind Test Function */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtBlk_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtBlk_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtInDeplBlk = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block Clutch Start in Depletion Operation */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_CrShPathEnable_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_CrShPathEnable_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_CrShaftRampDownIgnore = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore to wait for the tq to have ramped out before turning off the engine */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Bool cVcVmcPmm_B_DepStop = 1; /* Description: Ovverride StartAllowed */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_DepStopAT = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ovverride StartAllowed */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Bool cVcVmcPmm_B_DepStrt = 1; /* Description: Use Dep Start Allowed */ +CVC_CAL Bool cVcVmcPmm_B_DrLeaveEnable = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable driver leave vehicle logic */ +CVC_CAL Bool cVcVmcPmm_B_DrLeaveKeepRunReq = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable driver leave vehicle keep engine running */ +CVC_CAL Bool cVcVmcPmm_B_DrLeavePowerDown = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable driver leave power down */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_ERADTqAllw = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override EradTqAllw */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_Efad12VStrtEnblIngoreDep = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: If false 12VStartEnable can not be set without having permission from Dep(StartAllow + ed = True) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadGearLvrPNDisengEna = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Disengage Efad in gear lever position Park and Neutral */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadPathEnaParkEngd = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable Efad path disregarding park engaged status */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadPathEnable_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadPathEnable_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadUse12VStrt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadUseCluStrt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadUseIsgStrt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_EngOnDelayIgnore = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore delay for EnOnReq off */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Bool cVcVmcPmm_B_EngOnReq_dbi = 0; /* Description: override B_EngOnReq */ +CVC_CAL Bool cVcVmcPmm_B_EngOnReq_swi = 0; /* Description: override B_EngOnReq */ +CVC_CAL Bool cVcVmcPmm_B_EngRunReqTot_dbi = 0; /* Description: override B_RunOnReqTot */ +CVC_CAL Bool cVcVmcPmm_B_EngRunReqTot_swi = 0; /* Description: override B_EngRunReqTot */ +CVC_CAL Bool cVcVmcPmm_B_EngStoppedUseHiRes = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: rpm to consider engine stopped */ +CVC_CAL Bool cVcVmcPmm_B_EngineArchitecture = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Switch for signal conditioning depending on engine architecture. 0= VEA GEN I/II ; 1 + = GEP3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradIgnrPathDisable = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore the Erad Path Disable signal */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradPathEnable_dbi = 0; /* Description: override EradPath with this switch, + */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradPathEnable_swi = 0; /* Description: override EradPath using this switch + */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradRmpDwnTqSignal = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: if 1=> sVcDtcTc_Tq_EradReqWhl, If 0 => sVcIsc_Tq_Erad */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ +CVC_CAL Bool cVcVmcPmm_B_FCAdaptEnable = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable fuel cut adaption */ +CVC_CAL Bool cVcVmcPmm_B_FCAdaptIdle = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable fuel cut adaption */ +CVC_CAL Bool cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set fast engagement during ISG-start only after ISG-start has been requested */ +CVC_CAL Bool cVcVmcPmm_B_GlitchEngOnTrans = 0; /* Description: Use glitch block on eng run req trans + */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_ISGTqAllw = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override ISGTqAllw */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_IgnoreGearLevRespStrt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore logic for responsive engine start as function of gear lever position */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ +CVC_CAL Bool cVcVmcPmm_B_IgnrCcActive = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore cruise control active condition */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IgnrDepl = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: When enabled, this label will ignore the depletion-conditon for blocking clutch star + ts */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IgnrPropAlwdEfad = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore the Propulsion Allowed signal for the Efad Path Enable logic */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IgnrPropAlwdIsg = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore the Propulsion Allowed signal for the Isg Path Enable logic */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgIgnrPathDisable = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore the Isg Path Disable signal */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgRmpDwnTqSignal = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: if 1=> sVcDtcTc_Tq_IsgReq, If 0 => sVcIsc_Tq_Isg */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStartEnable_dbi = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Isg Start Enable debug */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStartEnable_swi = 0; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Isg Start Enable debug */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block clutch start if run req is set by fast ISG stop function, to enable use of ISG + -start in speed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore actual Efad path to allow eng run req ISG stop */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtBlk_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtBlk_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtFirstStartOverride = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override first start condition in ISG start ok calculation */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable aborting ISG-start in D/R */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtInDUseEfadPathAct = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Trigger ISG-start in D if Efad actual path is already ISG */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtPahReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtPahReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtPcrOverride = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override PCR in ISG start ok calculation */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtRunDryOverride = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override run dry condition in ISG start ok calculation */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtSpdCtrlOverride = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override first start condition in ISG start ok calculation */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtTempOverride = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Override temp condition in ISG start ok calculation */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE818_Switch_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtUseSpdCtrl = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Max ISG torque loss to permit ISG start and permit engine stop. */ +#endif + +/* SVmcPmm__HE818_Switch_AUX */ +CVC_CAL Bool cVcVmcPmm_B_LosStop = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: UseLOS Stop */ +CVC_CAL Bool cVcVmcPmm_B_LosStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use LOS Start Allowed */ +CVC_CAL Bool cVcVmcPmm_B_MinStopCEC = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_MinStopChas = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_MinStopClim = 0; /* Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_MinStopEMS = 0; /* Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_MinStopEmLv = 0; /* Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_MinStopTm = 0; /* Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_MinStopTrans = 0; /* Description: block system request */ +CVC_CAL Bool cVcVmcPmm_B_PTDGearLevAT = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use Gear Lever position to set powertrain disengaged. */ +CVC_CAL Bool cVcVmcPmm_B_PTDStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use powertrain disengaged to allow a start */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdAbortHard = 0; /* Description: Active powerdown if abort start is set an + d an stall has occured */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdAbrtStall = 1; /* Description: Active powerdown if abort stall is set an + d an stall has occured */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdDrReadyAbortHard = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Powerdown due to AbortHard possible also at DrReady */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdIgnoreQfDrDoor = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore QF for driver door information */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRcShutOff = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Powerdown may be carried out on two-mass flywheel protection */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRcShutOffDCA = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Reset Powerdown timer for two-mass flywheel protection in low DriveCycleActive */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRcfDep = 0; /* Description: Activate powerdown if reconfig from dependab + ility is set */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRpmOnly = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Powerdown may be carried out on engine speed instaed of Ice Status signal */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBelt = 1; /* Description: Activate pwd if seatbelt is unbuckled */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBeltDoor = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Include driver door status as condition for pwd when seatbelt is unbuckled */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBeltN = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Allow pwd when seatbelt is unbuckled for gearlever in N */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBeltP = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Allow pwd when seatbelt is unbuckled for gearlever in P */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSpeedLimit = 1; /* Description: Activate speed limit threashold for powe + rdown */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdTCMModeFail = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by tcm mode not following request */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdTCMNodeAlive = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by Tcm node alive */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdTransFailure = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by trans failure signal */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdUseSeatBeltAT = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use gear lever position as condition for pwd when seatbelt is unbuckled */ +#endif +CVC_CAL Bool cVcVmcPmm_B_RcShutOff = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ShutOffReq from VcPpmRc (dual mass flywheel protection) */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL Bool cVcVmcPmm_B_SerialModeSafeBISG = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 1= Use SafeBISG during serial mode start */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_SkipIsgCalibration = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Skip ISG standby request at Ice stop for sensor calibration */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActAbs = 0; /* Description: Use ABS in SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActAmbPres = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by low ambient pressure */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActBrk = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use brake request, used to ensure no stop after ABS pump activation */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltD = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by opened driver door when gearlever in D and belt is on + */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltN = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by opened driver door when gearlever in N and belt is on + */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltP = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by opened driver door when gearlever in P and belt is on + */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltR = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by opened driver door when gearlever in R and belt is on + */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorNoBelt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by opened driver door when belt is off and door is opened + (AT only) */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDrMdInv = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 0=inhibit SsActive if matching any of the selected drive modes, 1=allow SsActive if + matching any of the selected drive modes */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDriverLeaving = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by opened driver door when gearlever in P, belt is off an + d door is opened */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActEcoMde = 1; /* Description: use reconfig of stop/start by eco mode */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActGpSs = 0; /* Description: use reconfig of stop/start by global paramet + er */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActHood = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use HoodStatus in SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActNtrl = 0; /* Description: Neutral must be valid for stop/start to be a + ctive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActRcfSet = 0; /* Description: use reconfig of stop/start from dependabil + ity control */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActRcfSetAlt = 0; /* Description: use reconfig of stop/start from Engine + control */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActSeatBelt = 0; /* Description: use reconfig of stop/start by seatbelt + */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActSeatBeltNoSeq = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Require no sequence in condition to allow SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActSeatBeltPrkBlock = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block reconfig of stop/start by seatbelt if AT gear lever in P */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTCMModeFail = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by tcm mode not following request */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTCMNodeAlive = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by Tcm node alive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTemp = 1; /* Description: Require ok Qf on temp to deselect stop/start + */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTempStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: If 1 then temperature condtion can restart the engine */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTipSport = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: When in Tip/Sport, deactivate SS (as an alternative to set EngRunReqDriver in VcDeDm + m) */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTrailer = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by trailer detection */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTransFailure = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use reconfig of stop/start by trans failure signal */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_CAL Bool cVcVmcPmm_B_StallEmiExtraCond = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use extra conditions for StartMode=0 Ice Stall detection */ +CVC_CAL Bool cVcVmcPmm_B_StallIceStrt = 0; /* Description: allow stall to happend via starting */ +CVC_CAL Bool cVcVmcPmm_B_StallIceStrtActrFinishd = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Activate logic to detect that the ICE start was not successful after the start actua + tor is finished */ +CVC_CAL Bool cVcVmcPmm_B_StallIceStrtEmi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug variable to enable ice stall detection during emission starts */ +CVC_CAL Bool cVcVmcPmm_B_StallRcShutOff = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set stall flag on PpmRc flywheel protection */ +CVC_CAL Bool cVcVmcPmm_B_StallRcvAT = 0; /* Description: Stallrecovery in an AT vehicle */ +CVC_CAL Bool cVcVmcPmm_B_StallRcvAccFtOnPed = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall recovery on foot on acc pedal */ +CVC_CAL Bool cVcVmcPmm_B_StallRcvClOnly = 0; /* Description: Stallrecovery when it is enough with on + ly clutch pedal */ +CVC_CAL Bool cVcVmcPmm_B_StallRcvCrnk = 1; /* Description: Stallrecovery on driver cranking */ +CVC_CAL Bool cVcVmcPmm_B_StallRcvFootOnBrPed = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall recovery on foot on brake pedal */ +CVC_CAL Bool cVcVmcPmm_B_StallRcvFrcd = 1; /* + Unit: s + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: stall recovery if an forced start is conductred */ +CVC_CAL Bool cVcVmcPmm_B_StallRun = 1; /* Description: Allow stall to happen via running */ +CVC_CAL Bool cVcVmcPmm_B_StallRunComInhbt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ChangeOfMindInhibit to temporarily prevent StallRun detection */ +CVC_CAL Bool cVcVmcPmm_B_StallRunHiRes = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use sVcEc_n_EngHiRes to detect StallRun */ +CVC_CAL Bool cVcVmcPmm_B_StallRunStartM = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Prevent StallRun if starter motor has engaged */ +CVC_CAL Bool cVcVmcPmm_B_StallRunUnintd = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use stall detection by RPM as input to Unintended Stall flag to EMS */ +CVC_CAL Bool cVcVmcPmm_B_StallStartM = 1; /* Description: allow stall to happend via starting */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbortClu = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Clutch start abort */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbortHard = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Start abortion from starter protection */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbortIsg = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Start abortion from starter protection for Isg */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbortSoft = 0; /* Description: Start abortion from starter protection + */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrt = 0; /* Description: Start abortion */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtAcc = 1; /* Description: start abort if no accelerator pedal is pre + ssed */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtCl = 1; /* Description: start abort on clutch pedal */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtDrReady = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: start abort only if not DrReady */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtIce = 1; /* Description: Start abort only when ice status is in sta + rting */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtNtrl = 1; /* Description: start abort only if not in neutral */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtNtrlValid = 1; /* Description: start abort only if not in neutral a + nd neutral is valid */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtRpm = 1; /* Description: start abort on rpm limit */ +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtStrtM = 1; /* Description: Start abort only when the startmotor is + active */ +CVC_CAL Bool cVcVmcPmm_B_StrtMdeSet = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set start mode in to OB-block */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL Bool cVcVmcPmm_B_StrtMdeSkipTrnMde = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Skip trans mode term in fast start logic */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ +CVC_CAL Bool cVcVmcPmm_B_StrtMdeStopTrig = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use transition Running->Stopping to set StartMode=running */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnEngBlockSkipEngUseReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Skip EngUseReq term in TrnEngBlock logic */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeHev = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use Hybrid logic (Enables serial mode) for control of TransModeReq */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeHevUseNIC = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use NIC ih hybrid vehicle */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeIC = 0; /* Description: Use Idle coast for control of TransModeReq */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeReqBrk = 0; /* Description: Use EngRunReqBrakes for use with Idle Coa + st */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseAwd = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engage gearbox when Stability/Traction control run req=1 */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseBrake = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engage gearbox when Brake run req=1 */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseC3OilPres = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use transmode request to help buld up C3 oil pressure */ +#endif + +/* SVmcPmm__HE512_Switch_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUsePcr = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engage gearbox when PCR run req=1 */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseTrans = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engage gearbox when Transmission run req=1 */ +#endif + +/* SVmcPmm__HE477_MinMax_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnModIsgReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Transmission mode signal to be used for the ISG-mode request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UnintdStallRcShOff = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set Unintended stall on yVcPpmRc_B_ShutOffReq */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Protection for only blocking clutch start when 12V starter is available */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseAgedFuel = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from FsdPc aged fuel */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseAwdRoadGrad = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use Awd road grad */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseBrake = 0; /* Description: Listen to the running request */ +CVC_CAL Bool cVcVmcPmm_B_UseCEC = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from CEC (replaces EMS and TM) */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseChargeInIsgReq = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use Charge from VmcEm for concidering IsgReq */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseChas = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from Chassis */ +CVC_CAL Bool cVcVmcPmm_B_UseClPedAdaptStrtAbrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Switch to use adapted clutch pedal position */ +CVC_CAL Bool cVcVmcPmm_B_UseClim = 1; /* Description: Listen to the running request */ +CVC_CAL Bool cVcVmcPmm_B_UseComInhbtIceStatus = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ChangeOfMindInhibit to exit state IceStatus=Running */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Bool cVcVmcPmm_B_UseDefHGDynoMd = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use default hill gradient value if DynoMode is active */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_CAL Bool cVcVmcPmm_B_UseDep = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from dependability */ +CVC_CAL Bool cVcVmcPmm_B_UseDesDrvDir = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use desired driver direction as condition for stall recovery */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseDly12VStrtVehPwrUp = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable delay of 12Vstart request during vehicle power up due to potential problems r + elated to wake up delay from other nodes */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseDrLeave = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from Driver Leave Logic */ +CVC_CAL Bool cVcVmcPmm_B_UseDriver = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from driver */ +CVC_CAL Bool cVcVmcPmm_B_UseEMS = 1; /* Description: Listen to the running request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseEfadCode = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseEm = 1; /* Description: Listen to the running request */ +CVC_CAL Bool cVcVmcPmm_B_UseEmLv = 0; /* Description: Listen to the running request */ +CVC_CAL Bool cVcVmcPmm_B_UseEmiGpfFC = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable fuel cut request */ +CVC_CAL Bool cVcVmcPmm_B_UseEngClntRunReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable start due to low engine coolant temperature */ +CVC_CAL Bool cVcVmcPmm_B_UseEngOffMaxTime = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable counter for max time for the engine to be shut off. */ +CVC_CAL Bool cVcVmcPmm_B_UseEngOnOff = 0; /* Description: Hold eng running after an restart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseEngOnReqDly = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_UseEradCode = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_UseEradHybrid = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Activate for hybrid cars with an ERAD */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Bool cVcVmcPmm_B_UseFCAdapt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from FC Adaptiotion */ +CVC_CAL Bool cVcVmcPmm_B_UseFanAfterrun = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable start due to Fan Afterrun */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseFirstStartMode = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ +CVC_CAL Bool cVcVmcPmm_B_UseIceEnable = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ICE enable */ +CVC_CAL Bool cVcVmcPmm_B_UseIceStall = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable engine run request due to engine stall */ +CVC_CAL Bool cVcVmcPmm_B_UseIscActvnEMS = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: use startmotor to detect eng running */ +CVC_CAL Bool cVcVmcPmm_B_UseIsg = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from "Isg availble torque" */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgBrk = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch to enable an ISG-mode request when braking in stand still */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgCode = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgSpdCtrlStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG speed control during safe start */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStandStill = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch to enable an ISG-mode request when standing still */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopCoast = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG stop during coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopPostRunReqStandstill = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG stop ICE run request after ISG-stop is completed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopPwrDwn = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG stop during power down */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopRunReqCoast = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG stop ICE run request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopRunReqStandstill = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG stop ICE run request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStrtAtStndStill = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: When enabled, every engine start will be an ISG-start when standing still and brakes + are applied */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseLOS = 0; /* Description: Listen to the running request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseLastStrtMod = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable functionality to always request a safe start for the last start attempt */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ +CVC_CAL Bool cVcVmcPmm_B_UseObd = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from OBD */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_UseOilTemp = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use oil temperature to determine if ISG start i possible */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseOld12VStrtAllwd = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_UseOldEngRevStgy = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch to enable the old strategy for engine revving in Park or Neutral */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Bool cVcVmcPmm_B_UseOldEngStrtAllwd = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_UsePowerDownReq = 0; /* Description: allow a powerdown to occur */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_UsePropFrntRampDown = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 1= Use sVcVmcAjc_Tq_DrPropFrntReq,0 = use sVcDtcCta_Tq_CrShInstReq to determine if t + orque is ramped down */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_CAL Bool cVcVmcPmm_B_UsePsm = 1; /* Description: Listen to the running request */ +CVC_CAL Bool cVcVmcPmm_B_UseRc = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from PpmRc (Starter protection etc) */ +CVC_CAL Bool cVcVmcPmm_B_UseRemoteStart = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from Remote Start */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseRespStartReqFromDeDmm = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use RespStartReq from DeDmm for blocking CluStrt */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseRespStartreqFromVmcEm = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use RespStartReq from VmcEm for evaluating CluuStrtBlk */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Choose which resp start request to block the possiblity to request a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseRunDryInhb = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 1-Block clutch, ISG and 12V Start if RunDry i set, 0-engine start possible. */ +CVC_CAL Bool cVcVmcPmm_B_UseRunDryInhbOnly = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: If TRUE, engine can start as soon as RunDry AND RunDryCrnkInhb flags go done, otherw + ise a car restart is also needed. */ +CVC_CAL Bool cVcVmcPmm_B_UseSapp = 0; /* Description: Listen to the running request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_UseSsActTemp = 1; /* Description: If 1 then temperature condtion can inhibi + t StopStart */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_UseSsActive = 1; /* Description: Set stop/start as active */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_CAL Bool cVcVmcPmm_B_UseStabCtrl = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from StabilityCtlr (sVcVmcAwd_D_EngRunReqStabCtrl) */ +CVC_CAL Bool cVcVmcPmm_B_UseStallRcvBlock = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use stall recovery block from FsdPc, empty fuel tank. */ +CVC_CAL Bool cVcVmcPmm_B_UseStartAllowedPath = 0; /* Description: Ovverride StartAllowed */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL Bool cVcVmcPmm_B_UseStartModeHybrid = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Calibration switch to use StartModeHybrid */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseStartModeHybrid12V = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Calibration switch for StartModeHybrid12V */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseStrtMde3All12vStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use Startmode3 in all 12V starts, also for slow engagements */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ +CVC_CAL Bool cVcVmcPmm_B_UseTm = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Listen to the running request from tm (replace run req EMS in PHEV) */ +CVC_CAL Bool cVcVmcPmm_B_UseTotEngRunReq = 0; /* Description: Use Total EngRunReqs instead of micro + hybrid: wait for driver to be last system */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseTqOffsForCluStrtEval = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Inhibit clutch start if no Efad torque reserve is available */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseTqSPM = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Torque SPM interface. Set = 1 to choose GEP3 signals */ +CVC_CAL Bool cVcVmcPmm_B_UseTrans = 1; /* Description: Listen to the running request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseWait4CluStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable functionality to wait for the vehicle speed to increase before requesting a c + lutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Bool cVcVmcPmm_B_UseWait4Eng2Stop = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: When enabled, the engine must stop completely before another engine start attempt is + requested */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Bool cVcVmcPmm_B_UseWhlSpdDirection = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use wheel speed direction */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL UInt8 cVcVmcPmm_D_BrkHillVal = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Used to set if hill gradient function should be able to restart the engine(2) or onl + y inhibit stop(1) */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +CVC_CAL UInt8 cVcVmcPmm_D_DrDoorOpen = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 10 + Description: DoorDrvrSts detection of driver door open */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_Efad12VStrtMax = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Maximum number of 12V start attempts allowed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadCluStrtMax = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Maximum number of clutch start attempts allowed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadIsgStrLoosenLim = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: When the number of ISG start attempts exceed this limit, the conditions for the next + ISG-start attempt will be loosen */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadIsgStrtMax = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Maximum number of ISG start attempts allowed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadModReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_D_EfadModReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadPathAllwd1 = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Allow ISG speed control (as a function of EFAD path actual) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadPathAllwd2 = 5; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Allow ISG speed control (as a function of EFAD path actual) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadPathReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Debug value */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_D_EfadPathReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL UInt8 cVcVmcPmm_D_EngmtModSmooth = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Engagement mode smooth */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding1 = 6; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: Epb coding */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding2 = 12; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: Epb coding */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding3 = 3; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: Epb coding */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding4 = 10; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: Epb coding */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL Int8 cVcVmcPmm_D_FCAdaptGearRst = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: -10 .. 10 + Description: Selected gear for fuel cut adaption */ +CVC_CAL Int8 cVcVmcPmm_D_FCAdaptGearSet = 3; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: -10 .. 10 + Description: Selected gear for fuel cut adaption */ +CVC_CAL UInt8 cVcVmcPmm_D_FCAdaptLockUpRst = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 10 + Description: Selected lock up status for fuel cut adaption */ +CVC_CAL UInt8 cVcVmcPmm_D_FCAdaptLockUpSet = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 10 + Description: Selected lock up status for fuel cut adaption */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL UInt8 cVcVmcPmm_D_GearLevRespStrtOK1 = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: Allow a responsive engine start as function of gear lever position */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL UInt8 cVcVmcPmm_D_GearLevRespStrtOK2 = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: Allow a responsive engine start as function of gear lever position */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Int8 cVcVmcPmm_D_GearTotNtrl = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: -1 .. 9 + Description: Gear threashold to go to total neutral */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL UInt8 cVcVmcPmm_D_QfEpbLongAccInit = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Epb Qf LongAcc acceptance */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL UInt8 cVcVmcPmm_D_QfEpbLongAccOK = 3; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Epb Qf LongAcc acceptance */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL UInt8 cVcVmcPmm_D_SafeBISG = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Calibration of start mode during development */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL UInt8 cVcVmcPmm_D_SsActDrMd1 = 100; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: First drive mode to detect, affecting SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL UInt8 cVcVmcPmm_D_SsActDrMd2 = 100; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Second drive mode to detect, affecting SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL UInt8 cVcVmcPmm_D_SsActDrMd3 = 100; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Third drive mode to detect, affecting SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_CAL UInt8 cVcVmcPmm_D_StartMode_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 100 + Description: Calibration of start mode during development */ +CVC_CAL Bool cVcVmcPmm_D_StartMode_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Calibration of start mode during development */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL UInt8 cVcVmcPmm_D_StrtModDft = 4; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Default start mode */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ +CVC_CAL UInt8 cVcVmcPmm_D_StrtModLongIceStsDetn = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Determine which start mode gets the long time detection for IceStatus=running */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TransModeReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 7 + Description: Debug value */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_D_TransModeReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeHevReqEngNIC = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Transmode NIC request */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeReqEng = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Transmode request */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeReqNtrl = 3; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: TransModeRequest neutral value */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeReqTotNtrl = 4; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: TransModeRequest total neutral value */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Int8 cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: -100 .. 100 + Description: Debug value */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 mVcVmcPmm_Z_BrkRoadIncline[8][8] = +{ + { + /* [0][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [1][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [2][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [3][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [4][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [5][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [6][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + }, + { + /* [7][0..7] */ 0, 0, 0, 0, 0, 0, 0, 0 + /* 0., 0., 0., 0., 0., 0., 0., 0. */ + } +}; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: OK signal to allow for an ISG start in Drive */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/**************************************************************************************************\ + CVC_CAL_MERGEABLE: Mergeable CVC calibration constants in FLASH | Width: 32 +\**************************************************************************************************/ +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_Te_Efad12VStrtEngClntMin = -5.F; /* + Unit: deg C + MIN/MAX: -300 .. 300 + Description: Minimum coolant temperature to allow 12V-starts */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_Tq_IsgStopCoastDrReqHyst = 0.F; /* + Unit: Nm + MIN/MAX: 0 .. 10000 + Description: Max driver requested torque (including regen) to allow ISG stop in coast, hysteresis + */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngRunning = 700.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: rpm to consider engine running */ +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngStalled = 10.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: rpm to consider engine stalled */ +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngStarted = 500.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: rpm to consider engine started */ +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngStopped = 100.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: rpm to consider engine stopped */ +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_StrtAbrtRpm = 400.F; /* + Unit: rpm + MIN/MAX: 0 .. 10000 + Description: rpm to allow a start abortion */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_StrtDiffFast = 0.F; /* + Unit: rpm + MIN/MAX: -10000 .. 10000 + Description: Engine speed diff for triggering fast map for start */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE785__sgStrtAllow_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_rt_IsgStrtAllow = 0.F; /* + Unit: - + MIN/MAX: 0 .. 1 + Description: Max ISG torque loss to permit ISG start and permit engine stop. */ +#endif + +/* SVmcPmm__HE785__sgStrtAllow_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_t_EfadPahDiTiOut = 5.F; /* + Unit: s + MIN/MAX: -5000 .. 5000 + Description: Maximum time allowed to wait for there being no torque acting on the electric motor + (when closing the EFAD path) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_t_EngRunStall = 30.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Time for engine running before reset stall counter */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE785__sgStrtAllow_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_t_IsgRunReqDelay = 2.F; /* + Unit: s + MIN/MAX: 0 .. 100 + Description: Delay time to send run req due to low trq from ISG or low power from HV battery */ +#endif + +/* SVmcPmm__HE785__sgStrtAllow_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_v_Efad12VStartMax = 10.F; /* + Unit: km/h + MIN/MAX: 0 .. 250 + Description: Max vehicle speed for 12V start motor crank */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_v_Efad12VStartMin = -100.F; /* + Unit: km/h + MIN/MAX: -250 .. 250 + Description: Min vehicle speed for 12V start motor crank */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_v_IsgStopCoastSpdHyst = 0.F; /* + Unit: km/h + MIN/MAX: 0 .. 300 + Description: Max vehicle speed to allow ISG stop during coast, hysteresis */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/**************************************************************************************************\ + CVC_CAL_MERGEABLE: Mergeable CVC calibration constants in FLASH | Width: 8 +\**************************************************************************************************/ +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_EfadUseFactory12VStrt = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable/disable forced 12V-start when in factory mode */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_IgnrPropAlwdCrSh = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore the Propulsion Allowed signal for the Crankshaft Path Enable logic */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#ifdef SVmcPmm__HE637__hEnable_dbi_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_IsgPathEnable_dbi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug value */ +#endif + +/* SVmcPmm__HE637__hEnable_dbi_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#ifdef SVmcPmm__HE637__hEnable_dbi_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_IsgPathEnable_swi = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Debug switch */ +#endif + +/* SVmcPmm__HE637__hEnable_dbi_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE389__ReqUseTrans_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_PwrUpIceStrtReqUseTrans = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request first start if RunReqTrans is active at startup */ +#endif + +/* SVmcPmm__HE389__ReqUseTrans_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_StrtMdeEscCond = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 1=Use esc active condition for fast start mode */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_Use7DCT = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: switch */ +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_UseClPedAdaptStallRecovery = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Switch to use adapted clutch pedal position */ +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_AbortStart = 4; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 100 + Description: Number of abroved start attempts */ +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_CTF = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Change of mind test function. A stop will be requested until a certain rpm threashol + d is reached. */ +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_EngmtModFast = 2; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Engagement mode fast */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_FastBISG = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Calibration of start mode during development */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_IceStsStarting = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 127 + Description: An extra calibration possibility to block a start actuator */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_NormalBISG = 1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Calibration of start mode during development */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ +#include "CVC_CAL_END.h" + +#include "PREDECL_CONST_START.h" +/**************************************************************************************************\ + CVC_CONST_EXT: External CVC constants in FLASH | Width: 8 +\**************************************************************************************************/ +CVC_CONST_EXT UInt8 cVc_D_GearLevATDrive; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 3 .. 3 + Description: Drive gear lev constant. */ +CVC_CONST_EXT UInt8 cVc_D_GearLevATNeutral; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 2 .. 2 + Description: Neutral gear lev constant. */ +CVC_CONST_EXT UInt8 cVc_D_GearLevATPark; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 0 + Description: Park gear lev constant. */ +CVC_CONST_EXT UInt8 cVc_D_GearLevATReverse; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 1 .. 1 + Description: Reverse gear lev constant. */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CONST_EXT UInt8 cVc_D_GearLevAT2nd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 6 .. 6 + Description: 2nd gear lev constant. */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CONST_EXT UInt8 cVc_D_GearLevAT3rd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 5 .. 5 + Description: 3rd gear lev constant. */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_CONST_EXT UInt8 cVc_D_GearLevAT4th; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 4 .. 4 + Description: 4th gear lev constant. */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +#include "PREDECL_CONST_END.h" + +#include "CVC_DISP_START.h" +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 32 +\**************************************************************************************************/ +CVC_DISP UInt32 rVcVmcPmm_D_EngRunReqLogg; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 4294967295 + Description: [0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[ + 7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10 + =Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][ + 20=EngClnt][21=EngRunReq MaxTime] */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_Tq_BrkTrqFilt; /* + Unit: Nm + MIN/MAX: 0 .. 5000 + Description: Filted brake trq signal */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_DISP Float32 rVcVmcPmm_Tq_EradMaxLimNoLim; /* + Unit: Nm + MIN/MAX: -10000 .. 10000 + Description: ERAD max torque no limits (HW boundary) */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ +CVC_DISP Float32 rVcVmcPmm_Xd_AccPedalPos; /* + Unit: %/s + MIN/MAX: -1000 .. 1000 + Description: Derivative of accelerator pedal position */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Float32 rVcVmcPmm_Z_RoadGradient; /* + Unit: - + MIN/MAX: -100000 .. 100000 + Description: Road gradient */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_BcmLongAccFilt; /* + Unit: m/s2 + MIN/MAX: -20 .. 20 + Description: Filted accelerations signal from EPB LongAcc */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_MergedAcc; /* + Unit: m/s2 + MIN/MAX: -20 .. 20 + Description: Merged Acc signal (sVcEpb_a_LongAcc-a_HGVehFilt) */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_MergedAccFilt; /* + Unit: m/s2 + MIN/MAX: -20 .. 20 + Description: Filted merged accelerations signal from EPB and Vehicle speed acc */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_MergedAccSaturated; /* + Unit: m/s2 + MIN/MAX: -20 .. 20 + Description: Saturated merged acceleration signal */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_SignedHGVehFilt; /* + Unit: m/s2 + MIN/MAX: -20 .. 20 + Description: Signed vehicle speed acceleration signal. If vehicle is moving backwards. */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Float32 rVcVmcPmm_a_Veh; /* + Unit: m/s2 + MIN/MAX: -10 .. 10 + Description: Derivied vehicle speed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_VehAccFilt; /* + Unit: m/s2 + MIN/MAX: -20 .. 20 + Description: Filted acceleration calculated from speed. */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Float32 rVcVmcPmm_p_BrVacuumVeh; /* + Unit: kPa + MIN/MAX: -10000 .. 10000 + Description: brake vacum limit in vehicle speed */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +CVC_DISP Float32 rVcVmcPmm_rt_FCLvl; /* + Unit: - + MIN/MAX: 0 .. 1 + Description: Final fuel cut level before realisation. */ +CVC_DISP Float32 rVcVmcPmm_t_EngOff; /* + Unit: s + MIN/MAX: -1000000000 .. 100000000000 + Description: Time the engine has been shut off. */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_DISP Float32 rVcVmcPmm_t_TrnC3OilPres; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: C3 oil pressure buildup time */ +#endif + +/* SVmcPmm__HE512_Switch_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_tc_HillGadient; /* + Unit: s + MIN/MAX: 0 .. 1000 + Description: tc for Hillgradient final filter */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_tc_HillGradient; /* + Unit: s + MIN/MAX: -500 .. 500 + Description: A/T load compensation for drive and reverse. */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_DISP UInt32 sVcVmcPmm_D_EngRunReqLogg; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 4294967295 + Description: Engine run request */ +CVC_DISP Float32 sVcVmcPmm_Z_HillGradientDeg; /* + Unit: deg + MIN/MAX: -10000 .. 10000 + Description: Electrical park brake Hill gradient estimation */ + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 8 +\**************************************************************************************************/ +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_12VStrtCnt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: 12V start counter */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_CluStrtCnt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Clutch start counter */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_EfadModReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 1 .. 5 + Description: Efad mode request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqBrake = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Engine running request brakes */ +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqChas; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 2 + Description: Engine Run Req from Chassie */ +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqDrLeave = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 5 + Description: Engine run req based on driver leave vehicle */ +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqFCAdapt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 2 + Description: FC adapt run req */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_IsgStrtCnt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: ISG start counter */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP UInt8 rVcVmcPmm_D_StallAbortNum; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Number of start attempts */ +CVC_DISP UInt8 rVcVmcPmm_D_TransModeReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 7 + Description: To enable CVC-ECM to request transmission idle states and torque transfer */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_Z_BrkRoadIncline; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: OK signal to allow for an ISG start in Drive */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 sVcVmcPmm_D_EfadPathReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 5 + Description: EFAD path request (0=Don't care 1=Efad2Ice 2=Efad2Whl 5=Disengaged) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqBrkVac; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Engine running request brake vacuum */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqClim; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: EngRunReq from Climate, via VcVmcPmm */ +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqEmLv; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: EngRunReq from Power Supply, via VcVmcPmm */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqHG; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 3 + Description: Engine running request for hill gradient */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +CVC_DISP UInt8 sVcVmcPmm_D_EngagementMode; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Engagement mode (1=smooth, 2=fast) */ +CVC_DISP UInt8 sVcVmcPmm_D_IceStatus; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 5 + Description: Current status of the ICE */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +CVC_DISP UInt8 sVcVmcPmm_D_IsgModReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 7 + Description: Mode request for ISG motor drive system */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +CVC_DISP UInt8 sVcVmcPmm_D_StartMode; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 10 + Description: Type of requested start. (0=Normal, 1=Fast) */ +CVC_DISP UInt8 sVcVmcPmm_D_TransModeReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 7 + Description: To enable CVC-ECM to request transmission idle states and torque transfer */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Int8 sVcVmcPmm_D_WhlMotSysCluOperTypReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 8 + Description: Control signal for diff-speed direction and response level of clutch engagement */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP UInt8 sVcVmcPmm_D_WhlMotSysModReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 7 + Description: Mode request for motor drive system connected to wheel shaft. */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtActrRdy; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 12V start actuator is ready */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtAllwd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: An 12V start is allowed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtBlk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block further 12V start attempts */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtOk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 12Vstrt OK */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtPsbl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: An 12V-start is possible */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: 12V start request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_AbrtFrstStrtStall; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery within x seconds after first start */ +CVC_DISP Bool xVcVmcPmm_B_AbrtNtrlAdapt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery if neutral is not valid. MT only */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallAbortHard; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: AbrtStallAbortHard */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallEngClntL; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery if the engine coolant temp is low */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallGp; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recover if is not an stop/start vehicle */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallMicHev; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery if stop/start strategy is off */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallRcShutOff; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: AbrtStallRcShutOff */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallSeatBelt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery if no seat belt */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallSsRcfSet; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: B_AbrtStallSsRcfSet */ +CVC_DISP Bool xVcVmcPmm_B_AbrtStallTime; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery if neutral is not valid */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_AccPedOKIsgBrk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The acc ped request is low enough for an ISG-reconfig request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_AmbPresLow; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ambient pressure is below limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_AmbTempH; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ambient temp is above limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_AmbTempL; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ambient temp is below limit */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkHGSkipPark; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Normal HillGradient limits for inhibiting stop is ignored allowing stop trigger in g + earlever P */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkHGSkipParkPre; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Normal HillGradient limits for inhibiting stop will be ignored if gearlever P */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_BrkHGStart; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Hill Gradient start of engine due to high/low gradient */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#ifdef SVmcPmm__HE148_Switch_AUX +CVC_DISP Bool xVcVmcPmm_B_BrkHillGradStart = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Hill gradient start of engine */ +#endif + +/* SVmcPmm__HE148_Switch_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_BrkOKIsgBrk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The brake torque request is high enough for an ISG-reconfig request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_BrkRoadIncline; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: OK signal to allow for an ISG start in Drive */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkVacuumStart; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Brake vacuum request to start */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkVacuumVeh; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: brake vacuum start from vacuum level due to vehicle speed */ +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +CVC_DISP Bool xVcVmcPmm_B_CECBlock; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: CEC being blocked */ +CVC_DISP Bool xVcVmcPmm_B_CECBlocked; /* Description: CEC is blocked from demanding a restart */ +CVC_DISP Bool xVcVmcPmm_B_ChasBlocked; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Chassis is blocked from demanding a restart */ +CVC_DISP Bool xVcVmcPmm_B_ClimBlocked; /* Description: climate is blocked from demanding a restart + */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtActrRdy; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Clutch start actuator is ready */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtAllwd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: A clutch start is allowed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtBlk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block further clutch start attempts */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtPsbl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: A clutch start is possible */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtTqRsvBlk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort CluStrt if current EFAD TqReq is too high and 12Vstrt is available */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtVehSpdOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The vehicle speed is high enough to perform a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_CrShPathDisabled; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The crankshaft path is closed */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_DISP Bool xVcVmcPmm_B_CrnkStallRecov; /* Description: Stall detection using startmotor flag */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Dly12VStrtVehPwrUp; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Delay an 12Vstart request during vehicle power up due to potential problems related + to wake up delay from other nodes */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_DrDoorOpen; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Driver door is open */ +CVC_DISP Bool xVcVmcPmm_B_DrLeaveKeepRun; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Keep engine running based on driver leave vehicle */ +CVC_DISP Bool xVcVmcPmm_B_DrLeavePowerDownReq = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Power down request from driver leave */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_DrvCycActvFirstStrt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ignore the unavailable-logic for the first start due to low transmission oil temp (m + ight result in a slow response from the TCM which leads to a delayed start) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_DrvCycActvFirstStrtTiOut; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The maximum time allowed for first start logic connected to the DriveCycleActive sig + nal */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_DrvCycTiOut; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Time out indication for the drivecycle active signal */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_EMSBlock; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: EMS being blocked */ +CVC_DISP Bool xVcVmcPmm_B_EMSBlocked; /* Description: EMS is blocked from demanding a restart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IcePahReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to open the EFAD to ICE path */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IceReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to connect the EFAD to the ICE */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IceReqRst; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to reset the Efad2Ice-request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IceUnavl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The Efad2Ice path is unavailable */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2WhlPahReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to open the EFAD to wheel path */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2WhlUnavl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The Efad2Whl path is unavailable */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EfadDisengdReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to disengage the EFAD */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EfadUnavl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The efad is unavailable */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_ElecMotLowAvailTrq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Currently low available torque levels on the electric motor */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_EmLvBlocked; /* Description: Em Lv is blocked from demanding a restart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_DISP Bool xVcVmcPmm_B_EmiStrt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Emission start */ +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ +CVC_DISP Bool xVcVmcPmm_B_EngOnOff; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: EngOnOff */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EngOnReqDly; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: delay */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_EngOnReqEng; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Eng on request from engine control, later on synced with transmission */ +CVC_DISP Bool xVcVmcPmm_B_EngOnReqPre; /* Description: EngRunning Request for micro hybrid vehicle + */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EngOnReqTiOut; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Timeout */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_EngOnReqTrans = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is requested to be started for an AT vehicle */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_EngOnReqTransPre; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Pre signal */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqCEC; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request from CEC */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqChas; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request Chassis */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqDep; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request from OBD */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqDrLeave; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request driver leave */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqDriver; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request Driver */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqEm; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request Energy Management */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqEngClnt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine run request due to low engine coolant temperature */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqFCAdapt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request FC Adapt */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqIceStall; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: ICE stall run request */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqIsg; /* Description: Engine running request ISG */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqIsgStop = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request to avoid loss of drive during abort of ISG-stop */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqMaxTime; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: EngRunReq for Max shut off time for engine. */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqPcr; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine Run Request from Pcr */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqPsm; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine Run Request from Psm */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqRemote; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request Remote Start */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqStabCtrl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request stability control */ +CVC_DISP Bool xVcVmcPmm_B_EngRunReqTotPre; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: EngRunReqTotPre */ +CVC_DISP Bool xVcVmcPmm_B_EngRunning; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is running */ +CVC_DISP Bool xVcVmcPmm_B_EngRunningRpm; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is started by rpm */ +CVC_DISP Bool xVcVmcPmm_B_EngRunningRpmDly; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is started by rpm (including time delay) */ +CVC_DISP Bool xVcVmcPmm_B_EngStart; /* Description: engine start request, with start allowed */ +CVC_DISP Bool xVcVmcPmm_B_EngStop; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is requested to stop */ +CVC_DISP Bool xVcVmcPmm_B_EngStopFast; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine must be stopped, either stall, key off or monitoring function */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_EngStopReqAT; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is requested to stop */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_DISP Bool xVcVmcPmm_B_EngStopped; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine is stopped */ +CVC_DISP Bool xVcVmcPmm_B_EngmtModFast; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Fast engagement mode */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EpbActive; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Parking brake active */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool xVcVmcPmm_B_EradAllow; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Erad path is available */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool xVcVmcPmm_B_EradEngageReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Erad engage request */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool xVcVmcPmm_B_EradSpdCtrl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Erad speed control request */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EvenGearShiftAct; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: A gear shift is currently active on the electric motor shaft */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_FCAdaptAct; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Fuel cut adapt active */ +CVC_DISP Bool xVcVmcPmm_B_FanAfterrun; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Fan afterrun is active for eng on req */ +CVC_DISP Bool xVcVmcPmm_B_FastEngmtIsgStrt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Fast engagement mode during ISG-starts in Drive */ +CVC_DISP Bool xVcVmcPmm_B_FastEngmtPwrDemand; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engagment mode request based on power demands */ +CVC_DISP Bool xVcVmcPmm_B_FastEngmtTrqDemand; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engagment mode request based on torque demands */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_DISP Bool xVcVmcPmm_B_FastStart; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Fast start mode request ISG start */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ +CVC_DISP Bool xVcVmcPmm_B_ForcedStallStart; /* Description: Forced start for stall */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_GarageShiftEfadPahDiOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The torque condition when perfoming a garage shift is okay (there should be no torqu + e acting on the electric motor before engaging drive/reverse) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_GearLvrNotDRDetn; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The gear lever is not in drive or reverse */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_GradOutOfLim; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Out of limits to allow stop start */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_HGSpdOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Speed Ok to calculate stop inhibit */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_DISP Bool xVcVmcPmm_B_HeatUpEOP; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Heat of of EOP in progress */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ +CVC_DISP Bool xVcVmcPmm_B_IceStartRun; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: ICE status is starting or running */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgActrTqRampDwn; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: There is no torque acting on the actuator */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgChrgReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to use the electic motor for charging of the HV-battery */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgChrgReqBrk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to reconfig to ISG-mode for HV battery charging (when braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgChrgReqDrv; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to reconfig to ISG-mode for HV battery charging (when the gear lever is plac + ed in drive) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgEnable; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Isg is enabled */ +#endif + +/* SVmcPmm__HE784__lOperator19_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to reconfig to ISG-mode for the electric motor */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStandStillBrkTqOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The brake torque request is high enough for an ISG-reconfig request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStandStillBslTqOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: VcVmcBsl torque request is low enough for an ISG request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStandStillVehSpdOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The vehicle speed is low enough for an ISG-reconfig request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_IsgStopCoast = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Usg ISG-stop during coast */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopPostRunReqStandstill; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Trigger run req after ISG-stop to reduce propulsive torque delay */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopPwrDwn; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Usg ISG-stop during power down */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopRoadGradOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Road gradient is OK for ISG-stop in standstill D/R */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopRunReqCoast; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Eng run req during ISG-stop coast */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopRunReqStandstill; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Run request to reduce propulsion delay during ISG-stop in D/R */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopStandstill; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Use ISG-stop of ICE during standstill in D/R */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_IsgStopStandstillPre = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine stop using ISG request */ +CVC_DISP Bool xVcVmcPmm_B_IsgStrtAbort; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: ISG start abort */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtActrRdy; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: ISG start actuator is ready */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtAllwd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: An ISG start is allowed */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtBlk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Block further ISG start attempts */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable ISG-start in D if Efad is in ISG-path already */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDR; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: An ISG-start is requested while the gear lever is placed in either drive or reverse + */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDRAbort; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Abort ISG-start in D/R if driver releases brake pedal, allow for 12V-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDRBraking; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Enable ISG-start in D/R since driver is braking vehicle */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtLimLoosen; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Loosen the ISG start limits */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtLowAvailTrq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: There's not enough available torque to perform an ISG-start attempt */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtOk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: ISG start ok */ +#endif + +/* SVmcPmm__HE808__calOperator_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtPsbl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: An ISG start is possible */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtWhlTrqOK; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The requested wheel torque is low enough to request an ISG-start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_NonSysStrt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: A non-system initated start is requested */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_PTDisengagedAT; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: tbd */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool xVcVmcPmm_B_PwdPossible; /* Description: Powerdown is possible */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool xVcVmcPmm_B_PwdReset; /* Description: a powerdown is reset */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool xVcVmcPmm_B_PwdTrig; /* Description: a powerdown is triggerd */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_QfFault; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Qf flag is not valid */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_QfFaultLongAcc; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Qf flag is not valid for long acc signal */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_DISP Bool xVcVmcPmm_B_RunReqIceStall; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Ice stall run request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SRSeatBeltAT; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Seatbelt-DriverDoor logic inhibit SsActive */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_DISP Bool xVcVmcPmm_B_SafeISG; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Safe ISG start mode */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_DISP Bool xVcVmcPmm_B_SafeISGPrio; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Priotritzed safe ISG start mode */ +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SsActDriverLeaving; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Driver has left the car */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SsActSeatBeltAllow; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set SsActive = 1 based on DriverBuckle and GearLever */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SsActSeatBeltInhib; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Set SsActive = 0 based on DriverBuckle and GearLever */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_DISP Bool xVcVmcPmm_B_StallAbortNum; /* Description: Abort stall */ +CVC_DISP Bool xVcVmcPmm_B_StallIceStrt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Starting stall */ +CVC_DISP Bool xVcVmcPmm_B_StallIceStrtActrFinishd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Logic to detect that the ICE start was not successful after the start actuator is fi + nished */ +CVC_DISP Bool xVcVmcPmm_B_StallIceStrtEmi; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: ICE stall detected during an emission start */ +CVC_DISP Bool xVcVmcPmm_B_StallRcvAT; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall recovery AT transmissions */ +CVC_DISP Bool xVcVmcPmm_B_StallRcvAbortInSpd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: No stall recovery in speed */ +CVC_DISP Bool xVcVmcPmm_B_StallRcvCl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall recovery for a stop in neutral system */ +CVC_DISP Bool xVcVmcPmm_B_StallRcvClNtrl; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall recovery for a stop in neutral system */ +CVC_DISP Bool xVcVmcPmm_B_StallRcvMT; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall recovery MT */ +CVC_DISP Bool xVcVmcPmm_B_StallRecovery; /* Description: stall recovery */ +CVC_DISP Bool xVcVmcPmm_B_StallRunComInhbt; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stall detection is inhibited by ChangeOfMindInhibit */ +CVC_DISP Bool xVcVmcPmm_B_StallRunUnintd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Running stall detected, set Unintended EMS flag */ +CVC_DISP Bool xVcVmcPmm_B_StallRunning; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Running stall detected */ +CVC_DISP Bool xVcVmcPmm_B_StallStrtM; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Start motor stall, time out */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_StandStill; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Hillgradient calculation for stand still lower then cal value */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_DISP Bool xVcVmcPmm_B_StartAllowedPath; /* Description: Start Allowed */ +CVC_DISP Bool xVcVmcPmm_B_Started; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: engine running detected */ +CVC_DISP Bool xVcVmcPmm_B_StartedDly; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running detected (including time delay) */ +CVC_DISP Bool xVcVmcPmm_B_StopAllowedDep; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: A stop/start stop is allowed by dep */ +CVC_DISP Bool xVcVmcPmm_B_StopAllowedPath; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: An engine stop is allowed */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_StopInhibitDownHill; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stop Inhibit Down Hill */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_StopInhibitUpHill; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Stop inhibit uphill */ +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ +CVC_DISP Bool xVcVmcPmm_B_StrtAbrt; /* Description: Start abort */ +CVC_DISP Bool xVcVmcPmm_B_StrtAbrtPre; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Star abort for Stop in Gear vehicle */ +CVC_DISP Bool xVcVmcPmm_B_StrtActrsRdy = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: One or several start actuators are ready for another start attempt */ +CVC_DISP Bool xVcVmcPmm_B_StrtMdeAcc; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: StartMode on AccPedal detected */ +CVC_DISP Bool xVcVmcPmm_B_StrtMdeRunning; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Restart within drivecycle active */ +CVC_DISP Bool xVcVmcPmm_B_TmBlock; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: EMS being blocked */ +CVC_DISP Bool xVcVmcPmm_B_TmBlocked; /* Description: EMS is blocked from demanding a restart */ +CVC_DISP Bool xVcVmcPmm_B_TrailerPresent; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Trailer is present */ +CVC_DISP Bool xVcVmcPmm_B_TransBlock; /* Description: transmission is being blocked */ +CVC_DISP Bool xVcVmcPmm_B_TransBlocking; /* Description: Transmission is blocked */ +CVC_DISP Bool xVcVmcPmm_B_TransEngOnBlock; /* Description: Trans blocked */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE171__lOperator35_AUX +CVC_DISP Bool xVcVmcPmm_B_TrnC3OilPres = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: C3 oil pressure build up phase */ +#endif + +/* SVmcPmm__HE171__lOperator35_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Transmission engage request */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#ifdef SVmcPmm__HE477__lOperator18_AUX +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReqHybrid = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Transmission engage request (for hybrids) */ +#endif + +/* SVmcPmm__HE477__lOperator18_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReqIC; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The transmission is requested to be engaged */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReqPre; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Pre transmission engage request */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_TrnModOKIsgReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Transmission mode OK for the ISG-mode request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_VehSpdOKIsgBrk; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The vehicle speed is low enough for an ISG-reconfig request (when braking) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_VehSpdOKIsgDrv; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The vehicle speed is low enough for an ISG-reconfig request (when gear lever is plac + ed in drive) */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrt = 0; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Wait for the vehicle speed to increase to be able to requesting a clutch start */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtAccPedAct; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The acc pedal is high enough to wait for the vehicle speed to increase before reques + ting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtDly; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Time delay on EngRunReqTot when Waiting for a clutch start */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtLowVehSpd; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The vehicle speed is low enough to activate the Wait4CluStrt-logic */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtTiOut; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The maximum time allowed for waiting for a clutch start is exceeded */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtWhlAccHigh; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The vehicle acceleration is high enough to wait for the vehicle speed to increase be + fore requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtWhlTqLow; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The requested wheel torque is low enough to wait for the vehicle speed to increase b + efore requesting a clutch start */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool xVcVmcPmm_B_Wait4Eng2Stop; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The engine must stop completely before another engine start attempt is requested */ +CVC_DISP Bool xVcVmcPmm_B_Wait4EngStrtTiOut; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The maximum time allowed for waiting for the engine to stop before requesting a new + B_EngRunReqTot-request */ +CVC_DISP Bool yVcVmcPmm_B_12VStartEnable; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request for HMI message */ +CVC_DISP Bool yVcVmcPmm_B_AutoParkReq; /* Description: Autopark request from driver leave function + */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F1 */ +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool yVcVmcPmm_B_BlockPushStartHMI; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI to not show Press Start Button msg if powerdown on door open and belt of + f - do not hide Ignition On msg */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool yVcVmcPmm_B_ClutchStartReq; /* Description: Clutch ICE start request */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool yVcVmcPmm_B_CrShPathEnable; /* Description: enables the crankshaft path */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool yVcVmcPmm_B_EfadActReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The electric motor (EFAD) is requested to be activated */ +#endif + +/* SVmcPmm__HE1_VcVmcPmm_AUX */ +CVC_DISP Bool yVcVmcPmm_B_EfadPathEnable; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The EFAD path is open */ +CVC_DISP Bool yVcVmcPmm_B_EngOnReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine on request from CVC, 1 = Engine on 0 = Engine off */ +CVC_DISP Bool yVcVmcPmm_B_EngOnReqEng; /* Description: EngOnReqEng */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqBrake; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request used only for DRO purpose */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqClim; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request used only for DRO purpose */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqEmLv; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request used only for DRO purpose */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqEms; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request used only for DRO purpose */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqFanAfterrun; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request for HMI message */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqFuel; /* Description: Run request by fuel age */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqObd; /* Description: Run request by OBD */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqRc; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI that EngRunReq from PpmRc (Starter protection etc) is active */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqSapp; /* Description: EngRunReq from Parking Assistance, via VcVm + cPmm */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqTm; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request from Tm */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqTot; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: TBD */ +CVC_DISP Bool yVcVmcPmm_B_EngRunReqTrans; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine running request for HMI message */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool yVcVmcPmm_B_EradClutchReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request state of ERAD disconnect clutch */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool yVcVmcPmm_B_EradDrReq; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Erad Activavtion is requested by driver */ +#endif + +/* SVmcPmm__HE614__lOperator11_AUX */ +CVC_DISP Bool yVcVmcPmm_B_EradPathEnable; /* Description: enables the erad path */ +CVC_DISP Bool yVcVmcPmm_B_FCAdaptReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Engine request fuel adaption */ +CVC_DISP Bool yVcVmcPmm_B_FastIsgStopReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request for fast Efad reconfiguration for ISG stop */ +CVC_DISP Bool yVcVmcPmm_B_IceStall; /* Description: TBD */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +CVC_DISP Bool yVcVmcPmm_B_IsgActReq; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Isg is requested to be activated */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +CVC_DISP Bool yVcVmcPmm_B_IsgPathEnable; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: The ISG path is open */ +CVC_DISP Bool yVcVmcPmm_B_IsgStartReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Isg in torque control */ +CVC_DISP Bool yVcVmcPmm_B_IsgStrtPahReq; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Request to open the ISG path */ +CVC_DISP Bool yVcVmcPmm_B_PowerDownReq; /* Description: TBD */ +CVC_DISP Bool yVcVmcPmm_B_PwrUpIceStrtReq; /* Description: Ice start request at powerup */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_DISP Bool yVcVmcPmm_B_RunReqDriverHmi; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Driver run request to be used by HMI function */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_DISP Bool yVcVmcPmm_B_RunReqSystemHmi; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: System run request to be used by HMI function */ +#endif + +/* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActAbsHMI; /* Description: Stop/Start inhibition by ABS activation */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActAmbHMI; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI that Stop/Start is not active due to ambient temperature */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActDoorOpenHMI; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI that Stop/Start is not active due to opened driver door */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActDrMdHMI; /* Description: Stop/Start inhibition by DriveMode */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActHoodHMI; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI that Stop/Start is not active due to hood open */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActSeatBeltHMI; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI that Stop/Start is not active due to driver seat belt */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActTrailerHMI; /* + Unit: Deg + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Info to HMI that Stop/Start is not active due to trailer connected (including other + conditions) */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActive; /* Description: TBD */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsAltitudeFault; /* Description: Altitude / ambient pressure out of range + for stop/start */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsAmbFault; /* Description: Ambient temp out of range for stop/start */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preprocessor I + F */ +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsRcfAct; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Flag to indicate the reconfiguration has been activated (Stop/Start request inhibite + d). */ +#endif + +/* Vc_Pvc_Sw_B_StopStart */ +CVC_DISP Bool yVcVmcPmm_B_StallPwdReq; /* Description: Stall power down request */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_DISP Bool yVcVmcPmm_B_TransHeatReq; /* Description: Transmission heat request to TmStrt */ +#endif + +/* SVmcPmm__HE821__ransHeatReq_AUX */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool yVcVmcPmm_B_TrnEngageReqHev; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Transmission engage request in hybrid vehicles */ +#endif + +/* Vc_Pvc_Hw_B_AT */ +CVC_DISP Bool yVcVmcPmm_B_UnintdStall; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 + Description: Unintended stall flag */ +#include "CVC_DISP_END.h" + +/*------------------------------------------------------------------------------------------------*\ + PARAMETERIZED MACROS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION PROTOTYPES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INLINE FUNCTIONS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION DEFINITIONS +\*------------------------------------------------------------------------------------------------*/ + +/**************************************************************************************************\ + *** FUNCTION: + *** RESTART_VcVmcPmm + *** + *** DESCRIPTION: + *** Main restart function + *** + *** + *** PARAMETERS: + *** Type Name Description + *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + *** + *** RETURNS: + *** void + *** + *** SETTINGS: + *** +\**************************************************************************************************/ +#include "CVC_CODE_START.h" +void RESTART_VcVmcPmm(void) +{ + rVcVmcPmm_D_EngRunReqBrake = 0; + rVcVmcPmm_D_EngRunReqDrLeave = 0; + rVcVmcPmm_D_EngRunReqFCAdapt = 0; + rVcVmcPmm_D_TransModeReq = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + xVcVmcPmm_B_12VStrtReq = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + xVcVmcPmm_B_BrkHillGradStart = 0; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + xVcVmcPmm_B_DrLeavePowerDownReq = 0; + xVcVmcPmm_B_EngOnReqTrans = 0; + xVcVmcPmm_B_EngRunReqIsgStop = 0; + xVcVmcPmm_B_IsgStopCoast = 0; + xVcVmcPmm_B_IsgStopStandstillPre = 0; + xVcVmcPmm_B_StrtActrsRdy = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + xVcVmcPmm_B_TrnC3OilPres = 0; + xVcVmcPmm_B_TrnEngageReqHybrid = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + xVcVmcPmm_B_Wait4CluStrt = 0; +} +#include "CVC_CODE_END.h" + +/**************************************************************************************************\ + *** FUNCTION: + *** VcVmcPmm + *** + *** DESCRIPTION: + *** + *** + *** PARAMETERS: + *** Type Name Description + *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + *** + *** RETURNS: + *** void + *** + *** SETTINGS: + *** +\**************************************************************************************************/ +#include "CVC_CODE_START.h" +void VcVmcPmm(void) +{ + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | Width: 8 + */ + static Bool SVmcPmm__HE156_RSWE = 0; + static Bool SVmcPmm__HE157_RSWE = 0; + + if (VcVmcPmm__HEP7_1000_Hev_11 != 0) { + /* SFStaticLocalInit: Default storage class for static local variables with initvalue | Width: + 8 */ + static UInt8 CVmcPmm__HE1_D_IceStatus = 0; + + /* SFStaticLocalInit: Default storage class for static local variables with initvalue | Width: + N.A. */ + static struct tag_SIBFS_1131_IceStatus_VmcPmm__HE_tp SIBFS_1131_IceStatus_VmcPmm__HE = { + 0, /* CVmcPmm__HE2_Stopping: LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + 0, /* CVmcPmm__HE3_Stopped: LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + 0, /* CVmcPmm__HE4_Running: LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + 0 /* CVmcPmm__HE5_Starting: LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + }; /* Description: Structure containing bitfields for Stateflow chart */ + + /* SLLocal: Default storage class for local variables | Width: 32 */ + Float32 SVmcPmm__HE117_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + Float32 SVmcPmm__HE130_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE142_MinMax; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE142_Prod1; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE143_MinMax; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE143_Prod1; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE144_MinMax; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE144_Prod1; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE147_Switch; /* Unit: - */ + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE152_MinMax; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE18_Product4; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + Float32 SVmcPmm__HE228_Switch; + UInt32 SVmcPmm__HE265_Switch; + UInt32 SVmcPmm__HE266_Switch; + UInt32 SVmcPmm__HE267_Switch; + UInt32 SVmcPmm__HE269_Switch; + UInt32 SVmcPmm__HE270_Switch; + UInt32 SVmcPmm__HE271_Switch; + UInt32 SVmcPmm__HE272_Switch; + UInt32 SVmcPmm__HE273_Switch; + UInt32 SVmcPmm__HE274_Switch; + UInt32 SVmcPmm__HE275_Switch; + UInt32 SVmcPmm__HE276_Switch; + UInt32 SVmcPmm__HE277_Switch; + UInt32 SVmcPmm__HE278_Switch; + Float32 SVmcPmm__HE279_Switch; + UInt32 SVmcPmm__HE280_Switch; + UInt32 SVmcPmm__HE281_Switch; + UInt32 SVmcPmm__HE283_Switch; + UInt32 SVmcPmm__HE286_Switch; + UInt32 SVmcPmm__HE287_Switch; + UInt32 SVmcPmm__HE288_Switch; + UInt32 SVmcPmm__HE289_Switch; + UInt32 SVmcPmm__HE291_Switch; + UInt32 SVmcPmm__HE292_Switch; + UInt32 SVmcPmm__HE293_Switch; + UInt32 SVmcPmm__HE297_Switch; + UInt32 SVmcPmm__HE303_Switch; + UInt32 SVmcPmm__HE304_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE512_Switch_AUX + Float32 SVmcPmm__HE512_Switch; + #endif + + /* SVmcPmm__HE512_Switch_AUX */ + Float32 SVmcPmm__HE561_Switch; + Float32 SVmcPmm__HE571_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + Float32 SVmcPmm__HE821_Tq_TransHeatReq; + #endif + + /* SVmcPmm__HE821__ransHeatReq_AUX */ + Float32 SVmcPmm__HE848_Switch; + + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE111_Switch; + Bool SVmcPmm__HE112_Switch; + Bool SVmcPmm__HE113_Switch; + Bool SVmcPmm__HE114_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE125_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE127_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE128_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE129_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + Bool SVmcPmm__HE131_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE132_Switch; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + Bool SVmcPmm__HE170_LogicalOperator2; + Bool SVmcPmm__HE170_LogicalOperator6; + Bool SVmcPmm__HE170_LogicalOperator7; + Bool SVmcPmm__HE170__gicalOperator22; + Bool SVmcPmm__HE170__gicalOperator37; + Bool SVmcPmm__HE170__ionalOperator17; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171_LogicalOperator3; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator10; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator18; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE171__lOperator35_AUX + Bool SVmcPmm__HE171__gicalOperator35; + #endif + + /* SVmcPmm__HE171__lOperator35_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator43; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator49; + #endif + + /* Vc_Pvc_Hw_B_AT */ + Bool SVmcPmm__HE172_LogOp1; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + Bool SVmcPmm__HE172_LogOp47; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + Bool SVmcPmm__HE172_LogOp48; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 1 */ + Bool SVmcPmm__HE172__ionalOperator20; + Bool SVmcPmm__HE172__tionalOperator1; + Bool SVmcPmm__HE205_LogicalOperator1; + Bool SVmcPmm__HE205_LogicalOperator4; + Bool SVmcPmm__HE205__gicalOperator12; + Bool SVmcPmm__HE205__tionalOperator1; + Bool SVmcPmm__HE206_LogicalOperator1; + Bool SVmcPmm__HE206__gicalOperator12; + Bool SVmcPmm__HE207_LogicalOperator1; + Bool SVmcPmm__HE207__gicalOperator12; + Bool SVmcPmm__HE208_LogicalOperator1; + Bool SVmcPmm__HE208__gicalOperator12; + Bool SVmcPmm__HE210_LogicalOperator1; + Bool SVmcPmm__HE210__gicalOperator12; + Bool SVmcPmm__HE216_LogicalOperator1; + Bool SVmcPmm__HE216__gicalOperator12; + Bool SVmcPmm__HE219_LogicalOperator1; + Bool SVmcPmm__HE219__gicalOperator12; + Bool SVmcPmm__HE223__ionalOperator11; + Bool SVmcPmm__HE223__ionalOperator18; + Bool SVmcPmm__HE223__tionalOperator1; + Bool SVmcPmm__HE226_LogicalOperator3; + Bool SVmcPmm__HE226_LogicalOperator6; + Bool SVmcPmm__HE227_switch; + Bool SVmcPmm__HE230_Logic1; + UInt8 SVmcPmm__HE236_Switch; + UInt8 SVmcPmm__HE237_Switch; + UInt8 SVmcPmm__HE239_Switch; + UInt8 SVmcPmm__HE242_Switch; + UInt8 SVmcPmm__HE250_Switch; + Bool SVmcPmm__HE252_Switch; + UInt8 SVmcPmm__HE253_Switch; + UInt8 SVmcPmm__HE254_Switch; + UInt8 SVmcPmm__HE255_Switch; + UInt8 SVmcPmm__HE256_Switch; + UInt8 SVmcPmm__HE257_Switch; + UInt8 SVmcPmm__HE258_Switch; + Bool SVmcPmm__HE261_Switch; + UInt8 SVmcPmm__HE262_Switch; + UInt8 SVmcPmm__HE268_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE26_LogicalOperator15; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE26_LogicalOperator23; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE27_LogicalOperator25; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE27___tionalOperator1; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + UInt8 SVmcPmm__HE284_Switch; + UInt8 SVmcPmm__HE285_Switch; + UInt8 SVmcPmm__HE290_Switch; + UInt8 SVmcPmm__HE295_Switch; + UInt8 SVmcPmm__HE296_Switch; + Bool SVmcPmm__HE298_Switch; + UInt8 SVmcPmm__HE299_Switch; + Bool SVmcPmm__HE300_Switch; + UInt8 SVmcPmm__HE301_Switch; + UInt8 SVmcPmm__HE307_Switch; + UInt8 SVmcPmm__HE308_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE32_Switch; + #endif + Bool SVmcPmm__HE334_Rel; + Bool SVmcPmm__HE334_Rel1; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE33_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE34_Switch; + #endif + Bool SVmcPmm__HE352_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE35_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE36_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE37_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE38_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE39_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE40_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE41_Switch; + #endif + Bool SVmcPmm__HE428_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE42_Switch; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE44_Switch; + #endif + Bool SVmcPmm__HE458_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE477_MinMax_AUX + UInt8 SVmcPmm__HE477_MinMax; + #endif + + /* SVmcPmm__HE477_MinMax_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 */ + #ifdef SVmcPmm__HE477__lOperator18_AUX + Bool SVmcPmm__HE482_Switch; + #endif + + /* SVmcPmm__HE477__lOperator18_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE484_Switch; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE486_Switch; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE512_Switch_AUX + Bool SVmcPmm__HE513_Logic1; + #endif + + /* SVmcPmm__HE512_Switch_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE523_Rel; + #endif + + /* Vc_Pvc_Hw_B_AT */ + Bool SVmcPmm__HE527_LogicalOperator; + Bool SVmcPmm__HE532_Switch; + Bool SVmcPmm__HE533_Switch; + Bool SVmcPmm__HE544_Switch; + Bool SVmcPmm__HE547_Switch; + Bool SVmcPmm__HE548_Switch; + Bool SVmcPmm__HE549_Switch; + Bool SVmcPmm__HE550_Switch; + Bool SVmcPmm__HE551_Switch; + Bool SVmcPmm__HE552_Switch; + Bool SVmcPmm__HE553_Switch; + Bool SVmcPmm__HE557_Switch; + Bool SVmcPmm__HE560_Switch; + Bool SVmcPmm__HE562_Switch; + Bool SVmcPmm__HE563_Switch; + Bool SVmcPmm__HE564_Switch; + Bool SVmcPmm__HE576_Switch; + Bool SVmcPmm__HE578_Switch; + Bool SVmcPmm__HE584__tionalOperator1; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE60_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE62_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE66_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE73_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE74_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + Bool SVmcPmm__HE827_Switch; + Bool SVmcPmm__HE829_Switch; + UInt8 SVmcPmm__HE843_Switch; + UInt8 SVmcPmm__HE845_Switch; + UInt8 SVmcPmm__HE846_Switch; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE90_Rel; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE90_Rel1; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE91_Rel; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE91_Rel1; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE92_Rel; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE92_Rel1; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE98_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* SLLocal: Default storage class for local variables | Width: 32 */ + UInt32 Aux_U32; + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | Width: + 32 */ + static Float32 SVmcPmm__HE153__HillGradAcc2deg = 0.F; /* + Unit: Deg + Description: Calculated slope */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 SVmcPmm__HE153__llGradAcc2deg_x[2] = + { + /* [0..1] */ 0.F, 0.F + /* 0.F, 0.F */ + }; /* different constrained ranges */ + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + static Float32 SVmcPmm__HE821___TransHeatReq_x[2] = + { + /* [0..1] */ 0.F, 0.F + /* 0.F, 0.F */ + }; /* different constrained ranges */ + #endif + + /* SVmcPmm__HE821__ransHeatReq_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | Width: + 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + static UInt8 SVmcPmm__HE138_p_BrVacuumVeh_x[2] = + { + /* [0..1] */ 0, 0 + /* 0., 0. */ + }; /* different scalings, different constrained ranges */ + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static UInt8 SVmcPmm__HE154___HillGradient_c[2] = + { + /* [0..1] */ 0, 0 + /* 0., 0. */ + }; /* different scalings, different constrained ranges */ + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static UInt8 SVmcPmm__HE154___HillGradient_r[2] = + { + /* [0..1] */ 0, 0 + /* 0., 0. */ + }; /* different scalings, different constrained ranges */ + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + static Bool SVmcPmm__HE159_LogOp3 = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ + #ifdef SVmcPmm__HE173_Merge_AUX + static UInt8 SVmcPmm__HE173_Merge = 0; + #endif + + /* SVmcPmm__HE173_Merge_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE173_Merge1_AUX + static Bool SVmcPmm__HE173_Merge1 = 0; + #endif + + /* SVmcPmm__HE173_Merge1_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ + #ifdef SVmcPmm__HE173_Merge1_AUX + static Bool SVmcPmm__HE173_Merge3 = 0; + #endif + + /* SVmcPmm__HE173_Merge1_AUX */ + static Bool SVmcPmm__HE222_Rescaler = 0; + static Bool SVmcPmm__HE30_Switch = 0; + static Bool SVmcPmm__HE389__gicalOperator52 = 0; + static UInt8 SVmcPmm__HE398_Switch = 0; + static Bool SVmcPmm__HE403__gicalOperator52 = 0; + static UInt8 SVmcPmm__HE416_Switch = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE477__lOperator18_AUX + static Bool SVmcPmm__HE477__gicalOperator18 = 0; + #endif + + /* SVmcPmm__HE477__lOperator18_AUX */ + static Bool SVmcPmm__HE489_Switch = 0; + static Bool SVmcPmm__HE6_Merge3 = 0; + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | Width: + 32 */ + static Float32 X_SVmcPmm__HE118_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE119_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE120_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE121_UnitDelay = 0.F; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + static Float32 X_SVmcPmm__HE133_UnitDelay = 1e+30F; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + static Float32 X_SVmcPmm__HE134_UnitDelay = 1e+30F; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + static Float32 X_SVmcPmm__HE137_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE141_Del = 0.F; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE141_Del1 = 0.F; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE142_Del1 = 0.F; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE143_Del1 = 0.F; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE144_Del1 = 0.F; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE149_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + static Float32 X_SVmcPmm__HE228_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE309_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE310_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE311_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE312_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE313_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE314_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE340_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE341_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE342_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE354_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE355_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE359_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE363_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE367_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE372_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE381_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE387_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE434_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE435_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE436_UnitDelay = 0.F; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE445_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE446_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE447_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE448_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE449_UnitDelay = 0.F; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + static Float32 X_SVmcPmm__HE455_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE456_Del = 0.F; + static Float32 X_SVmcPmm__HE456_Del1 = 0.F; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE45_UnitDelay = 1e+30F; + #endif + static Float32 X_SVmcPmm__HE461_UnitDelay = 0.F; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE46_UnitDelay = 0.F; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE47_UnitDelay = 0.F; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE48_UnitDelay = 0.F; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE49_UnitDelay = 0.F; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE507_UnitDelay = 0.F; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE508_UnitDelay = 0.F; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE509_UnitDelay = 0.F; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE510_UnitDelay = 1e+30F; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE511_UnitDelay = 1e+30F; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE512_Switch_AUX + static Float32 X_SVmcPmm__HE512_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE512_Switch_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE477_MinMax_AUX + static Float32 X_SVmcPmm__HE515_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE477_MinMax_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE477_MinMax_AUX + static Float32 X_SVmcPmm__HE516_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE477_MinMax_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE477_MinMax_AUX + static Float32 X_SVmcPmm__HE517_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE477_MinMax_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE523_UnitDelay = 0.F; + #endif + + /* Vc_Pvc_Hw_B_AT */ + static Float32 X_SVmcPmm__HE579_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE580_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE581_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE582_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE583_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE584_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE585_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE586_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE587_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE588_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE593_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE594_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE595_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE596_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE597_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE598_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE599_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE600_UnitDelay = 0.F; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE76_UnitDelay = 1e+30F; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE77_UnitDelay = 1e+30F; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE78_UnitDelay = 0.F; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + static Float32 X_SVmcPmm__HE819_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE821__ransHeatReq_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE96_UnitDelay = 0.F; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | Width: + 8 */ + static Bool X_SVmcPmm__HE110_UnitDelay1 = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + static Bool X_SVmcPmm__HE135_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ + #if VcVmcPmm__HEP7_1140_Brake_1 + static Bool X_SVmcPmm__HE136_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_1140_Brake_1 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Bool X_SVmcPmm__HE141_Del2 = 1; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Bool X_SVmcPmm__HE150_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Bool X_SVmcPmm__HE151_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + static UInt8 X_SVmcPmm__HE170_UnitDelay3 = 0; + static Bool X_SVmcPmm__HE172_UnitDelay1 = 0; + static UInt8 X_SVmcPmm__HE172_UnitDelay3 = 0; + static Bool X_SVmcPmm__HE172_UnitDelay8 = 0; + static Bool X_SVmcPmm__HE223_UnitDelay8 = 0; + static Bool X_SVmcPmm__HE230_Delay = 0; + static Bool X_SVmcPmm__HE231_Delay = 0; + static Bool X_SVmcPmm__HE232_Delay = 0; + static Bool X_SVmcPmm__HE233_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE334_UnitDelay = 0; + static Bool X_SVmcPmm__HE335_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE336_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE337_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE338_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE339_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE349_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE350_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE351_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE356_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE360_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE364_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE369_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE378_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE384_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE3_UnitDelay10 = 0; + static UInt8 X_SVmcPmm__HE3_UnitDelay2 = 0; + static Bool X_SVmcPmm__HE432_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE433_UnitDelay1 = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE437_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE438_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE439_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE442_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE443_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF2 */ + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE444_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 */ + static Bool X_SVmcPmm__HE452_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE454_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE456_Del2 = 1; + static Bool X_SVmcPmm__HE457_Delay = 0; + static Bool X_SVmcPmm__HE460_UnitDelay1 = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE480_Delay = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE502_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE503_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE504_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE505_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE506_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Bool X_SVmcPmm__HE50_UnitDelay1 = 0; + #endif + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE512_Switch_AUX + static Bool X_SVmcPmm__HE513_Delay = 0; + #endif + + /* SVmcPmm__HE512_Switch_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE512_Switch_AUX + static Bool X_SVmcPmm__HE514_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE512_Switch_AUX */ + static Bool X_SVmcPmm__HE525_Delay = 0; + static Bool X_SVmcPmm__HE526_Delay = 0; + static Bool X_SVmcPmm__HE527_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE528_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE529_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE530_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE589_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE590_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE591_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE592_UnitDelay1 = 0; + static UInt8 X_SVmcPmm__HE6_UnitDelay = 0; + static UInt8 X_SVmcPmm__HE6_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay10 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay11 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay12 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay13 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay14 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay15 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay2 = 0; + static UInt8 X_SVmcPmm__HE6_UnitDelay3 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay4 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay5 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay6 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay7 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay8 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay9 = 0; + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + static Bool X_SVmcPmm__HE820_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE821__ransHeatReq_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE90_UnitDelay = 0; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE91_UnitDelay = 0; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE92_UnitDelay = 0; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE93_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE94_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Preproce + ssor IF */ + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE97_UnitDelay1 = 0; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay4/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay4/Switch1: Omitted comp + arison with constant. */ + if (X_SVmcPmm__HE6_UnitDelay14) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay4/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay4/UnitDelay */ + X_SVmcPmm__HE313_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay4/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay4/ + Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/ts8 */ + X_SVmcPmm__HE313_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE313_UnitDelay; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator7 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/RelationalOperat + or4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/RelationalOperat + or7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/RelationalOperat + or5 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/RelationalOperat + or6 */ + xVcVmcPmm_B_PTDisengagedAT = (sVcDtcAtr_D_TransMode == 4) || (sVcDtcAtr_D_TransMode == 5) || + ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) && cVcVmcPmm_B_PTDGearLevAT) || + ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && cVcVmcPmm_B_PTDGearLevAT); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch11/Switch: Omitted compariso + n with constant. */ + if (yVcDtcAtr_B_AT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch11/Switch */ + SVmcPmm__HE827_Switch = xVcVmcPmm_B_PTDisengagedAT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch11/Switch */ + SVmcPmm__HE827_Switch = yVcScIn_B_PowertrainDisengaged; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay3/Switch1: Omitted comp + arison with constant. */ + if (yVcVdm_B_AbsCtrlActv) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay3/UnitDelay */ + X_SVmcPmm__HE312_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay3/ + Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/ts7 */ + X_SVmcPmm__HE312_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE312_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay5/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay5/Switch1: Omitted comp + arison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator14 */ + if (sVcVdm_D_EngRunngReqByBrk == 1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay5/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay5/UnitDelay */ + X_SVmcPmm__HE314_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay5/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay5/ + Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/ts5 */ + X_SVmcPmm__HE314_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE314_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseStartAllowedPath) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE238_Switch; + Bool SVmcPmm__HE244_Switch; + Bool SVmcPmm__HE251_Switch; + Bool SVmcPmm__HE263_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch24/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch24/Switch: Omit + ted comparison with constant. */ + if (cVcVmcPmm_B_LosStrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch24/S + witch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator34 */ + SVmcPmm__HE251_Switch = !(yVcDsePcr_B_EngStartInhibtRq); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch24/S + witch */ + SVmcPmm__HE251_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch35/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch35/Switch: Omit + ted comparison with constant. */ + if (cVcVmcPmm_B_AbsStrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch35/S + witch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator31 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + OffDelay3/UnitDelay */ + SVmcPmm__HE263_Switch = X_SVmcPmm__HE312_UnitDelay > cVcVmcPmm_t_AbsStrt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch35/S + witch */ + SVmcPmm__HE263_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch12/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch12/Switch: Omit + ted comparison with constant. */ + if (cVcVmcPmm_B_BrkStrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch12/S + witch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator43 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + OffDelay5/UnitDelay */ + SVmcPmm__HE238_Switch = X_SVmcPmm__HE314_UnitDelay > cVcVmcPmm_t_BrkStrt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch12/S + witch */ + SVmcPmm__HE238_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch18/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch18/Switch: Omit + ted comparison with constant. */ + if (cVcVmcPmm_B_DepStrt) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE826_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch1/Switch: Omitted comp + arison with constant. */ + if (cVcVmcPmm_B_UseOldEngStrtAllwd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch1/Switch */ + SVmcPmm__HE826_Switch = yVcDepSs_B_StartAllowed; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch1/Switch */ + SVmcPmm__HE826_Switch = yVcDepSs_B_EngStartAllowed; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch31/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch31/Switch: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator17 */ + if ((Vc_Pvc_Hw_B_Isg_CN != 0) || (Vc_Pvc_Hw_B_Efad_CN != 0)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3 + 1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch18/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + LogicalOperator14 */ + SVmcPmm__HE244_Switch = yVcDepTre_B_ISGTqAllw || SVmcPmm__HE826_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3 + 1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch18/Switch */ + SVmcPmm__HE244_Switch = SVmcPmm__HE826_Switch; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch18/S + witch */ + SVmcPmm__HE244_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switc + h + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logica + lOperator13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logica + lOperator12 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay4/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay4/UnitDelay */ + xVcVmcPmm_B_StartAllowedPath = ((cVcVmcPmm_B_ATComStrt && yVcDtcAtr_B_AT && + (X_SVmcPmm__HE313_UnitDelay <= cVcVmcPmm_t_ATComStrt)) || yVcPpmPsm_B_ForcedStart || + yVcPpmPsm_B_DrReady || SVmcPmm__HE827_Switch || cVcVmcPmm_B_PTDStrt) && + SVmcPmm__HE251_Switch && SVmcPmm__HE263_Switch && SVmcPmm__HE238_Switch && + SVmcPmm__HE244_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switc + h */ + xVcVmcPmm_B_StartAllowedPath = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseDriver) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3/Switc + h */ + SVmcPmm__HE257_Switch = sVcDeDmm_D_EngRunReqDriver; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch3/Switc + h */ + SVmcPmm__HE257_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch1/Switch */ + if (Vc_Pvc_Hw_B_Isg_CN >= 1 /* 0.5 */) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch1/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalO + perator3 */ + SVmcPmm__HE111_Switch = X_SVmcPmm__HE3_UnitDelay2 <= cVcVmcPmm_D_StrtModLongIceStsDetn; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch1/Switch */ + SVmcPmm__HE111_Switch = yVcEc_B_StartMotor; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator2 */ + xVcVmcPmm_B_EngRunningRpm = sVcEc_n_Eng > cVcVmcPmm_n_EngRunning; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Switch1: Omitted comparison wi + th constant. */ + if (xVcVmcPmm_B_EngRunningRpm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDela + y4/ts5 */ + X_SVmcPmm__HE121_UnitDelay = X_SVmcPmm__HE121_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/Un + itDelay */ + X_SVmcPmm__HE121_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/RelationalOperator + 1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/UnitD + elay */ + xVcVmcPmm_B_EngRunningRpmDly = X_SVmcPmm__HE121_UnitDelay > cVcVmcPmm_t_Running; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator */ + xVcVmcPmm_B_Started = sVcEc_n_Eng > cVcVmcPmm_n_EngStarted; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Switch1: Omitted comparison wi + th constant. */ + if (xVcVmcPmm_B_Started) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDela + y1/ts1 */ + X_SVmcPmm__HE119_UnitDelay = X_SVmcPmm__HE119_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/Un + itDelay */ + X_SVmcPmm__HE119_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/RelationalOperator + 1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/UnitD + elay */ + xVcVmcPmm_B_StartedDly = X_SVmcPmm__HE119_UnitDelay > cVcVmcPmm_t_Started; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch4/Switch: Omitted comparis + on with constant. */ + if (SVmcPmm__HE111_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch4/Switch */ + SVmcPmm__HE114_Switch = xVcVmcPmm_B_EngRunningRpmDly; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch4/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalOperato + r */ + SVmcPmm__HE114_Switch = xVcVmcPmm_B_EngRunningRpmDly || xVcVmcPmm_B_StartedDly; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch2/Switch: Omitted comparis + on with constant. */ + if (cVcVmcPmm_B_UseIscActvnEMS) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch6/Switch: Omitted compa + rison with constant. */ + if (cVcVmcPmm_B_UseTqSPM) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch6/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitc + h2/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalOper + ator2 */ + SVmcPmm__HE112_Switch = !(yVcCmnSta_B_StaExeTx); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch6/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitc + h2/Switch */ + SVmcPmm__HE112_Switch = yVcEc_B_IscActvnEMS; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch2/Switch */ + SVmcPmm__HE112_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch: Omitted comparis + on with constant. */ + if (cVcVmcPmm_B_UseTqSPM) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch */ + rVcVmcPmm_rt_FCLvl = sVcInjFuCut_rt_Lvl; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch */ + rVcVmcPmm_rt_FCLvl = sVcEc_Ps_FCLvl; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOper + ator4 */ + xVcVmcPmm_B_EngRunning = SVmcPmm__HE114_Switch && SVmcPmm__HE112_Switch && (rVcVmcPmm_rt_FCLvl + <= cVcVmcPmm_rt_FCLvlRunning); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch7/Switch: Omitted comparis + on with constant. */ + if (cVcVmcPmm_B_EngStoppedUseHiRes) { + if (sVcEc_n_EngHiRes < sVcEc_n_Eng) { + /* # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitc + h7/Switch */ + SVmcPmm__HE117_Switch = sVcEc_n_EngHiRes; + } + else { + /* # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitc + h7/Switch */ + SVmcPmm__HE117_Switch = sVcEc_n_Eng; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch7/Switch */ + SVmcPmm__HE117_Switch = sVcEc_n_Eng; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Switch1: Omitted comparison wi + th constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOper + ator1 */ + if (SVmcPmm__HE117_Switch < cVcVmcPmm_n_EngStopped) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDela + y3/ts4 */ + X_SVmcPmm__HE120_UnitDelay = X_SVmcPmm__HE120_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/Un + itDelay */ + X_SVmcPmm__HE120_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/RelationalOperator + 1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/UnitD + elay */ + xVcVmcPmm_B_EngStopped = X_SVmcPmm__HE120_UnitDelay > cVcVmcPmm_t_MinStopTime; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/Switch1: Omitted comparison w + ith constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/EdgeDetectRise1/L + ogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/EdgeDetectRise1/L + ogicalOperator1 */ + if (yVcPpmRc_B_ChangeOfMindInhibit && (!(X_SVmcPmm__HE110_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/U + nitDelay */ + X_SVmcPmm__HE118_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/U + nitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDel + ay1/ts1 */ + X_SVmcPmm__HE118_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE118_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/EdgeDetectRise1/UnitDelay1 + */ + X_SVmcPmm__HE110_UnitDelay1 = yVcPpmRc_B_ChangeOfMindInhibit; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch3/Switch: Omitted comparis + on with constant. */ + if (cVcVmcPmm_B_UseComInhbtIceStatus) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch3/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp7 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OffDelay1/U + nitDelay */ + SVmcPmm__HE113_Switch = yVcEc_B_StartMotor || (((!(yVcPpmRc_B_ChangeOfMindInhibit)) || + (X_SVmcPmm__HE118_UnitDelay > cVcVmcPmm_t_ComInhbtIceStatus)) && + X_SVmcPmm__HE3_UnitDelay10); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch3/Switch */ + SVmcPmm__HE113_Switch = X_SVmcPmm__HE3_UnitDelay10; + } + /* Begin execution of chart VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceStatus + */ + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping) { + /* Begin execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceSta + tus.Stopping */ + + /* # combined # update(s) for inport VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/11 + 31_IceStatus.B_EngStopped */ + if (xVcVmcPmm_B_EngStopped) { + /* State transition from VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceSta + tus.Stopping to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceStatus.St + opped */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped = 1; + CVmcPmm__HE1_D_IceStatus = 0; + } + else { + /* # combined # update(s) for inport VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus + /1131_IceStatus.B_EngOnReq */ + if (SVmcPmm__HE113_Switch) { + /* State transition from VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_Ice + Status.Stopping to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceSta + tus.Starting */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 1; + CVmcPmm__HE1_D_IceStatus = 1; + } + } + /* End execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceStatu + s.Stopping */ + } + else { + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped) { + /* Begin execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_Ice + Status.Stopped */ + + /* # combined # update(s) for inport VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus + /1131_IceStatus.B_EngOnReq */ + if (SVmcPmm__HE113_Switch) { + /* State transition from VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_Ice + Status.Stopped to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceStat + us.Starting */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 1; + CVmcPmm__HE1_D_IceStatus = 1; + } + /* End execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceSt + atus.Stopped */ + } + else { + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE4_Running) { + /* Begin execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_ + IceStatus.Running */ + + /* # combined # update(s) for inport VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceSta + tus/1131_IceStatus.B_EngOnReq */ + if (!(SVmcPmm__HE113_Switch)) { + /* State transition from VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_ + IceStatus.Running to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_I + ceStatus.Stopping */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE4_Running = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 1; + CVmcPmm__HE1_D_IceStatus = 3; + } + /* End execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_Ic + eStatus.Running */ + } + else { + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting) { + /* Begin execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/11 + 31_IceStatus.Starting */ + + /* # combined # update(s) for inport VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_Ice + Status/1131_IceStatus.B_EngRunning */ + if (xVcVmcPmm_B_EngRunning) { + /* State transition from VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/11 + 31_IceStatus.Starting to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus + /1131_IceStatus.Running */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE4_Running = 1; + CVmcPmm__HE1_D_IceStatus = 2; + } + else { + /* # combined # update(s) for inport VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_ + IceStatus/1131_IceStatus.B_EngOnReq */ + if (!(SVmcPmm__HE113_Switch)) { + /* State transition from VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus + /1131_IceStatus.Starting to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_Ice + Status/1131_IceStatus.Stopping */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 1; + CVmcPmm__HE1_D_IceStatus = 3; + } + } + /* End execution of state VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131 + _IceStatus.Starting */ + } + else { + /* State transition to VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_Ic + eStatus.Stopped */ + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped = 1; + CVmcPmm__HE1_D_IceStatus = 0; + } + } + } + } + /* End execution of chart VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/1131_IceStatus + */ + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator42 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator11 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + xVcVmcPmm_B_IceStartRun = (CVmcPmm__HE1_D_IceStatus == 1) || (CVmcPmm__HE1_D_IceStatus == 2); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalSwit + ch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalSwitch17/Swi + tch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalS + witch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 1_Driver/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqDriver = SVmcPmm__HE257_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalS + witch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 1_Driver/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqDriver = SVmcPmm__HE257_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch16/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch16/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UsePsm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch16/Swit + ch */ + SVmcPmm__HE242_Switch = sVcPpmPsm_D_EngRunReqPsm; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch16/Swit + ch */ + SVmcPmm__HE242_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwitch1 + 7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwitch17/Switch + : Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 2_Psm/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqPsm = SVmcPmm__HE242_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 2_Psm/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqPsm = SVmcPmm__HE242_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch7/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseEm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch7/Switc + h */ + SVmcPmm__HE301_Switch = sVcVmcEm_D_EngRunReqEm; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch7/Switc + h */ + SVmcPmm__HE301_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitch17 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitch17/Switch: + Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitc + h17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 3_Em/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqEm = SVmcPmm__HE301_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitc + h17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 3_Em/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqEm = SVmcPmm__HE301_Switch == 2; + } + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimat + ion/ts4 */ + if (ts_VcVmcPmm__HEP7 > cVcVmcPmm_tc_BcmLongAccFilt) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts4 */ + SVmcPmm__HE144_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE144_MinMax = cVcVmcPmm_tc_BcmLongAccFilt; + } + if (1e-06F > SVmcPmm__HE144_MinMax) { + SVmcPmm__HE144_MinMax = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Prod1 + */ + if (SVmcPmm__HE144_MinMax != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts4 */ + SVmcPmm__HE144_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE144_MinMax; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts4 */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE144_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE144_Prod1 = 3.402823466e+38F; + } + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Sum2 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1 + _pole4/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pol + e4/Sum1 */ + rVcVmcPmm_a_BcmLongAccFilt = X_SVmcPmm__HE144_Del1 + ((sVcVdm_a_ALgt - + X_SVmcPmm__HE144_Del1) * SVmcPmm__HE144_Prod1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Del + 1 */ + X_SVmcPmm__HE144_Del1 = rVcVmcPmm_a_BcmLongAccFilt; + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Product4 */ + SVmcPmm__HE18_Product4 = sVcScIn_v_VehSpdLgt / 3.6F; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Logica + lSwitch/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/LogicalSwitch/ + Switch: Omitted comparison with constant. */ + if (X_SVmcPmm__HE141_Del2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Log + icalSwitch/Switch */ + rVcVmcPmm_a_VehAccFilt = 0.F; + } + else { + /* SLLocal: Default storage class for local variables | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_MinMax; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_MinMax1; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_Prod; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_Prod1; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_Sum; + #endif + + /* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Sum */ + SVmcPmm__HE141_Sum = SVmcPmm__HE18_Product4 - X_SVmcPmm__HE141_Del; + + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts2 */ + if (ts_VcVmcPmm__HEP7 > 1e-06F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_e + stimation/ts2 */ + SVmcPmm__HE141_MinMax1 = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE141_MinMax1 = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Pr + od */ + if (SVmcPmm__HE141_MinMax1 != 0.F) { + SVmcPmm__HE141_Prod = SVmcPmm__HE141_Sum / SVmcPmm__HE141_MinMax1; + } + else { + if (SVmcPmm__HE141_Sum < 0.F) { + SVmcPmm__HE141_Prod = -3.402823466e+38F; + } + else { + SVmcPmm__HE141_Prod = 3.402823466e+38F; + } + } + + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts2 */ + if (ts_VcVmcPmm__HEP7 > cVcVmcPmm_tc_VehAccFilt) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_e + stimation/ts2 */ + SVmcPmm__HE141_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE141_MinMax = cVcVmcPmm_tc_VehAccFilt; + } + if (1e-06F > SVmcPmm__HE141_MinMax) { + SVmcPmm__HE141_MinMax = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Pr + od1 */ + if (SVmcPmm__HE141_MinMax != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_e + stimation/ts2 */ + SVmcPmm__HE141_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE141_MinMax; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_e + stimation/ts2 */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE141_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE141_Prod1 = 3.402823466e+38F; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/Log + icalSwitch/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1 + _pole2/Sum2 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D + LPF1_pole2/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1 + _pole2/Sum1 */ + rVcVmcPmm_a_VehAccFilt = X_SVmcPmm__HE141_Del1 + ((SVmcPmm__HE141_Prod - + X_SVmcPmm__HE141_Del1) * SVmcPmm__HE141_Prod1); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/De + l */ + X_SVmcPmm__HE141_Del = SVmcPmm__HE18_Product4; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/De + l1 */ + X_SVmcPmm__HE141_Del1 = rVcVmcPmm_a_VehAccFilt; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/De + l2 */ + X_SVmcPmm__HE141_Del2 = 0; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/Swi + tch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/Switch: Omi + tted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Logi + calOperator1 */ + if (yVcScIn_B_VehSpdDirRvs && cVcVmcPmm_B_UseWhlSpdDirection) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/ + Switch + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/P + roduct1 */ + rVcVmcPmm_a_SignedHGVehFilt = -1.F * rVcVmcPmm_a_VehAccFilt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/ + Switch */ + rVcVmcPmm_a_SignedHGVehFilt = rVcVmcPmm_a_VehAccFilt; + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Sum6 */ + rVcVmcPmm_a_MergedAcc = rVcVmcPmm_a_BcmLongAccFilt - rVcVmcPmm_a_SignedHGVehFilt; + if (cVcVmcPmm_a_HillGradientMax < rVcVmcPmm_a_MergedAcc) { + SVmcPmm__HE152_MinMax = cVcVmcPmm_a_HillGradientMax; + } + else { + SVmcPmm__HE152_MinMax = rVcVmcPmm_a_MergedAcc; + } + if (SVmcPmm__HE152_MinMax > cVcVmcPmm_a_HillGradientMin) { + rVcVmcPmm_a_MergedAccSaturated = SVmcPmm__HE152_MinMax; + } + else { + rVcVmcPmm_a_MergedAccSaturated = cVcVmcPmm_a_HillGradientMin; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch5/Swi + tch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch5/Switch: Omi + tted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Logi + calOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/R + elationalOperator2 */ + if ((sVcVmm_D_CarModSts1 == 5) && cVcVmcPmm_B_UseDefHGDynoMd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch5/ + Switch */ + SVmcPmm__HE147_Switch = cVcVmcPmm_a_HillGradientFault; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch5/ + Switch */ + SVmcPmm__HE147_Switch = rVcVmcPmm_a_MergedAccSaturated; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOper + ator1 */ + xVcVmcPmm_B_StandStill = sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_StandStillLoLim; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/OnDelay/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/OnDelay/Switch1: Omitted c + omparison with constant. */ + if (xVcVmcPmm_B_StandStill) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/OnDelay/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/OnDel + ay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimatio + n/OnDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts1 */ + X_SVmcPmm__HE149_UnitDelay = X_SVmcPmm__HE149_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/OnDelay/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimatio + n/OnDelay/UnitDelay */ + X_SVmcPmm__HE149_UnitDelay = 0.F; + } + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradie + nt/tc_HillGradient_r */ + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_tc_HillGradient_r[0]), 6, sVcScIn_v_VehSpdLgt, + SVmcPmm__HE154___HillGradient_r); + + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimat + ion/ts3 */ + if (ts_VcVmcPmm__HEP7 > cVcVmcPmm_tc_BrkTrqFilt) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts3 */ + SVmcPmm__HE142_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE142_MinMax = cVcVmcPmm_tc_BrkTrqFilt; + } + if (1e-06F > SVmcPmm__HE142_MinMax) { + SVmcPmm__HE142_MinMax = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Prod1 + */ + if (SVmcPmm__HE142_MinMax != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts3 */ + SVmcPmm__HE142_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE142_MinMax; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts3 */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE142_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE142_Prod1 = 3.402823466e+38F; + } + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Sum2 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1 + _pole1/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pol + e1/Sum1 */ + rVcVmcPmm_Tq_BrkTrqFilt = X_SVmcPmm__HE142_Del1 + ((sVcDseWt_Tq_BrkFricTqAtWhl - + X_SVmcPmm__HE142_Del1) * SVmcPmm__HE142_Prod1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Del + 1 */ + X_SVmcPmm__HE142_Del1 = rVcVmcPmm_Tq_BrkTrqFilt; + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradie + nt/tc_HillGradient_c */ + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_tc_HillGradient_c[0]), 4, + rVcVmcPmm_Tq_BrkTrqFilt, SVmcPmm__HE154___HillGradient_c); + + /* Interpolation: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGrad + ient/tc_HillGradient */ + rVcVmcPmm_tc_HillGradient = Tab2DIntpI1T6((const Float32 *) + &(mVcVmcPmm_tc_HillGradient[0][0]), 4, &(SVmcPmm__HE154___HillGradient_r[0]), + &(SVmcPmm__HE154___HillGradient_c[0])); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/Swi + tch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/Switch: Omi + tted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/O + nDelay/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/O + nDelay/UnitDelay */ + if (X_SVmcPmm__HE149_UnitDelay > cVcVmcPmm_t_StandStill) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/ + Switch */ + rVcVmcPmm_tc_HillGadient = cVcVmcPmm_tc_StandStill; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/ + Switch */ + rVcVmcPmm_tc_HillGadient = rVcVmcPmm_tc_HillGradient; + } + + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimat + ion/ts7 */ + if (ts_VcVmcPmm__HEP7 > rVcVmcPmm_tc_HillGadient) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts7 */ + SVmcPmm__HE143_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE143_MinMax = rVcVmcPmm_tc_HillGadient; + } + if (1e-06F > SVmcPmm__HE143_MinMax) { + SVmcPmm__HE143_MinMax = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Prod1 + */ + if (SVmcPmm__HE143_MinMax != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts7 */ + SVmcPmm__HE143_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE143_MinMax; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_esti + mation/ts7 */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE143_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE143_Prod1 = 3.402823466e+38F; + } + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Sum2 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1 + _pole3/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pol + e3/Sum1 */ + rVcVmcPmm_a_MergedAccFilt = X_SVmcPmm__HE143_Del1 + ((SVmcPmm__HE147_Switch - + X_SVmcPmm__HE143_Del1) * SVmcPmm__HE143_Prod1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Del + 1 */ + X_SVmcPmm__HE143_Del1 = rVcVmcPmm_a_MergedAccFilt; + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc + 2deg/Z_HillGradAcc2deg_x */ + TabIdxS18T390((const Float32 *) &(tVcVmcPmm_Z_HillGradAcc2deg_x[0]), 5, + rVcVmcPmm_a_MergedAccFilt, SVmcPmm__HE153__llGradAcc2deg_x); + + /* Interpolation: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradA + cc2deg/Z_HillGradAcc2deg */ + SVmcPmm__HE153__HillGradAcc2deg = Tab1DIntpI1T54((const Float32 *) + &(tVcVmcPmm_Z_HillGradAcc2deg[0]), &(SVmcPmm__HE153__llGradAcc2deg_x[0])); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator6 + */ + xVcVmcPmm_B_QfFaultLongAcc = (sVcVdm_Qf_ALgtQf != cVcVmcPmm_D_QfEpbLongAccOK) && + (sVcVdm_Qf_ALgtQf != cVcVmcPmm_D_QfEpbLongAccInit); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Logi + calOperator3 */ + xVcVmcPmm_B_QfFault = xVcVmcPmm_B_QfFaultLongAcc || (!(yVcScIn_B_VehSpdLgtOk)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_F + F1/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/R + elationalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_F + F1/LogOp */ + xVcVmcPmm_B_StopInhibitUpHill = (SVmcPmm__HE153__HillGradAcc2deg >= + cVcVmcPmm_Z_SetLimUpHill) || ((SVmcPmm__HE153__HillGradAcc2deg > + cVcVmcPmm_Z_ResetLimUpHill) && X_SVmcPmm__HE150_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1/UnitDel + ay1 */ + X_SVmcPmm__HE150_UnitDelay1 = xVcVmcPmm_B_StopInhibitUpHill; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_F + F8/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/R + elationalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_F + F8/LogOp */ + xVcVmcPmm_B_StopInhibitDownHill = (SVmcPmm__HE153__HillGradAcc2deg <= + cVcVmcPmm_Z_SetLimDownHill) || ((SVmcPmm__HE153__HillGradAcc2deg < + cVcVmcPmm_Z_ResetLimDownHill) && X_SVmcPmm__HE151_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8/UnitDel + ay1 */ + X_SVmcPmm__HE151_UnitDelay1 = xVcVmcPmm_B_StopInhibitDownHill; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator2 + */ + xVcVmcPmm_B_GradOutOfLim = xVcVmcPmm_B_StopInhibitUpHill || + xVcVmcPmm_B_StopInhibitDownHill; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOper + ator5 */ + xVcVmcPmm_B_HGSpdOK = sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_SpeedLimitHG; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator5 + */ + xVcVmcPmm_B_BrkHGStart = xVcVmcPmm_B_GradOutOfLim && xVcVmcPmm_B_HGSpdOK; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/Swi + tch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/Switch: Omi + tted comparison with constant. */ + if (xVcVmcPmm_B_QfFault) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/ + Switch */ + xVcVmcPmm_B_BrkHillGradStart = cVcVmcPmm_B_BrkHillGradStart; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/ + Switch */ + xVcVmcPmm_B_BrkHillGradStart = xVcVmcPmm_B_BrkHGStart; + } + #endif + #if VcVmcPmm__HEP7_1140_Brake_1 + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch4/Switch: Omitted compariso + n with constant. */ + if (cVcVmcPmm_B_BrkEngRunReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch4/Switch */ + SVmcPmm__HE128_Switch = sVcVdm_D_EngRunngReqByBrk; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch4/Switch */ + SVmcPmm__HE128_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Switch: Omitted comparison w + ith constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogOp5 */ + if (!(yVcEc_B_BCMNodeAlive)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/ + UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalD + elay/ts */ + X_SVmcPmm__HE137_UnitDelay = X_SVmcPmm__HE137_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/ + UnitDelay */ + X_SVmcPmm__HE137_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch8/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogOp6 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SignalDelay/Uni + tDelay */ + if ((X_SVmcPmm__HE137_UnitDelay > cVcVmcPmm_t_BrkEngRunReqAlive) && + cVcVmcPmm_B_BrkEngRunReqAlive) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch8/Switch */ + SVmcPmm__HE132_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch8/Switch */ + SVmcPmm__HE132_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch6/Switch: Omitted compariso + n with constant. */ + if (cVcVmcPmm_B_BrkUseNegVacuum) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch6/Switch + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Product1 */ + SVmcPmm__HE130_Switch = -1.F * sVcVdm_p_PVac; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch6/Switch */ + SVmcPmm__HE130_Switch = sVcVdm_p_PVac; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator3 */ + xVcVmcPmm_B_BrkVacuumStart = SVmcPmm__HE130_Switch > cVcVmcPmm_p_BrVacuum; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch1/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogOp4 */ + if (xVcVmcPmm_B_BrkVacuumStart && cVcVmcPmm_B_BrkVacuum) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch1/Switch */ + SVmcPmm__HE125_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch1/Switch */ + SVmcPmm__HE125_Switch = 0; + } + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh + _x */ + TabIdxS18T6((const Float32 *) &(tVcVmcPmm_p_BrVacuumVeh_x[0]), 7, sVcScIn_v_VehSpdLgt, + SVmcPmm__HE138_p_BrVacuumVeh_x); + + /* Interpolation: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumV + eh */ + rVcVmcPmm_p_BrVacuumVeh = Tab1DIntpI1T6((const Float32 *) &(tVcVmcPmm_p_BrVacuumVeh[0]), + &(SVmcPmm__HE138_p_BrVacuumVeh_x[0])); + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator2 */ + xVcVmcPmm_B_BrkVacuumVeh = SVmcPmm__HE130_Switch > rVcVmcPmm_p_BrVacuumVeh; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch5/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogOp3 */ + if (xVcVmcPmm_B_BrkVacuumVeh && cVcVmcPmm_B_BrkVacuumVeh) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch5/Switch */ + SVmcPmm__HE129_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch5/Switch */ + SVmcPmm__HE129_Switch = 0; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax2 */ + if (SVmcPmm__HE125_Switch > SVmcPmm__HE129_Switch) { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq2/EncapsulatedS + ubsystem/Out */ + sVcVmcPmm_D_EngRunReqBrkVac = SVmcPmm__HE125_Switch; + } + else { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq2/EncapsulatedS + ubsystem/Out */ + sVcVmcPmm_D_EngRunReqBrkVac = SVmcPmm__HE129_Switch; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Switch1: Omitted comparison wi + th constant. */ + if (yVcVdm_B_AbsCtrlActv) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Un + itDelay */ + X_SVmcPmm__HE134_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/ts6 */ + X_SVmcPmm__HE134_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE134_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch3/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogOp1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/Relat + ionalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay3/UnitD + elay */ + if ((X_SVmcPmm__HE134_UnitDelay <= cVcVmcPmm_t_BrkAbs) && cVcVmcPmm_B_BrkAbs) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch3/Switch */ + SVmcPmm__HE127_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch3/Switch */ + SVmcPmm__HE127_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF1/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF1/UnitDela + y1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF1/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOpera + tor4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF1/LogOp */ + X_SVmcPmm__HE135_UnitDelay1 = (SVmcPmm__HE153__HillGradAcc2deg >= + cVcVmcPmm_Z_BrkHGSkipParkDownL) || ((SVmcPmm__HE153__HillGradAcc2deg > + cVcVmcPmm_Z_BrkHGSkipParkDownH) && X_SVmcPmm__HE135_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF2/UnitDela + y1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF2/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOpera + tor5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF2/LogOp */ + X_SVmcPmm__HE136_UnitDelay1 = (SVmcPmm__HE153__HillGradAcc2deg <= + cVcVmcPmm_Z_BrkHGSkipParkUpL) || ((SVmcPmm__HE153__HillGradAcc2deg < + cVcVmcPmm_Z_BrkHGSkipParkUpH) && X_SVmcPmm__HE136_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF2/UnitDela + y1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/SR_FF1/UnitDela + y1 */ + xVcVmcPmm_B_BrkHGSkipParkPre = yVcDtcAtr_B_AT && X_SVmcPmm__HE135_UnitDelay1 && + X_SVmcPmm__HE136_UnitDelay1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOpera + tor1 */ + xVcVmcPmm_B_BrkHGSkipPark = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && + xVcVmcPmm_B_BrkHGSkipParkPre && cVcVmcPmm_B_BrkHGSkipPark; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Switch1: Omitted comparison wi + th constant. */ + if (xVcVmcPmm_B_BrkHillGradStart) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Un + itDelay */ + X_SVmcPmm__HE133_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/ts1 */ + X_SVmcPmm__HE133_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE133_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch7/Switch: Omitted compariso + n with constant. */ + if (xVcVmcPmm_B_BrkHGSkipPark) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch7/Switch */ + SVmcPmm__HE131_Switch = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch7/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Re + lationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/OffDelay1/Un + itDelay */ + SVmcPmm__HE131_Switch = X_SVmcPmm__HE133_UnitDelay <= cVcVmcPmm_t_BrkHillGrad; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch2/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogOp2 */ + if (SVmcPmm__HE131_Switch && cVcVmcPmm_B_BrkHillGrad) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch2/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq1/EncapsulatedS + ubsystem/Out */ + sVcVmcPmm_D_EngRunReqHG = cVcVmcPmm_D_BrkHillVal; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalSwitch2/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq1/EncapsulatedS + ubsystem/Out */ + sVcVmcPmm_D_EngRunReqHG = 0; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1 */ + rVcVmcPmm_D_EngRunReqBrake = 0; + if (SVmcPmm__HE128_Switch > rVcVmcPmm_D_EngRunReqBrake) { + rVcVmcPmm_D_EngRunReqBrake = SVmcPmm__HE128_Switch; + } + if (SVmcPmm__HE132_Switch > rVcVmcPmm_D_EngRunReqBrake) { + rVcVmcPmm_D_EngRunReqBrake = SVmcPmm__HE132_Switch; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq2/EncapsulatedSubs + ystem/Out */ + if (sVcVmcPmm_D_EngRunReqBrkVac > rVcVmcPmm_D_EngRunReqBrake) { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq2/EncapsulatedS + ubsystem/Out */ + rVcVmcPmm_D_EngRunReqBrake = sVcVmcPmm_D_EngRunReqBrkVac; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1 */ + if (SVmcPmm__HE127_Switch > rVcVmcPmm_D_EngRunReqBrake) { + rVcVmcPmm_D_EngRunReqBrake = SVmcPmm__HE127_Switch; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq1/EncapsulatedSubs + ystem/Out */ + if (sVcVmcPmm_D_EngRunReqHG > rVcVmcPmm_D_EngRunReqBrake) { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_StopReq1/EncapsulatedS + ubsystem/Out */ + rVcVmcPmm_D_EngRunReqBrake = sVcVmcPmm_D_EngRunReqHG; + } + #endif + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch4/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseBrake) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch4/Switc + h */ + SVmcPmm__HE268_Switch = rVcVmcPmm_D_EngRunReqBrake; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch4/Switc + h */ + SVmcPmm__HE268_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1214_Brake/LogicalSwitc + h17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1214_Brake/LogicalSwitch17/Swit + ch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1214_Brake/LogicalSw + itch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 4_Brake/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqBrake = SVmcPmm__HE268_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1214_Brake/LogicalSw + itch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 4_Brake/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqBrake = SVmcPmm__HE268_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseSapp) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6/Switc + h */ + SVmcPmm__HE290_Switch = sVcAsy_D_EngRunngReqByParkAssi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6/Switc + h */ + SVmcPmm__HE290_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1215_Sapp/LogicalSwitch + 17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1215_Sapp/LogicalSwitch17/Switc + h: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1215_Sapp/LogicalSwi + tch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 5_Sapp/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out26/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqSapp = SVmcPmm__HE290_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1215_Sapp/LogicalSwi + tch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 5_Sapp/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out26/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqSapp = SVmcPmm__HE290_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch8/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseTrans) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch8/Switc + h */ + SVmcPmm__HE307_Switch = sVcDseGb_D_TrsmEngRunReq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch8/Switc + h */ + SVmcPmm__HE307_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSwitc + h17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSwitch17/Swit + ch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_T + rans/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_T + rans/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSw + itch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 6_Trans/RelationalOperator11 */ + SVmcPmm__HE352_Switch = SVmcPmm__HE307_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSw + itch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 6_Trans/RelationalOperator12 */ + SVmcPmm__HE352_Switch = SVmcPmm__HE307_Switch == 2; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/Relation + alOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE205__tionalOperator1 = CVmcPmm__HE1_D_IceStatus == 0; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOper + ator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/EdgeDetectRise2/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/EdgeDetectRise2/LogicalOperator1 */ + SVmcPmm__HE205_LogicalOperator1 = SVmcPmm__HE352_Switch && (!(X_SVmcPmm__HE350_UnitDelay1)) && + SVmcPmm__HE205__tionalOperator1 && cVcVmcPmm_B_GlitchEngOnTrans; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/EdgeDete + ctRise2/UnitDelay1 */ + X_SVmcPmm__HE350_UnitDelay1 = SVmcPmm__HE352_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1/Sw + itch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1/Switch1: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/EdgeDetectRise1/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/EdgeDetectRise1/LogicalOperator1 */ + if (SVmcPmm__HE205_LogicalOperator1 && (!(X_SVmcPmm__HE349_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1 + /Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 6_Trans/OffDelay1/UnitDelay */ + X_SVmcPmm__HE354_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1 + /Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans + /OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 6_Trans/OffDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/1216_Trans/ts1 */ + X_SVmcPmm__HE354_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE354_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/EdgeDete + ctRise1/UnitDelay1 */ + X_SVmcPmm__HE349_UnitDelay1 = SVmcPmm__HE205_LogicalOperator1; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay + 1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_T + rans/OffDelay1/UnitDelay */ + xVcVmcPmm_B_TransEngOnBlock = X_SVmcPmm__HE354_UnitDelay <= cVcVmcPmm_t_GlitchEngOnTrans; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOper + ator4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_T + rans/RelationalOperator2 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE205_LogicalOperator4 = SVmcPmm__HE205__tionalOperator1 || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOper + ator12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_T + rans/RelationalOperator14 */ + SVmcPmm__HE205__gicalOperator12 = SVmcPmm__HE205_LogicalOperator4 && (SVmcPmm__HE307_Switch == + 0) && cVcVmcPmm_B_MinStopTrans; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2/Sw + itch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2/Switch1: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/EdgeDetectRise3/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/EdgeDetectRise3/LogicalOperator1 */ + if (SVmcPmm__HE205__gicalOperator12 && (!(X_SVmcPmm__HE351_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2 + /Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 6_Trans/OffDelay2/UnitDelay */ + X_SVmcPmm__HE355_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2 + /Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans + /OffDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 6_Trans/OffDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/1216_Trans/ts2 */ + X_SVmcPmm__HE355_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE355_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/EdgeDete + ctRise3/UnitDelay1 */ + X_SVmcPmm__HE351_UnitDelay1 = SVmcPmm__HE205__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay + 2/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_T + rans/OffDelay2/UnitDelay */ + xVcVmcPmm_B_TransBlocking = X_SVmcPmm__HE355_UnitDelay <= cVcVmcPmm_t_MinStopTrans; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOper + ator6 */ + xVcVmcPmm_B_TransBlock = SVmcPmm__HE205_LogicalOperator4 && xVcVmcPmm_B_TransBlocking; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSwitc + h24/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSwitch24/Swit + ch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Tran + s/LogicalOperator2 */ + if (xVcVmcPmm_B_TransEngOnBlock || xVcVmcPmm_B_TransBlock) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSw + itch24/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTrans = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalSw + itch24/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTrans = SVmcPmm__HE352_Switch; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperat + or1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_E + ms/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_E + ms/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE206_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch9/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseEMS) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch9/Switc + h */ + SVmcPmm__HE308_Switch = sVcEc_D_EngRunReqEMS; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch9/Switc + h */ + SVmcPmm__HE308_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperat + or12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_E + ms/RelationalOperator14 */ + SVmcPmm__HE206__gicalOperator12 = SVmcPmm__HE206_LogicalOperator1 && (SVmcPmm__HE308_Switch == + 0) && cVcVmcPmm_B_MinStopEMS; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/Swit + ch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/Switch1: Omi + tted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/ + EdgeDetectRise4/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/ + EdgeDetectRise4/LogicalOperator1 */ + if (SVmcPmm__HE206__gicalOperator12 && (!(X_SVmcPmm__HE356_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/S + witch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 7_Ems/OffDelay4/UnitDelay */ + X_SVmcPmm__HE359_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/S + witch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/O + ffDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 7_Ems/OffDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/1217_Ems/ts5 */ + X_SVmcPmm__HE359_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE359_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/EdgeDetect + Rise4/UnitDelay1 */ + X_SVmcPmm__HE356_UnitDelay1 = SVmcPmm__HE206__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/ + RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_E + ms/OffDelay4/UnitDelay */ + xVcVmcPmm_B_EMSBlocked = X_SVmcPmm__HE359_UnitDelay <= cVcVmcPmm_t_MinStopEMS; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperat + or6 */ + xVcVmcPmm_B_EMSBlock = SVmcPmm__HE206_LogicalOperator1 && xVcVmcPmm_B_EMSBlocked; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwitch2 + 5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwitch25/Switch + : Omitted comparison with constant. */ + if (xVcVmcPmm_B_EMSBlock) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwit + ch25/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3/Encapsulat + edSubsystem/Out */ + yVcVmcPmm_B_EngRunReqEms = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwit + ch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalSwitch17/Swi + tch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_E + ms/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 7_Ems/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 7_Ems/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalS + witch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217 + _Ems/LogicalSwitch25/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 1217_Ems/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqEms = SVmcPmm__HE308_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalS + witch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217 + _Ems/LogicalSwitch25/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 1217_Ems/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqEms = SVmcPmm__HE308_Switch == 2; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalOpera + tor1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_E + mLv/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_E + mLv/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE207_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch1/Switch: Omitted comparison + with constant. */ + if (yVcCem_B_StopStrtReq1WdReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch1/Switch */ + SVmcPmm__HE843_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch2/Switch: Omitted comparis + on with constant. */ + if (yVcCem_B_StrtInhbReq1WdReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch1/ + Switch */ + SVmcPmm__HE843_Switch = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch1/ + Switch */ + SVmcPmm__HE843_Switch = 0; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch3/Switch: Omitted comparison + with constant. */ + if (yVcCem_B_EngRunngReqByVehModMgrElectricalSystem) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch3/Switch */ + SVmcPmm__HE845_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch3/Switch */ + SVmcPmm__HE845_Switch = 0; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/MinMax */ + if (SVmcPmm__HE843_Switch > SVmcPmm__HE845_Switch) { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/y50/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_EngRunReqEmLv = SVmcPmm__HE843_Switch; + } + else { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/y50/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_EngRunReqEmLv = SVmcPmm__HE845_Switch; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch11/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseEmLv) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch11/Swit + ch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/y50/EncapsulatedSubsystem/Out */ + SVmcPmm__HE237_Switch = sVcVmcPmm_D_EngRunReqEmLv; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch11/Swit + ch */ + SVmcPmm__HE237_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalOpera + tor12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_E + mLv/RelationalOperator14 */ + SVmcPmm__HE207__gicalOperator12 = SVmcPmm__HE207_LogicalOperator1 && (SVmcPmm__HE237_Switch == + 0) && cVcVmcPmm_B_MinStopEmLv; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/Swi + tch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/Switch1: Om + itted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv + /EdgeDetectRise5/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv + /EdgeDetectRise5/LogicalOperator1 */ + if (SVmcPmm__HE207__gicalOperator12 && (!(X_SVmcPmm__HE360_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/ + Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 8_EmLv/OffDelay6/UnitDelay */ + X_SVmcPmm__HE363_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/ + Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/ + OffDelay6/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 8_EmLv/OffDelay6/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/1218_EmLv/ts7 */ + X_SVmcPmm__HE363_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE363_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/EdgeDetec + tRise5/UnitDelay1 */ + X_SVmcPmm__HE360_UnitDelay1 = SVmcPmm__HE207__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6 + /RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_E + mLv/OffDelay6/UnitDelay */ + xVcVmcPmm_B_EmLvBlocked = X_SVmcPmm__HE363_UnitDelay <= cVcVmcPmm_t_MinStopEmLv; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwitch + 26/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwitch26/Switc + h: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv + /LogicalOperator2 */ + if (SVmcPmm__HE207_LogicalOperator1 && xVcVmcPmm_B_EmLvBlocked) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwi + tch26/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4/Encapsulat + edSubsystem/Out */ + yVcVmcPmm_B_EngRunReqEmLv = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwi + tch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/LogicalSwitch17/Sw + itch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_E + mLv/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 8_EmLv/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 8_EmLv/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/Logical + Switch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218 + _EmLv/LogicalSwitch26/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 1218_EmLv/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqEmLv = SVmcPmm__HE237_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/Logical + Switch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218 + _EmLv/LogicalSwitch26/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 1218_EmLv/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqEmLv = SVmcPmm__HE237_Switch == 2; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalOpera + tor1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_C + lim/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_C + lim/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE208_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch4/Switch: Omitted comparison + with constant. */ + if (yVcCem_B_EngRunngReqByVehModMgrClimate) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch4/Switch */ + SVmcPmm__HE846_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch4/Switch */ + SVmcPmm__HE846_Switch = 0; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/MinMax1 */ + if (sVcCcm_D_EngRunngReqByClima > SVmcPmm__HE846_Switch) { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/y49/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_EngRunReqClim = sVcCcm_D_EngRunngReqByClima; + } + else { + /* # combined # VcVmcPmm/VcVmcPmm/1000_Hev/y49/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_EngRunReqClim = SVmcPmm__HE846_Switch; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch10/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseClim) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch10/Swit + ch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/y49/EncapsulatedSubsystem/Out */ + SVmcPmm__HE236_Switch = sVcVmcPmm_D_EngRunReqClim; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch10/Swit + ch */ + SVmcPmm__HE236_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalOpera + tor12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_C + lim/RelationalOperator14 */ + SVmcPmm__HE208__gicalOperator12 = SVmcPmm__HE208_LogicalOperator1 && (SVmcPmm__HE236_Switch == + 0) && cVcVmcPmm_B_MinStopClim; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/Swi + tch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/Switch1: Om + itted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim + /EdgeDetectRise6/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim + /EdgeDetectRise6/LogicalOperator1 */ + if (SVmcPmm__HE208__gicalOperator12 && (!(X_SVmcPmm__HE364_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/ + Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 9_Clim/OffDelay5/UnitDelay */ + X_SVmcPmm__HE367_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/ + Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/ + OffDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 9_Clim/OffDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/1219_Clim/ts6 */ + X_SVmcPmm__HE367_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE367_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/EdgeDetec + tRise6/UnitDelay1 */ + X_SVmcPmm__HE364_UnitDelay1 = SVmcPmm__HE208__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5 + /RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_C + lim/OffDelay5/UnitDelay */ + xVcVmcPmm_B_ClimBlocked = X_SVmcPmm__HE367_UnitDelay <= cVcVmcPmm_t_MinStopClim; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwitch + 27/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwitch27/Switc + h: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim + /LogicalOperator2 */ + if (SVmcPmm__HE208_LogicalOperator1 && xVcVmcPmm_B_ClimBlocked) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwi + tch27/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/Encapsulat + edSubsystem/Out */ + yVcVmcPmm_B_EngRunReqClim = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwi + tch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/LogicalSwitch17/Sw + itch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_C + lim/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 9_Clim/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 9_Clim/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/Logical + Switch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219 + _Clim/LogicalSwitch27/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 1219_Clim/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqClim = SVmcPmm__HE236_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/Logical + Switch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219 + _Clim/LogicalSwitch27/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 1219_Clim/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqClim = SVmcPmm__HE236_Switch == 2; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch13/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch13/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseLOS) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch13/Swit + ch */ + SVmcPmm__HE239_Switch = sVcDsePcr_D_EngRunRq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch13/Swit + ch */ + SVmcPmm__HE239_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwitch + 17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwitch17/Switc + h: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwi + tch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 10_LOS/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqPcr = SVmcPmm__HE239_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwi + tch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + 10_LOS/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqPcr = SVmcPmm__HE239_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch6/Switch: Omitted comparison + with constant. */ + if (cVcVmcPmm_B_EngineArchitecture) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch6/Switch */ + SVmcPmm__HE848_Switch = sVcEc_Te_EngClnt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch6/Switch */ + SVmcPmm__HE848_Switch = sVcEc_Te_EngCooltT; + } + if (Vc_Pvc_Hw_B_HVSystem_CN != 0) { + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/Enable: Enable + condition + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/Enable: Omitte + d comparison with constant. */ + if (cVcVmcPmm_B_DrLeaveEnable) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE157_LogOp3; + + if (!(SVmcPmm__HE157_RSWE)) { + /* initialization of subsystem: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/116 + 2_DriverLeaveVehicle */ + INIT_SVmcPmm____verLeaveVehicle(); + + /* set system state to 'enabled' */ + SVmcPmm__HE157_RSWE = 1; + } + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnD + elay/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay/Swi + tch1: Omitted comparison with constant. */ + if (yVcPpmPsm_B_DriveCycleActive) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + OnDelay/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLea + veVehicle/OnDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Dr + iverLeaveVehicle/OnDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/11 + 62_DriverLeaveVehicle/OnDelay/ts1 */ + X_SVmcPmm__HE163_UnitDelay = X_SVmcPmm__HE163_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + OnDelay/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Dr + iverLeaveVehicle/OnDelay/UnitDelay */ + X_SVmcPmm__HE163_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/Lo + gOp3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/RelationalOperator4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/OnDelay/RelationalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLe + aveVehicle/LogOp10 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/OnDelay/UnitDelay */ + SVmcPmm__HE157_LogOp3 = (!(yVcScDep_B_DrvrPrsnt)) && (X_SVmcPmm__HE163_UnitDelay > + cVcVmcPmm_t_DrLeaveDCADly) && (sVcScIn_v_VehSpdLgtMax < cVcVmcPmm_v_DrLeaveLim); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnD + elay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay1/Sw + itch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLe + aveVehicle/LogOp6 */ + if (SVmcPmm__HE157_LogOp3 && cVcVmcPmm_B_DrLeavePowerDown) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + OnDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLea + veVehicle/OnDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Dr + iverLeaveVehicle/OnDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/11 + 62_DriverLeaveVehicle/OnDelay1/ts1 */ + X_SVmcPmm__HE164_UnitDelay = X_SVmcPmm__HE164_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + OnDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Dr + iverLeaveVehicle/OnDelay1/UnitDelay */ + X_SVmcPmm__HE164_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle + /OnDelay1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/OnDelay1/UnitDelay */ + xVcVmcPmm_B_DrLeavePowerDownReq = X_SVmcPmm__HE164_UnitDelay > + cVcVmcPmm_t_DrLeavePwrDwnDly; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/Lo + gOp9 */ + xVcVmcPmm_B_DrLeaveKeepRun = SVmcPmm__HE157_LogOp3 && cVcVmcPmm_B_DrLeaveKeepRunReq; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/Log + icalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogicalSwit + ch3/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_DrLeaveKeepRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + LogicalSwitch3/Switch */ + rVcVmcPmm_D_EngRunReqDrLeave = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + LogicalSwitch3/Switch */ + rVcVmcPmm_D_EngRunReqDrLeave = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnD + elay2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay2/Sw + itch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLe + aveVehicle/LogOp1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (SVmcPmm__HE157_LogOp3 && (CVmcPmm__HE1_D_IceStatus != 2) && + yVcDseEm_B_EngRunReqSocMin) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + OnDelay2/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLea + veVehicle/OnDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Dr + iverLeaveVehicle/OnDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/11 + 62_DriverLeaveVehicle/OnDelay2/ts1 */ + X_SVmcPmm__HE165_UnitDelay = X_SVmcPmm__HE165_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/ + OnDelay2/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Dr + iverLeaveVehicle/OnDelay2/UnitDelay */ + X_SVmcPmm__HE165_UnitDelay = 0.F; + } + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay2/y/ + EncapsulatedSubsystem/Out + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/OnDelay2/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Drive + rLeaveVehicle/OnDelay2/UnitDelay */ + yVcVmcPmm_B_AutoParkReq = X_SVmcPmm__HE165_UnitDelay > cVcVmcPmm_t_DrLeaveAutoParkReq; + } + else { + /* set system state to 'disabled': VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/116 + 2_DriverLeaveVehicle */ + SVmcPmm__HE157_RSWE = 0; + } + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Enable: Enable con + dition + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Enable: Omitted co + mparison with constant. */ + if (cVcVmcPmm_B_FCAdaptEnable) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE156_LogicalOperator2; + Bool SVmcPmm__HE156_LogicalOperator3; + Bool SVmcPmm__HE156_LogicalOperator5; + Bool SVmcPmm__HE156__gicalOperator18; + + if (!(SVmcPmm__HE156_RSWE)) { + /* initialization of subsystem: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/116 + 1_FuelCutRequest */ + INIT_SVmcPmm_____FuelCutRequest(); + + /* set system state to 'enabled' */ + SVmcPmm__HE156_RSWE = 1; + } + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logica + lOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/LogicalOperator7 */ + SVmcPmm__HE156_LogicalOperator2 = (cVcVmcPmm_B_UseEmiGpfFC && + yVcEmiGpf_B_FuelCutReqHybrid) || yVcObdSch_B_FuelCutReq; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logica + lOperator18 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/LogicalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator20 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator17 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator15 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator21 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/LogicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator3 */ + SVmcPmm__HE156__gicalOperator18 = (!(SVmcPmm__HE156_LogicalOperator2)) || + (sVcDtcAtr_D_LockUp < cVcVmcPmm_D_FCAdaptLockUpRst) || (sVcDtcAtr_D_TrgGear < + cVcVmcPmm_D_FCAdaptGearRst) || (sVcEc_n_Eng < cVcVmcPmm_n_FCAdaptEngRst) || + (sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_FCAdaptVehRst) || (SVmcPmm__HE848_Switch < + cVcVmcPmm_Te_FCAdaptEngClntRst) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logica + lOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/LogicalOperator4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator18 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator16 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator14 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/RelationalOperator12 */ + SVmcPmm__HE156_LogicalOperator3 = SVmcPmm__HE156_LogicalOperator2 && (sVcDtcAtr_D_LockUp + >= cVcVmcPmm_D_FCAdaptLockUpSet) && (sVcDtcAtr_D_TrgGear >= + cVcVmcPmm_D_FCAdaptGearSet) && (sVcEc_n_Eng >= cVcVmcPmm_n_FCAdaptEngSet) && + (sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_FCAdaptVehSet) && (SVmcPmm__HE848_Switch >= + cVcVmcPmm_Te_FCAdaptEngClntSet) && (!(SVmcPmm__HE156__gicalOperator18)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF2 + /LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/SR_FF2/LogOp */ + SVmcPmm__HE159_LogOp3 = SVmcPmm__HE156_LogicalOperator3 || + ((!(SVmcPmm__HE156__gicalOperator18)) && X_SVmcPmm__HE159_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_ + FF2/UnitDelay1 */ + X_SVmcPmm__HE159_UnitDelay1 = SVmcPmm__HE159_LogOp3; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logica + lOperator5 */ + SVmcPmm__HE156_LogicalOperator5 = yVcDtcTc_B_FcReq || cVcVmcPmm_B_FCAdaptIdle; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SignalD + elay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SignalDelay1/Sw + itch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/LogicalOperator6 */ + if (!(SVmcPmm__HE156_LogicalOperator5)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Sign + alDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRe + quest/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_Fu + elCutRequest/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/11 + 61_FuelCutRequest/SignalDelay1/ts */ + X_SVmcPmm__HE161_UnitDelay = X_SVmcPmm__HE161_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Sign + alDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_Fu + elCutRequest/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE161_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF4 + /LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/SR_FF4/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/LogicalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutR + equest/SR_FF4/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelC + utRequest/SignalDelay1/UnitDelay */ + xVcVmcPmm_B_FCAdaptAct = (SVmcPmm__HE156_LogicalOperator3 && + SVmcPmm__HE156_LogicalOperator5) || ((X_SVmcPmm__HE161_UnitDelay <= + cVcVmcPmm_t_FCAdaptIdleDelayOff) && (!(SVmcPmm__HE156__gicalOperator18)) && + X_SVmcPmm__HE160_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_ + FF4/UnitDelay1 */ + X_SVmcPmm__HE160_UnitDelay1 = xVcVmcPmm_B_FCAdaptAct; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logical + Switch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/LogicalSwitch1/ + Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_FCAdaptAct) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logi + calSwitch1/Switch */ + rVcVmcPmm_D_EngRunReqFCAdapt = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Logi + calSwitch1/Switch */ + rVcVmcPmm_D_EngRunReqFCAdapt = 0; + } + } + else { + /* set system state to 'disabled': VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/116 + 1_FuelCutRequest */ + SVmcPmm__HE156_RSWE = 0; + } + } + else { + /* set system state to 'disabled': VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_F + uelCutRequest */ + SVmcPmm__HE156_RSWE = 0; + + /* set system state to 'disabled': VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_D + riverLeaveVehicle */ + SVmcPmm__HE157_RSWE = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch23/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch23/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseFCAdapt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch23/Swit + ch */ + SVmcPmm__HE250_Switch = rVcVmcPmm_D_EngRunReqFCAdapt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch23/Swit + ch */ + SVmcPmm__HE250_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/LogicalSwi + tch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/LogicalSwitch17/Sw + itch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/Logical + Switch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + A_FcAdapt/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqFCAdapt = SVmcPmm__HE250_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/Logical + Switch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + A_FcAdapt/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqFCAdapt = SVmcPmm__HE250_Switch == 2; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperato + r1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_T + m/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_T + m/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE210_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch26/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch26/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseTm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch26/Swit + ch */ + SVmcPmm__HE253_Switch = sVcTmStrt_D_EngRunReqTm; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch26/Swit + ch */ + SVmcPmm__HE253_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperato + r12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_T + m/RelationalOperator14 */ + SVmcPmm__HE210__gicalOperator12 = SVmcPmm__HE210_LogicalOperator1 && (SVmcPmm__HE253_Switch == + 0) && cVcVmcPmm_B_MinStopTm; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/Switc + h1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/Switch1: Omit + ted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/E + dgeDetectRise4/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/E + dgeDetectRise4/LogicalOperator1 */ + if (SVmcPmm__HE210__gicalOperator12 && (!(X_SVmcPmm__HE369_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/Sw + itch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + B_Tm/OffDelay4/UnitDelay */ + X_SVmcPmm__HE372_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/Sw + itch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/Of + fDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + B_Tm/OffDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121B_Tm/ts5 */ + X_SVmcPmm__HE372_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE372_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/EdgeDetectR + ise4/UnitDelay1 */ + X_SVmcPmm__HE369_UnitDelay1 = SVmcPmm__HE210__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/R + elationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_T + m/OffDelay4/UnitDelay */ + xVcVmcPmm_B_TmBlocked = X_SVmcPmm__HE372_UnitDelay <= cVcVmcPmm_t_MinStopTm; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperato + r6 */ + xVcVmcPmm_B_TmBlock = SVmcPmm__HE210_LogicalOperator1 && xVcVmcPmm_B_TmBlocked; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitch25 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitch25/Switch: + Omitted comparison with constant. */ + if (xVcVmcPmm_B_TmBlock) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitc + h25/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTm = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitc + h17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSwitch17/Swit + ch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_T + m/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + B_Tm/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + B_Tm/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSw + itch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B + _Tm/LogicalSwitch25/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121B_Tm/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10/Encaps + ulatedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTm = SVmcPmm__HE253_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalSw + itch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B + _Tm/LogicalSwitch25/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121B_Tm/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10/Encaps + ulatedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTm = SVmcPmm__HE253_Switch == 2; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch27/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch27/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseAgedFuel) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch27/Swit + ch */ + SVmcPmm__HE254_Switch = sVcFsdPc_D_EngRunReqFuel; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch27/Swit + ch */ + SVmcPmm__HE254_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121C_Fuel/LogicalSwitch + 17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121C_Fuel/LogicalSwitch17/Switc + h: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121C_Fuel/LogicalSwi + tch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + C_Fuel/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqFuel = SVmcPmm__HE254_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121C_Fuel/LogicalSwi + tch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + C_Fuel/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqFuel = SVmcPmm__HE254_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch28/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch28/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseIsg) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch28/Swit + ch */ + SVmcPmm__HE255_Switch = X_SVmcPmm__HE6_UnitDelay3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch28/Swit + ch */ + SVmcPmm__HE255_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwitch1 + 7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwitch17/Switch + : Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + D_ISG/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqIsg = SVmcPmm__HE255_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + D_ISG/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqIsg = SVmcPmm__HE255_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch29/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch29/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseRemoteStart) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch29/Swit + ch */ + SVmcPmm__HE256_Switch = sVcPpmPsm_D_EngRunReqRemote; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch29/Swit + ch */ + SVmcPmm__HE256_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalSwit + ch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalSwitch17/Swi + tch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalS + witch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + E_Remote/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqRemote = SVmcPmm__HE256_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalS + witch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + E_Remote/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqRemote = SVmcPmm__HE256_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch30/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch30/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseStabCtrl) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch30/Swit + ch */ + SVmcPmm__HE258_Switch = sVcVmcAwd_D_EngRunReqStabCtrl; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch30/Swit + ch */ + SVmcPmm__HE258_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/LogicalSw + itch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/LogicalSwitch17/S + witch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/Logica + lSwitch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + F_StabCtrl/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqStabCtrl = SVmcPmm__HE258_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/Logica + lSwitch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + F_StabCtrl/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqStabCtrl = SVmcPmm__HE258_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch54/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch54/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseDrLeave) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch54/Swit + ch */ + SVmcPmm__HE284_Switch = rVcVmcPmm_D_EngRunReqDrLeave; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch54/Swit + ch */ + SVmcPmm__HE284_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/LogicalSwi + tch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/LogicalSwitch17/Sw + itch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/Logical + Switch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + G_DrLeave/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqDrLeave = SVmcPmm__HE284_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/Logical + Switch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + G_DrLeave/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqDrLeave = SVmcPmm__HE284_Switch == 2; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalOp + erator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_C + hassis/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_C + hassis/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE216_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch: Omitted comparison + with constant. */ + if (yVcCem_B_EngRunngReqByVehModMgrChassie) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch */ + rVcVmcPmm_D_EngRunReqChas = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch */ + rVcVmcPmm_D_EngRunReqChas = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch55/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch55/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseChas) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch55/Swit + ch */ + SVmcPmm__HE285_Switch = rVcVmcPmm_D_EngRunReqChas; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch55/Swit + ch */ + SVmcPmm__HE285_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalOp + erator12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_C + hassis/RelationalOperator14 */ + SVmcPmm__HE216__gicalOperator12 = SVmcPmm__HE216_LogicalOperator1 && (SVmcPmm__HE285_Switch == + 0) && cVcVmcPmm_B_MinStopChas; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDelay5/ + Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDelay5/Switch1: + Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chas + sis/EdgeDetectRise6/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chas + sis/EdgeDetectRise6/LogicalOperator1 */ + if (SVmcPmm__HE216__gicalOperator12 && (!(X_SVmcPmm__HE378_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDela + y5/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + H_Chassis/OffDelay5/UnitDelay */ + X_SVmcPmm__HE381_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDela + y5/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chass + is/OffDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + H_Chassis/OffDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121H_Chassis/ts6 */ + X_SVmcPmm__HE381_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE381_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/EdgeDe + tectRise6/UnitDelay1 */ + X_SVmcPmm__HE378_UnitDelay1 = SVmcPmm__HE216__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDel + ay5/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_C + hassis/OffDelay5/UnitDelay */ + xVcVmcPmm_B_ChasBlocked = X_SVmcPmm__HE381_UnitDelay <= cVcVmcPmm_t_MinStopChas; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwi + tch27/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwitch27/Sw + itch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chas + sis/LogicalOperator2 */ + if (SVmcPmm__HE216_LogicalOperator1 && xVcVmcPmm_B_ChasBlocked) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/Logical + Switch27/Switch */ + xVcVmcPmm_B_EngRunReqChas = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/Logical + Switch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwitch17 + /Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_C + hassis/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + H_Chassis/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + H_Chassis/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/Logi + calSwitch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H + _Chassis/LogicalSwitch27/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121H_Chassis/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqChas = SVmcPmm__HE285_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/Logi + calSwitch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H + _Chassis/LogicalSwitch27/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121H_Chassis/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqChas = SVmcPmm__HE285_Switch == 2; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch64/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch64/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseObd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch64/Swit + ch */ + SVmcPmm__HE295_Switch = sVcObdSch_D_EngRunReqObd; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch64/Swit + ch */ + SVmcPmm__HE295_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121I_Obd/LogicalSwitch1 + 7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121I_Obd/LogicalSwitch17/Switch + : Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121I_Obd/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + I_Obd/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqObd = SVmcPmm__HE295_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121I_Obd/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + I_Obd/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqObd = SVmcPmm__HE295_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch68/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch68/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseDep) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch68/Swit + ch */ + SVmcPmm__HE299_Switch = sVcScIn_D_EngRunReqDepTrq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch68/Swit + ch */ + SVmcPmm__HE299_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwitch1 + 7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwitch17/Switch + : Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + J_Dep/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqDep = SVmcPmm__HE299_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwit + ch17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + J_Dep/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqDep = SVmcPmm__HE299_Switch == 2; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperat + or1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_C + EC/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_C + EC/RelationalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE219_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch65/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch65/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseCEC) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch65/Swit + ch */ + SVmcPmm__HE296_Switch = sVcCmnEngRunReqCEC_D_Req; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch65/Swit + ch */ + SVmcPmm__HE296_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperat + or12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_C + EC/RelationalOperator14 */ + SVmcPmm__HE219__gicalOperator12 = SVmcPmm__HE219_LogicalOperator1 && (SVmcPmm__HE296_Switch == + 0) && cVcVmcPmm_B_MinStopCEC; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/Swit + ch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/Switch1: Omi + tted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/ + EdgeDetectRise4/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/ + EdgeDetectRise4/LogicalOperator1 */ + if (SVmcPmm__HE219__gicalOperator12 && (!(X_SVmcPmm__HE384_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/S + witch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + K_CEC/OffDelay4/UnitDelay */ + X_SVmcPmm__HE387_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/S + witch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/O + ffDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + K_CEC/OffDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121K_CEC/ts5 */ + X_SVmcPmm__HE387_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE387_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/EdgeDetect + Rise4/UnitDelay1 */ + X_SVmcPmm__HE384_UnitDelay1 = SVmcPmm__HE219__gicalOperator12; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/ + RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_C + EC/OffDelay4/UnitDelay */ + xVcVmcPmm_B_CECBlocked = X_SVmcPmm__HE387_UnitDelay <= cVcVmcPmm_t_MinStopCEC; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperat + or6 */ + xVcVmcPmm_B_CECBlock = SVmcPmm__HE219_LogicalOperator1 && xVcVmcPmm_B_CECBlocked; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch2 + 5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch25/Switch + : Omitted comparison with constant. */ + if (xVcVmcPmm_B_CECBlock) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwit + ch25/Switch */ + xVcVmcPmm_B_EngRunReqCEC = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwit + ch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch17/Swi + tch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_C + EC/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + K_CEC/RelationalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + K_CEC/RelationalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalS + witch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K + _CEC/LogicalSwitch25/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121K_CEC/RelationalOperator11 */ + xVcVmcPmm_B_EngRunReqCEC = SVmcPmm__HE296_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalS + witch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K + _CEC/LogicalSwitch25/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121K_CEC/RelationalOperator12 */ + xVcVmcPmm_B_EngRunReqCEC = SVmcPmm__HE296_Switch == 2; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch34/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch34/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseRc) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch34/Swit + ch */ + SVmcPmm__HE262_Switch = sVcPpmRc_D_EngRunReqRc; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch34/Swit + ch */ + SVmcPmm__HE262_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121L_Rc/LogicalSwitch17 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121L_Rc/LogicalSwitch17/Switch: + Omitted comparison with constant. */ + if (xVcVmcPmm_B_IceStartRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121L_Rc/LogicalSwitc + h17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + L_Rc/RelationalOperator11 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out17/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqRc = SVmcPmm__HE262_Switch >= 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121L_Rc/LogicalSwitc + h17/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + L_Rc/RelationalOperator12 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out17/Encapsula + tedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqRc = SVmcPmm__HE262_Switch == 2; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch37/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch37/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRunHiRes) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 7/Switch */ + SVmcPmm__HE561_Switch = sVcEc_n_EngHiRes; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 7/Switch */ + SVmcPmm__HE561_Switch = sVcEc_n_Eng; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch38/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch38/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRunStartM) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 8/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp43 */ + SVmcPmm__HE562_Switch = !(yVcEc_B_StartMotor); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 8/Switch */ + SVmcPmm__HE562_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay1/Switch1: Omitte + d comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise3/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise3/LogicalOperator1 */ + if (yVcPpmRc_B_ChangeOfMindInhibit && (!(X_SVmcPmm__HE529_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay1/Swit + ch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay1/UnitDelay */ + X_SVmcPmm__HE579_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay1/Swit + ch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffD + elay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/OffDelay1/ts1 */ + X_SVmcPmm__HE579_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE579_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRis + e3/UnitDelay1 */ + X_SVmcPmm__HE529_UnitDelay1 = yVcPpmRc_B_ChangeOfMindInhibit; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch41/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch41/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRunComInhbt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 1/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp42 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay1/UnitDelay */ + xVcVmcPmm_B_StallRunComInhbt = (!(yVcPpmRc_B_ChangeOfMindInhibit)) || + (X_SVmcPmm__HE579_UnitDelay > cVcVmcPmm_t_StallRunComInhbt); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 1/Switch */ + xVcVmcPmm_B_StallRunComInhbt = 1; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator6 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE172_LogOp1 = (SVmcPmm__HE561_Switch < cVcVmcPmm_n_EngStalled) && + X_SVmcPmm__HE6_UnitDelay14 && (CVmcPmm__HE1_D_IceStatus == 2) && SVmcPmm__HE562_Switch && + xVcVmcPmm_B_StallRunComInhbt; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay/Switch1: Omitted + comparison with constant. */ + if (SVmcPmm__HE172_LogOp1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay/Switch + 1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts1 */ + X_SVmcPmm__HE582_UnitDelay = X_SVmcPmm__HE582_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay/Switch + 1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay/UnitDelay */ + X_SVmcPmm__HE582_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch14/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch14/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 4/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay/UnitDelay */ + xVcVmcPmm_B_StallRunning = X_SVmcPmm__HE582_UnitDelay > cVcVmcPmm_t_StallRun; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 4/Switch */ + xVcVmcPmm_B_StallRunning = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay1/Switch1: Omitted + comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op11 */ + if ((!(yVcPpmPsm_B_DrReady)) && yVcEc_B_StartMotor) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay1/Switc + h1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts2 */ + X_SVmcPmm__HE583_UnitDelay = X_SVmcPmm__HE583_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay1/Switc + h1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay1/UnitDelay */ + X_SVmcPmm__HE583_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_StallStartM) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + /Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay1/UnitDelay */ + xVcVmcPmm_B_StallStrtM = X_SVmcPmm__HE583_UnitDelay > cVcVmcPmm_t_StallStrtM; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + /Switch */ + xVcVmcPmm_B_StallStrtM = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay1/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay1/Switch: Omit + ted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op62 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator25 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator26 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op63 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((!(yVcPpmPsm_B_DrReady)) && (CVmcPmm__HE1_D_IceStatus == 1) && (X_SVmcPmm__HE6_UnitDelay1 + != 0)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay1/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay1/ts */ + X_SVmcPmm__HE594_UnitDelay = X_SVmcPmm__HE594_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay1/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE594_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch12/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch12/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallIceStrt) { + /* SLLocal: Default storage class for local variables | Width: 32 */ + Float32 SVmcPmm__HE570_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch45/Switch + : Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogicalOperator43 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator29 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator2 */ + if (cVcVmcPmm_B_Use7DCT && X_SVmcPmm__HE6_UnitDelay10 && ((sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch45/Switch */ + SVmcPmm__HE570_Switch = cVcVmcPmm_t_StallIceStrtIsgDrv; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch45/Switch */ + SVmcPmm__HE570_Switch = cVcVmcPmm_t_StallIceStrt; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 2/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay1/UnitDelay */ + xVcVmcPmm_B_StallIceStrt = X_SVmcPmm__HE594_UnitDelay > SVmcPmm__HE570_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 2/Switch */ + xVcVmcPmm_B_StallIceStrt = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp47 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator21 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op51 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE172_LogOp47 = (!(yVcPpmPsm_B_DrReady)) && (CVmcPmm__HE1_D_IceStatus == 1) && + (X_SVmcPmm__HE6_UnitDelay1 == 0); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay6/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay6/Switch: Omit + ted comparison with constant. */ + if (SVmcPmm__HE172_LogOp47) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay6/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay6/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay6/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay6/ts */ + X_SVmcPmm__HE599_UnitDelay = X_SVmcPmm__HE599_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay6/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay6/UnitDelay */ + X_SVmcPmm__HE599_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay4/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay4/Switch: Omit + ted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator32 */ + if (sVcEc_n_Eng < cVcVmcPmm_n_StallEmiMinEngSpd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay4/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay4/ts */ + X_SVmcPmm__HE597_UnitDelay = X_SVmcPmm__HE597_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay4/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay4/UnitDelay */ + X_SVmcPmm__HE597_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay5/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay5/Switch: Omit + ted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op67 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay4/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay4/UnitDelay */ + if (SVmcPmm__HE172_LogOp47 && (X_SVmcPmm__HE597_UnitDelay > cVcVmcPmm_t_StallEmiMinEngSpd) && + cVcVmcPmm_B_StallEmiExtraCond) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay5/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay5/ts */ + X_SVmcPmm__HE598_UnitDelay = X_SVmcPmm__HE598_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay5/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay5/UnitDelay */ + X_SVmcPmm__HE598_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch43/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch43/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallIceStrtEmi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 3/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp68 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay5/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay6/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay6/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay5/UnitDelay */ + xVcVmcPmm_B_StallIceStrtEmi = (X_SVmcPmm__HE599_UnitDelay > cVcVmcPmm_t_StallIceStrtEmi) || + (X_SVmcPmm__HE598_UnitDelay > cVcVmcPmm_t_StallIceStrtEmiExtra); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 3/Switch */ + xVcVmcPmm_B_StallIceStrtEmi = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp48 */ + SVmcPmm__HE172_LogOp48 = yVcEc_B_StartMotor || yVcDtcSt_B_StrtAct || yVcDtcSt_B_CluStrtAct; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch23/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch23/Switch: Omitted compariso + n with constant. */ + if (cVcVmcPmm_B_UseIceEnable) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch23/Switch */ + SVmcPmm__HE829_Switch = yVcPpmPsm_B_IceEnabled; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch23/Switch */ + SVmcPmm__HE829_Switch = yVcPpmPsm_B_DriveCycleActive; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF4/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF4/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF4/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetect/Logic1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator22 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op32 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetect/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF4/LogOp */ + X_SVmcPmm__HE592_UnitDelay1 = ((!(yVcPpmPsm_B_DrReady)) && (CVmcPmm__HE1_D_IceStatus == 1) && + ((!(SVmcPmm__HE172_LogOp48)) && X_SVmcPmm__HE525_Delay)) || (SVmcPmm__HE829_Switch && + (CVmcPmm__HE1_D_IceStatus != 2) && (CVmcPmm__HE1_D_IceStatus != 3) && + X_SVmcPmm__HE592_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetect/De + lay */ + X_SVmcPmm__HE525_Delay = SVmcPmm__HE172_LogOp48; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay7/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay7/Switch: Omit + ted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF4/UnitDelay1 */ + if (X_SVmcPmm__HE592_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay7/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay7/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay7/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay7/ts */ + X_SVmcPmm__HE600_UnitDelay = X_SVmcPmm__HE600_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay7/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay7/UnitDelay */ + X_SVmcPmm__HE600_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch48/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch48/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallIceStrtActrFinishd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 8/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay7/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay7/UnitDelay */ + xVcVmcPmm_B_StallIceStrtActrFinishd = X_SVmcPmm__HE600_UnitDelay > + cVcVmcPmm_t_StallIceStrtActrFinishd; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 8/Switch */ + xVcVmcPmm_B_StallIceStrtActrFinishd = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch21/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch21/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbortSoft) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 1/Switch */ + SVmcPmm__HE544_Switch = yVcPpmRc_B_StrtAbortSoft; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 1/Switch */ + SVmcPmm__HE544_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch11/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch11/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbortHard) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 1/Switch */ + SVmcPmm__HE533_Switch = yVcPpmRc_B_StrtAbortHard; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 1/Switch */ + SVmcPmm__HE533_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch39/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch39/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRcShutOff) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 9/Switch */ + SVmcPmm__HE563_Switch = yVcPpmRc_B_ShutOffReq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 9/Switch */ + SVmcPmm__HE563_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay2/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay2/Switch: Omit + ted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op54 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op58 */ + if ((!(X_SVmcPmm__HE6_UnitDelay10)) && X_SVmcPmm__HE6_UnitDelay6) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay2/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay2/ts */ + X_SVmcPmm__HE595_UnitDelay = X_SVmcPmm__HE595_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay2/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE595_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp39 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay2/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay2/UnitDelay */ + xVcVmcPmm_B_IsgStrtAbort = (X_SVmcPmm__HE595_UnitDelay > cVcVmcPmm_t_IsgStrtPahReqTiOut) || + yVcDtcSt_B_IsgStrtAbort; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch9/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch9/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbortIsg) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch9 + /Switch */ + SVmcPmm__HE578_Switch = xVcVmcPmm_B_IsgStrtAbort; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch9 + /Switch */ + SVmcPmm__HE578_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch36/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch36/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbortClu) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 6/Switch */ + SVmcPmm__HE560_Switch = yVcDtcSt_B_CluStrtAbort; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 6/Switch */ + SVmcPmm__HE560_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch27/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch27/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtCl) { + /* SLLocal: Default storage class for local variables | Width: 32 */ + Float32 SVmcPmm__HE572_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch47/Switch + : Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseClPedAdaptStrtAbrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch47/Switch */ + SVmcPmm__HE572_Switch = sVcDtcAtr_X_ClPedAdapt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch47/Switch */ + SVmcPmm__HE572_Switch = sVcScDep_X_ClutchPedalPos; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 7/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator10 */ + SVmcPmm__HE550_Switch = SVmcPmm__HE572_Switch < cVcVmcPmm_X_StrtAbrtCl; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 7/Switch */ + SVmcPmm__HE550_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch25/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch25/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtIce) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 5/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator12 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE548_Switch = CVmcPmm__HE1_D_IceStatus == 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 5/Switch */ + SVmcPmm__HE548_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch26/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch26/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtRpm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 6/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator9 */ + SVmcPmm__HE549_Switch = sVcEc_n_Eng < cVcVmcPmm_n_StrtAbrtRpm; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 6/Switch */ + SVmcPmm__HE549_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch24/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch24/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtStrtM) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 4/Switch */ + SVmcPmm__HE547_Switch = yVcEc_B_StartMotor; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 4/Switch */ + SVmcPmm__HE547_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch28/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch28/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtAcc) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 8/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator11 */ + SVmcPmm__HE551_Switch = sVcScIn_X_AccPedalPos < cVcVmcPmm_X_StrtAbrtAcc; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 8/Switch */ + SVmcPmm__HE551_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtDrReady) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + /Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp14 */ + SVmcPmm__HE564_Switch = !(yVcPpmPsm_B_DrReady); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + /Switch */ + SVmcPmm__HE564_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch29/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch29/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtNtrl) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE555_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch31/Switch + : Omitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrtNtrlValid) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch31/Switch */ + SVmcPmm__HE555_Switch = yVcScDep_B_NeutralMTValid; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch31/Switch */ + SVmcPmm__HE555_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp35 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp34 */ + SVmcPmm__HE552_Switch = (!(yVcScIn_B_NeutralMT)) && SVmcPmm__HE555_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 9/Switch */ + SVmcPmm__HE552_Switch = 1; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp26 */ + xVcVmcPmm_B_StrtAbrtPre = SVmcPmm__HE550_Switch && SVmcPmm__HE548_Switch && + SVmcPmm__HE549_Switch && SVmcPmm__HE547_Switch && SVmcPmm__HE551_Switch && + SVmcPmm__HE564_Switch && SVmcPmm__HE552_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay5/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay5/Switch1: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_StrtAbrtPre) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay5/Switc + h1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts7 */ + X_SVmcPmm__HE586_UnitDelay = X_SVmcPmm__HE586_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay5/Switc + h1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay5/UnitDelay */ + X_SVmcPmm__HE586_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch30/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch30/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StrtAbrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 0/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay5/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay5/UnitDelay */ + xVcVmcPmm_B_StrtAbrt = X_SVmcPmm__HE586_UnitDelay > cVcVmcPmm_t_StrtAbrt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 0/Switch */ + xVcVmcPmm_B_StrtAbrt = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch33/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch33/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_UseDesDrvDir) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 3/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator14 */ + SVmcPmm__HE557_Switch = sVcDtcAtr_v_VehDrDirectionRaw >= cVcVmcPmm_v_StallReset; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 3/Switch */ + SVmcPmm__HE557_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_StallRcvCrnk) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5 + /Switch */ + xVcVmcPmm_B_CrnkStallRecov = yVcPpmPsm_B_DrReady; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5 + /Switch */ + xVcVmcPmm_B_CrnkStallRecov = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch22/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch22/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRcvAT) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + Bool SVmcPmm__HE567_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch42/Switch + : Omitted comparison with constant. */ + if (cVcVmcPmm_B_Use7DCT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch42/Switch */ + SVmcPmm__HE567_Switch = X_SVmcPmm__HE6_UnitDelay2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch42/Switch */ + SVmcPmm__HE567_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 2/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp7 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp31 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp17 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator7 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp36 */ + xVcVmcPmm_B_StallRcvAT = (SVmcPmm__HE567_Switch && (sVcEc_n_Eng < cVcVmcPmm_n_StallRcv) && + (!(X_SVmcPmm__HE172_UnitDelay8)) && (SVmcPmm__HE827_Switch || (yVcScDep_B_AccFtOnPed && + cVcVmcPmm_B_StallRcvAccFtOnPed) || (yVcScIn_B_DrvrBrkgASILB && + cVcVmcPmm_B_StallRcvFootOnBrPed))) || xVcVmcPmm_B_CrnkStallRecov; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 2/Switch */ + xVcVmcPmm_B_StallRcvAT = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_StallRcvFrcd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8 + /Switch */ + xVcVmcPmm_B_ForcedStallStart = yVcPpmPsm_B_ForcedStart; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8 + /Switch */ + xVcVmcPmm_B_ForcedStallStart = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay2/Switch1: Omitted + comparison with constant. */ + if (yVcScIn_B_NeutralMT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay2/Switc + h1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts5 */ + X_SVmcPmm__HE584_UnitDelay = X_SVmcPmm__HE584_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay2/Switc + h1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay2/UnitDelay */ + X_SVmcPmm__HE584_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay2/Rela + tionalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + OnDelay2/UnitDelay */ + SVmcPmm__HE584__tionalOperator1 = X_SVmcPmm__HE584_UnitDelay > cVcVmcPmm_t_StallRcvNeutral; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOpe + rator1 */ + SVmcPmm__HE172__tionalOperator1 = sVcScIn_v_VehSpdLgt > cVcVmcPmm_v_StallRcvStart; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3/Switch: Om + itted comparison with constant. */ + if (SVmcPmm__HE172__tionalOperator1) { + /* SLLocal: Default storage class for local variables | Width: 32 */ + Float32 SVmcPmm__HE569_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch44/Switch + : Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseClPedAdaptStallRecovery) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch44/Switch */ + SVmcPmm__HE569_Switch = sVcDtcAtr_X_ClPedAdapt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch44/Switch */ + SVmcPmm__HE569_Switch = sVcScDep_X_ClutchPedalPos; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + /Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator15 */ + SVmcPmm__HE553_Switch = SVmcPmm__HE569_Switch > cVcVmcPmm_X_StallRcvClOnly; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + /Switch */ + SVmcPmm__HE553_Switch = yVcScDep_B_FootOnClutchPedalASILB; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay6/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay6/Switch1: Omitted + comparison with constant. */ + if (SVmcPmm__HE553_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay6/Switc + h1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay6/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay6/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts8 */ + X_SVmcPmm__HE587_UnitDelay = X_SVmcPmm__HE587_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay6/Switc + h1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay6/UnitDelay */ + X_SVmcPmm__HE587_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp5 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + OnDelay6/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + OnDelay6/UnitDelay */ + xVcVmcPmm_B_StallRcvCl = SVmcPmm__HE584__tionalOperator1 || (X_SVmcPmm__HE587_UnitDelay > + cVcVmcPmm_t_StallRcvClDelay); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch46/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch46/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_UseClPedAdaptStallRecovery) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 6/Switch */ + SVmcPmm__HE571_Switch = sVcDtcAtr_X_ClPedAdapt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 6/Switch */ + SVmcPmm__HE571_Switch = sVcScDep_X_ClutchPedalPos; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp29 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op30 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op53 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator18 */ + xVcVmcPmm_B_StallRcvClNtrl = (SVmcPmm__HE553_Switch && SVmcPmm__HE172__tionalOperator1) || + (((SVmcPmm__HE571_Switch > cVcVmcPmm_X_StallRcvClNtrl) || yVcScDep_B_FootOnClutchPedal) && + SVmcPmm__HE584__tionalOperator1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch7/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch7/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_StallRcvClOnly) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch7 + /Switch */ + SVmcPmm__HE576_Switch = xVcVmcPmm_B_StallRcvCl; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch7 + /Switch */ + SVmcPmm__HE576_Switch = xVcVmcPmm_B_StallRcvClNtrl; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp16 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op19 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op18 */ + xVcVmcPmm_B_StallRcvMT = xVcVmcPmm_B_CrnkStallRecov || xVcVmcPmm_B_ForcedStallStart || + ((!(X_SVmcPmm__HE172_UnitDelay1)) && SVmcPmm__HE576_Switch); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch18/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch18/Switch: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op38 */ + if (yVcFsdPc_B_RunDry && cVcVmcPmm_B_UseStallRcvBlock) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 8/Switch */ + xVcVmcPmm_B_StallRecovery = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch35/Switch + : Omitted comparison with constant. */ + if (yVcDtcAtr_B_AT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch35/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contro + l/LogicalSwitch18/Switch */ + xVcVmcPmm_B_StallRecovery = xVcVmcPmm_B_StallRcvAT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwit + ch35/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contro + l/LogicalSwitch18/Switch */ + xVcVmcPmm_B_StallRecovery = xVcVmcPmm_B_StallRcvMT; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF2/LogOp */ + X_SVmcPmm__HE590_UnitDelay1 = xVcVmcPmm_B_StallRunning || xVcVmcPmm_B_StallStrtM || + xVcVmcPmm_B_StallIceStrt || xVcVmcPmm_B_StallIceStrtEmi || + xVcVmcPmm_B_StallIceStrtActrFinishd || SVmcPmm__HE544_Switch || SVmcPmm__HE533_Switch || + SVmcPmm__HE563_Switch || SVmcPmm__HE578_Switch || SVmcPmm__HE560_Switch || + xVcVmcPmm_B_StrtAbrt || (SVmcPmm__HE829_Switch && ((!(SVmcPmm__HE557_Switch)) || + (!(xVcVmcPmm_B_StallRecovery))) && X_SVmcPmm__HE590_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRise1/ + LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise1/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF2/UnitDelay1 */ + SVmcPmm__HE527_LogicalOperator = X_SVmcPmm__HE590_UnitDelay1 && + (!(X_SVmcPmm__HE527_UnitDelay1)); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRis + e1/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF2/UnitDelay1 */ + X_SVmcPmm__HE527_UnitDelay1 = X_SVmcPmm__HE590_UnitDelay1; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay3/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay3/Switch: Omit + ted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator23 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay3/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay3/ts */ + X_SVmcPmm__HE596_UnitDelay = X_SVmcPmm__HE596_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay3/S + witch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE596_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF3/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF3/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay3/UnitDelay */ + xVcVmcPmm_B_EngRunReqIceStall = SVmcPmm__HE527_LogicalOperator || (SVmcPmm__HE829_Switch && + (X_SVmcPmm__HE596_UnitDelay <= cVcVmcPmm_t_EngRunStall) && X_SVmcPmm__HE591_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3/UnitDe + lay1 */ + X_SVmcPmm__HE591_UnitDelay1 = xVcVmcPmm_B_EngRunReqIceStall; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseIceStall) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Swit + ch */ + xVcVmcPmm_B_RunReqIceStall = xVcVmcPmm_B_EngRunReqIceStall; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Swit + ch */ + xVcVmcPmm_B_RunReqIceStall = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF1/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF1 + /UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF1/Lo + gOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF1/Lo + gOp */ + X_SVmcPmm__HE335_UnitDelay1 = (SVmcPmm__HE848_Switch < cVcVmcPmm_Te_EngClntEngRunReq) || + ((SVmcPmm__HE848_Switch <= cVcVmcPmm_Te_EngClntEngOffReq) && X_SVmcPmm__HE335_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseEngClntRunReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Swit + ch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_ + FF1/UnitDelay1 */ + xVcVmcPmm_B_EngRunReqEngClnt = X_SVmcPmm__HE335_UnitDelay1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Swit + ch */ + xVcVmcPmm_B_EngRunReqEngClnt = 0; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Rel */ + SVmcPmm__HE334_Rel = cVcVmcPmm_X_FanAfterrunLimHi <= sVcTmAf_Z_FanAfterrun; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Rel1 */ + SVmcPmm__HE334_Rel1 = sVcTmAf_Z_FanAfterrun <= cVcVmcPmm_X_FanAfterrunLimLo; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/LogicalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Log + icalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Log + icalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Log + icalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Log + icalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/Log + icalOperator4 */ + xVcVmcPmm_B_FanAfterrun = (SVmcPmm__HE334_Rel && (!(SVmcPmm__HE334_Rel1))) || + ((!(SVmcPmm__HE334_Rel)) && (!(SVmcPmm__HE334_Rel1)) && X_SVmcPmm__HE334_UnitDelay); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/UnitDelay */ + X_SVmcPmm__HE334_UnitDelay = xVcVmcPmm_B_FanAfterrun; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay/Switch: Omitted com + parison with constant. */ + if (xVcVmcPmm_B_FanAfterrun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDela + y/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sig + nalDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/SignalDelay/ts5 */ + X_SVmcPmm__HE340_UnitDelay = X_SVmcPmm__HE340_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sig + nalDelay/UnitDelay */ + X_SVmcPmm__HE340_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch21/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch21/Switch: Omitted + comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator9 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch20/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch20/Switch: Omit + ted comparison with constant. */ + if (cVcVmcPmm_B_UseFanAfterrun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch20/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logi + calSwitch21/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + SignalDelay/Rel + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7/Encapsu + latedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + SignalDelay/UnitDelay */ + yVcVmcPmm_B_EngRunReqFanAfterrun = X_SVmcPmm__HE340_UnitDelay > + cVcVmcPmm_t_FanAfterrunDelay; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch20/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logi + calSwitch21/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqFanAfterrun = 0; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch21/Swit + ch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7/Encapsulat + edSubsystem/Out */ + yVcVmcPmm_B_EngRunReqFanAfterrun = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator2 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE170_LogicalOperator2 = (CVmcPmm__HE1_D_IceStatus == 1) || (CVmcPmm__HE1_D_IceStatus + == 2); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay2/Switch1: Omitted comp + arison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetec + tRise1/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetec + tRise1/LogicalOperator1 */ + if (SVmcPmm__HE170_LogicalOperator2 && (!(X_SVmcPmm__HE233_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay2/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay2/UnitDelay */ + X_SVmcPmm__HE311_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay2/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay2/ + Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/ts3 */ + X_SVmcPmm__HE311_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE311_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetectRise1/Uni + tDelay1 */ + X_SVmcPmm__HE233_UnitDelay1 = SVmcPmm__HE170_LogicalOperator2; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseEngOnOff) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Swit + ch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay2/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay2/UnitDelay */ + xVcVmcPmm_B_EngOnOff = X_SVmcPmm__HE311_UnitDelay <= cVcVmcPmm_t_EngOnOff; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Swit + ch */ + xVcVmcPmm_B_EngOnOff = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/RelationalOperator3: Omitted co + mparison with constant. + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE170_LogicalOperator7 = (!(X_SVmcPmm__HE6_UnitDelay14)) && (CVmcPmm__HE1_D_IceStatus + == 0); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/Switch: Omit + ted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator9 */ + if (!(SVmcPmm__HE170_LogicalOperator7)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/S + witch */ + SVmcPmm__HE228_Switch = 0.F; + } + else { + /* SLLocal: Default storage class for local variables | Width: 32 */ + Float32 SVmcPmm__HE228_Switch1; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/S + witch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/Switch1: + Omitted comparison with constant. */ + if (SVmcPmm__HE170_LogicalOperator7) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnabl + e/Switch1 + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/ts2 */ + SVmcPmm__HE228_Switch1 = ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnabl + e/Switch1 */ + SVmcPmm__HE228_Switch1 = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/S + witch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterRes + etEnable/Sum */ + SVmcPmm__HE228_Switch = SVmcPmm__HE228_Switch1 + X_SVmcPmm__HE228_UnitDelay; + } + if (1e+30F < SVmcPmm__HE228_Switch) { + rVcVmcPmm_t_EngOff = 1e+30F; + } + else { + rVcVmcPmm_t_EngOff = SVmcPmm__HE228_Switch; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/ + UnitDelay */ + X_SVmcPmm__HE228_UnitDelay = rVcVmcPmm_t_EngOff; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseEngOffMaxTime) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switc + h + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Rel + ationalOperator5 */ + xVcVmcPmm_B_EngRunReqMaxTime = rVcVmcPmm_t_EngOff >= cVcVmcPmm_t_EngOffMax; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switc + h */ + xVcVmcPmm_B_EngRunReqMaxTime = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator4 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7/EncapsulatedS + ubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out17/Encapsulated + Subsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/Encapsulated + Subsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/Encapsulated + Subsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10/Encapsulated + Subsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/EncapsulatedS + ubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4/EncapsulatedS + ubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3/EncapsulatedS + ubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out26/Encapsulated + Subsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out */ + xVcVmcPmm_B_EngRunReqTotPre = xVcVmcPmm_B_EngRunReqDriver || xVcVmcPmm_B_EngRunReqPsm || + xVcVmcPmm_B_EngRunReqEm || yVcVmcPmm_B_EngRunReqBrake || yVcVmcPmm_B_EngRunReqSapp || + yVcVmcPmm_B_EngRunReqTrans || yVcVmcPmm_B_EngRunReqEms || yVcVmcPmm_B_EngRunReqEmLv || + yVcVmcPmm_B_EngRunReqClim || xVcVmcPmm_B_EngRunReqPcr || xVcVmcPmm_B_EngRunReqFCAdapt || + yVcVmcPmm_B_EngRunReqTm || yVcVmcPmm_B_EngRunReqFuel || xVcVmcPmm_B_EngRunReqIsg || + xVcVmcPmm_B_EngRunReqRemote || xVcVmcPmm_B_EngRunReqStabCtrl || xVcVmcPmm_B_EngRunReqDrLeave + || xVcVmcPmm_B_EngRunReqChas || yVcVmcPmm_B_EngRunReqObd || xVcVmcPmm_B_EngRunReqDep || + xVcVmcPmm_B_EngRunReqCEC || yVcVmcPmm_B_EngRunReqRc || xVcVmcPmm_B_RunReqIceStall || + xVcVmcPmm_B_EngRunReqEngClnt || yVcVmcPmm_B_EngRunReqFanAfterrun || xVcVmcPmm_B_EngOnOff || + xVcVmcPmm_B_EngRunReqMaxTime || X_SVmcPmm__HE6_UnitDelay12; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch67/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch67/Switch: Omitted + comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator19 */ + if (cVc_B_SeriesHev && (sVcDeDmm_D_DrvMode == 9)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch67/Swit + ch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out */ + SVmcPmm__HE298_Switch = yVcVmcPmm_B_EngRunReqBrake; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch67/Swit + ch */ + SVmcPmm__HE298_Switch = xVcVmcPmm_B_EngRunReqTotPre; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/BypassSwitch13/switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/BypassSwitch13/switch: Omitted + comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator16 */ + if (X_SVmcPmm__HE170_UnitDelay3 == 4) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/BypassSwitch13/switc + h + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logica + lOperator18 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Rel + ationalOperator13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Rel + ationalOperator18 */ + SVmcPmm__HE227_switch = (sVcEc_n_Eng > cVcVmcPmm_n_Wait4Eng2StopLimHighTest) && + (sVcEc_n_Eng < cVcVmcPmm_n_Wait4Eng2StopLimHigh); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/BypassSwitch13/switc + h + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Rel + ationalOperator8 */ + SVmcPmm__HE227_switch = sVcEc_n_Eng < cVcVmcPmm_n_Wait4Eng2StopLim; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator22 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE170__gicalOperator22 = SVmcPmm__HE298_Switch && SVmcPmm__HE227_switch && + (CVmcPmm__HE1_D_IceStatus == 3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Switch: Omitted co + mparison with constant. */ + if (SVmcPmm__HE170__gicalOperator22) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDela + y3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sig + nalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/SignalDelay3/ts */ + X_SVmcPmm__HE342_UnitDelay = X_SVmcPmm__HE342_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sig + nalDelay3/UnitDelay */ + X_SVmcPmm__HE342_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Signal + Delay3/UnitDelay */ + xVcVmcPmm_B_Wait4EngStrtTiOut = X_SVmcPmm__HE342_UnitDelay > cVcVmcPmm_t_Wait4Eng2StopTiOut; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseWait4Eng2Stop) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Swit + ch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logica + lOperator20 */ + xVcVmcPmm_B_Wait4Eng2Stop = (!(SVmcPmm__HE170__gicalOperator22)) || + xVcVmcPmm_B_Wait4EngStrtTiOut; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Swit + ch */ + xVcVmcPmm_B_Wait4Eng2Stop = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Switch: Omitted co + mparison with constant. */ + if (SVmcPmm__HE298_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDela + y1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sig + nalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/SignalDelay1/ts */ + X_SVmcPmm__HE341_UnitDelay = X_SVmcPmm__HE341_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sig + nalDelay1/UnitDelay */ + X_SVmcPmm__HE341_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Signal + Delay1/UnitDelay */ + xVcVmcPmm_B_Wait4CluStrtDly = X_SVmcPmm__HE341_UnitDelay > cVcVmcPmm_t_Wait4EngRunReqTot; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch22/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch22/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_EngRunReqTot_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch22/Swit + ch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/Encapsulat + edSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTot = cVcVmcPmm_B_EngRunReqTot_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch73/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch73/Switch: Omit + ted comparison with constant. */ + if (cVcVmcPmm_B_Use7DCT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch73/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logi + calSwitch22/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator23 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/Encapsu + latedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator16 */ + yVcVmcPmm_B_EngRunReqTot = (xVcVmcPmm_B_Wait4Eng2Stop && (!(X_SVmcPmm__HE6_UnitDelay7)) + && xVcVmcPmm_B_Wait4CluStrtDly) || X_SVmcPmm__HE6_UnitDelay12; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch73/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logi + calSwitch22/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/Encapsu + latedSubsystem/Out */ + yVcVmcPmm_B_EngRunReqTot = SVmcPmm__HE298_Switch; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetec + t/Logic */ + SVmcPmm__HE230_Logic1 = (!(xVcVmcPmm_B_EngRunReqDriver)) && X_SVmcPmm__HE230_Delay; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect/Delay */ + X_SVmcPmm__HE230_Delay = xVcVmcPmm_B_EngRunReqDriver; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/RelationalOperator1 + 7 */ + SVmcPmm__HE170__ionalOperator17 = sVcScIn_v_VehSpdLgt > cVcVmcPmm_v_WaitToReset; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF2 + /UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF2/Lo + gOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator25 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF2/Lo + gOp */ + X_SVmcPmm__HE336_UnitDelay1 = (SVmcPmm__HE230_Logic1 && SVmcPmm__HE170__ionalOperator17) || + (SVmcPmm__HE170__ionalOperator17 && (!(xVcVmcPmm_B_EngRunReqDriver)) && + X_SVmcPmm__HE336_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay/Switch1: Omitted compa + rison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator33 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF2 + /UnitDelay1 */ + if (yVcDeDmm_B_EngRunReqDrReEval || SVmcPmm__HE230_Logic1 || X_SVmcPmm__HE336_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay/UnitDelay */ + X_SVmcPmm__HE309_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay/S + um + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/ts4 */ + X_SVmcPmm__HE309_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE309_UnitDelay; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF8/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF8 + /UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF8/Lo + gOp2 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/EncapsulatedS + ubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF8/Lo + gOp + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/EncapsulatedS + ubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDel + ay/UnitDelay */ + X_SVmcPmm__HE339_UnitDelay1 = yVcVmcPmm_B_EngRunReqTot || ((yVcVmcPmm_B_EngRunReqTot || + (X_SVmcPmm__HE309_UnitDelay > cVcVmcPmm_t_WaitToReset)) && X_SVmcPmm__HE339_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch69/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch69/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseTotEngRunReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch69/Swit + ch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/Encapsulat + edSubsystem/Out */ + SVmcPmm__HE300_Switch = yVcVmcPmm_B_EngRunReqTot; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch69/Swit + ch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_ + FF8/UnitDelay1 */ + SVmcPmm__HE300_Switch = X_SVmcPmm__HE339_UnitDelay1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/Switch1: Omitted comp + arison with constant. */ + if (SVmcPmm__HE300_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay1/UnitDelay */ + X_SVmcPmm__HE310_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/ + Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Off + Delay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/ts1 */ + X_SVmcPmm__HE310_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE310_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch5/Switch: Omitted + comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetec + t2/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetec + t2/Logic */ + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE232_Delay))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch5/Switc + h */ + SVmcPmm__HE279_Switch = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch32/Swit + ch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch32/Switch: Omit + ted comparison with constant. */ + if (SVmcPmm__HE159_LogOp3) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch32/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logi + calSwitch5/Switch */ + SVmcPmm__HE279_Switch = cVcVmcPmm_t_EngOffFcAdapt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch32/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Logi + calSwitch5/Switch */ + SVmcPmm__HE279_Switch = cVcVmcPmm_t_EngOff; + } + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect2/Delay + */ + X_SVmcPmm__HE232_Delay = SVmcPmm__HE829_Switch; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/Relationa + lOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDel + ay1/UnitDelay */ + xVcVmcPmm_B_EngOnReqPre = X_SVmcPmm__HE310_UnitDelay <= SVmcPmm__HE279_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch25/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch25/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_LosStop) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch25/Swit + ch */ + SVmcPmm__HE252_Switch = yVcDsePcr_B_EngStopRq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch25/Swit + ch */ + SVmcPmm__HE252_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF3/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF3 + /UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF3/Lo + gOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator32 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF3/Lo + gOp */ + X_SVmcPmm__HE337_UnitDelay1 = (yVcFsdPc_B_RunDryCrkInhb && yVcFsdPc_B_RunDry && + cVcVmcPmm_B_UseRunDryInhb) || ((yVcPpmPsm_B_DriveCycleActive || (!(X_SVmcPmm__HE231_Delay))) + && (!(cVcVmcPmm_B_UseRunDryInhbOnly)) && X_SVmcPmm__HE337_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/EdgeDetect1/Delay + */ + X_SVmcPmm__HE231_Delay = yVcPpmPsm_B_DriveCycleActive; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch33/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch33/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_RcShutOff) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch33/Swit + ch */ + SVmcPmm__HE261_Switch = yVcPpmRc_B_ShutOffReq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch33/Swit + ch */ + SVmcPmm__HE261_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator37 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator47 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relati + onalOperator15 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF2/UnitDelay1 */ + SVmcPmm__HE170__gicalOperator37 = (sVcEc_n_Eng < cVcVmcPmm_n_IceStallMax) && + (X_SVmcPmm__HE590_UnitDelay1 || SVmcPmm__HE261_Switch); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator30 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF3 + /UnitDelay1 */ + xVcVmcPmm_B_EngStopFast = SVmcPmm__HE252_Switch || yVcDepSs_B_EngFastStop || + X_SVmcPmm__HE337_UnitDelay1 || (!(SVmcPmm__HE829_Switch)) || SVmcPmm__HE170__gicalOperator37; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator10 */ + SVmcPmm__HE170_LogicalOperator6 = xVcVmcPmm_B_EngOnReqPre && (!(xVcVmcPmm_B_EngStopFast)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator35 */ + xVcVmcPmm_B_EngStart = xVcVmcPmm_B_StartAllowedPath && SVmcPmm__HE170_LogicalOperator6; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_DepStop) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Swit + ch */ + xVcVmcPmm_B_StopAllowedDep = yVcDepSs_B_StopAllowed; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Swit + ch */ + xVcVmcPmm_B_StopAllowedDep = 1; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator1 */ + xVcVmcPmm_B_StopAllowedPath = SVmcPmm__HE170__gicalOperator37 || xVcVmcPmm_B_StopAllowedDep; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator38 */ + xVcVmcPmm_B_EngStop = (!(SVmcPmm__HE170_LogicalOperator6)) && xVcVmcPmm_B_StopAllowedPath; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/Lo + gOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/Lo + gOp */ + xVcVmcPmm_B_EngOnReqEng = xVcVmcPmm_B_EngStart || ((!(xVcVmcPmm_B_EngStop)) && + X_SVmcPmm__HE338_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/UnitDelay1 + */ + X_SVmcPmm__HE338_UnitDelay1 = xVcVmcPmm_B_EngOnReqEng; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SignalDelay1 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SignalDelay1/Switch: + Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_C + hMnd/RelationalOperator11 */ + if (sVcEc_n_Eng < cVcVmcPmm_n_CFTStop) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SignalDel + ay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd + /SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + Q_ChMnd/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121Q_ChMnd/ts6 */ + X_SVmcPmm__HE455_UnitDelay = X_SVmcPmm__HE455_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SignalDel + ay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + Q_ChMnd/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE455_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/SR_FF2/LogO + p3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_C + hMnd/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMn + d/SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMn + d/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMn + d/EdgeDetectRise1/LogicalOperator + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_C + hMnd/RelationalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMn + d/EdgeDetectRise1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMn + d/SR_FF2/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_C + hMnd/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE454_UnitDelay1 = ((sVcScIn_v_VehSpdLgt < 1.F) && (cVcVmcPmm_B_CTFStart && + (!(X_SVmcPmm__HE452_UnitDelay1)))) || ((X_SVmcPmm__HE455_UnitDelay <= cVcVmcPmm_t_CTFStop) && + X_SVmcPmm__HE454_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/EdgeDete + ctRise1/UnitDelay1 */ + X_SVmcPmm__HE452_UnitDelay1 = cVcVmcPmm_B_CTFStart; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/LogicalSwitc + h5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/LogicalSwitch5/Switc + h: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_C + hMnd/RelationalOperator3 */ + if (132 == cVcVmcPmm_D_CTF) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/LogicalSw + itch5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_C + hMnd/LogicalOperator4 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + Q_ChMnd/SR_FF2/UnitDelay1 */ + yVcVmcPmm_B_EngOnReqEng = !(X_SVmcPmm__HE454_UnitDelay1); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/LogicalSw + itch5/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_EngOnReqEng = xVcVmcPmm_B_EngOnReqEng; + } + #if Vc_Pvc_Hw_B_AT + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay3/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay3/Switch: O + mitted comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_EngOnReqEng) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE510_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/S + ignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmissi + on_Control/SignalDelay3/ts */ + X_SVmcPmm__HE510_UnitDelay = X_SVmcPmm__HE510_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or49 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator28 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator31 */ + SVmcPmm__HE171__gicalOperator49 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay1/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay1/Switch: O + mitted comparison with constant. */ + if (SVmcPmm__HE171__gicalOperator49) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/S + ignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmissi + on_Control/SignalDelay1/ts */ + X_SVmcPmm__HE508_UnitDelay = X_SVmcPmm__HE508_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE508_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay4/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay4/Switch: O + mitted comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_EngOnReqEng) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay4/UnitDelay */ + X_SVmcPmm__HE511_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 4/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/S + ignalDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmissi + on_Control/SignalDelay4/ts */ + X_SVmcPmm__HE511_UnitDelay = X_SVmcPmm__HE511_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch3 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch3/Switch: + Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator39 */ + if (!(yVcVmcTfa_B_CcOrAccActive)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch3/Switch */ + SVmcPmm__HE486_Switch = X_SVmcPmm__HE6_UnitDelay5; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch9/Swit + ch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay4/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay4/UnitDelay */ + if (X_SVmcPmm__HE511_UnitDelay <= cVcVmcPmm_t_IsgIceStopACCTimeout) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch9/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Con + trol/LogicalSwitch3/Switch */ + SVmcPmm__HE486_Switch = X_SVmcPmm__HE6_UnitDelay15; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch9/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Con + trol/LogicalSwitch3/Switch */ + SVmcPmm__HE486_Switch = X_SVmcPmm__HE6_UnitDelay5; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF1/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SignalDelay3/Rel + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/ts + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SignalDelay3/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF1/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SignalDelay1/UnitDelay */ + xVcVmcPmm_B_EngOnReqTransPre = (X_SVmcPmm__HE510_UnitDelay <= ts_VcVmcPmm__HEP7) || + ((X_SVmcPmm__HE508_UnitDelay <= cVcVmcPmm_t_IsgIceStopTimeout) && + ((!(SVmcPmm__HE171__gicalOperator49)) || (!(X_SVmcPmm__HE6_UnitDelay13))) && + (((!(X_SVmcPmm__HE6_UnitDelay13)) && (!(X_SVmcPmm__HE6_UnitDelay9))) || + (!(X_SVmcPmm__HE6_UnitDelay5))) && (SVmcPmm__HE486_Switch || yVcDseGb_B_EngStopDlyReq || + (!(X_SVmcPmm__HE6_UnitDelay4))) && (!(X_SVmcPmm__HE6_UnitDelay8)) && + X_SVmcPmm__HE503_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1/Uni + tDelay1 */ + X_SVmcPmm__HE503_UnitDelay1 = xVcVmcPmm_B_EngOnReqTransPre; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + 1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch11/Switch + : Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator22 */ + if ((Vc_Pvc_Hw_B_Efad_CN != 0) || (Vc_Pvc_Hw_B_Erad_CN != 0)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch11/Switch */ + SVmcPmm__HE482_Switch = xVcVmcPmm_B_EngOnReqTransPre; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch11/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/Out + */ + SVmcPmm__HE482_Switch = yVcVmcPmm_B_EngOnReqEng; + } + #if VcVmcPmm__HEP7_1224_EngageReqHybrid_7 + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Engag + eReqHybrid/LogicalOperator18 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator3 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out + */ + SVmcPmm__HE477__gicalOperator18 = yVcVmcEm_B_EngageReq || yVcDeDmm_B_TrnEngageRqDr || + (yVcVmcPmm_B_EngRunReqBrake && cVcVmcPmm_B_TrnMdeUseBrake) || (xVcVmcPmm_B_EngRunReqPcr + && cVcVmcPmm_B_TrnMdeUsePcr) || (yVcVmcPmm_B_EngRunReqTrans && + cVcVmcPmm_B_TrnMdeUseTrans) || (yVcVmcAwd_B_EngageReq && cVcVmcPmm_B_TrnMdeUseAwd) || + X_SVmcPmm__HE6_UnitDelay11; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Engage + ReqHybrid/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybri + d/SignalDelay1/Switch: Omitted comparison with constant. */ + if (SVmcPmm__HE477__gicalOperator18) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Eng + ageReqHybrid/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contro + l/1224_EngageReqHybrid/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1224_EngageReqHybrid/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmi + ssion_Control/1224_EngageReqHybrid/SignalDelay1/ts5 */ + X_SVmcPmm__HE515_UnitDelay = X_SVmcPmm__HE515_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Eng + ageReqHybrid/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1224_EngageReqHybrid/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE515_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Engage + ReqHybrid/SignalDelay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybri + d/SignalDelay2/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1224_EngageReqHybrid/RelationalOperator14 */ + if (sVcEc_n_Eng >= cVcVmcPmm_n_TrnEngBlockMin) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Eng + ageReqHybrid/SignalDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1224_EngageReqHybrid/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE516_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Eng + ageReqHybrid/SignalDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contro + l/1224_EngageReqHybrid/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1224_EngageReqHybrid/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmi + ssion_Control/1224_EngageReqHybrid/SignalDelay2/ts */ + X_SVmcPmm__HE516_UnitDelay = X_SVmcPmm__HE516_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Engage + ReqHybrid/MinMax */ + if (sVcEmiHeat_D_EngUseReq > sVcTmStrt_D_EngUseReq) { + SVmcPmm__HE477_MinMax = sVcEmiHeat_D_EngUseReq; + } + else { + SVmcPmm__HE477_MinMax = sVcTmStrt_D_EngUseReq; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Engage + ReqHybrid/SignalDelay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybri + d/SignalDelay3/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1224_EngageReqHybrid/RelationalOperator24 */ + if (SVmcPmm__HE477_MinMax == 1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Eng + ageReqHybrid/SignalDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1224_EngageReqHybrid/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE517_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Eng + ageReqHybrid/SignalDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contro + l/1224_EngageReqHybrid/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1224_EngageReqHybrid/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmi + ssion_Control/1224_EngageReqHybrid/SignalDelay3/ts */ + X_SVmcPmm__HE517_UnitDelay = X_SVmcPmm__HE517_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_Engag + eReqHybrid/LogicalOperator32 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator44 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1224_EngageReqHybrid/LogicalOperator46 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1224_EngageReqHybrid/SignalDelay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1224_EngageReqHybrid/SignalDelay1/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1224_EngageReqHybrid/SignalDelay2/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1224_EngageReqHybrid/SignalDelay3/UnitDelay */ + xVcVmcPmm_B_TrnEngageReqHybrid = SVmcPmm__HE482_Switch && + SVmcPmm__HE477__gicalOperator18 && ((X_SVmcPmm__HE515_UnitDelay > + cVcVmcPmm_t_TrnEngBlockMax) || yVcDeDmm_B_RespStartReq || yVcVmcAwd_B_EngageReq || + ((sVcDtcAtr_v_VehDrDirectionRaw >= cVcVmcPmm_v_TrnEngBlockMax) || + (X_SVmcPmm__HE516_UnitDelay > cVcVmcPmm_t_TrnEngRpmDly) || ((X_SVmcPmm__HE517_UnitDelay + > cVcVmcPmm_t_TrnEngCatHeatDly) && (!(cVcVmcPmm_B_TrnEngBlockSkipEngUseReq))))) && + ((sVcDtcAtr_D_GearLevAT != cVc_D_GearLevATReverse) || (!(yVcGscPrn_B_EfadRvs))); + #endif + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReq + IdleCoast/LogicalSwitch10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoas + t/LogicalSwitch10/Switch: Omitted comparison with constant. */ + if (SVmcPmm__HE482_Switch) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE519_Switch; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_Engage + ReqIdleCoast/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleC + oast/LogicalSwitch9/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_TrnMdeReqBrk) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_Eng + ageReqIdleCoast/LogicalSwitch9/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1225_EngageReqIdleCoast/RelationalOperator7 */ + SVmcPmm__HE519_Switch = rVcVmcPmm_D_EngRunReqBrake == 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_Eng + ageReqIdleCoast/LogicalSwitch9/Switch */ + SVmcPmm__HE519_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_Engage + ReqIdleCoast/LogicalSwitch10/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1225_EngageReqIdleCoast/LogicalOperator6 */ + xVcVmcPmm_B_TrnEngageReqIC = SVmcPmm__HE519_Switch || yVcDeDmm_B_TrnEngageRqDr || + yVcVscEcc_B_TrnEngageReq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_Engage + ReqIdleCoast/LogicalSwitch10/Switch */ + xVcVmcPmm_B_TrnEngageReqIC = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8/Switch: + Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator30 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator12 */ + if (((Vc_Pvc_Hw_B_Efad_CN != 0) || (Vc_Pvc_Hw_B_Erad_CN != 0)) && cVcVmcPmm_B_TrnMdeHev) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch8/Switch */ + xVcVmcPmm_B_TrnEngageReqPre = xVcVmcPmm_B_TrnEngageReqHybrid; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch2/Swit + ch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_TrnMdeIC) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Con + trol/LogicalSwitch8/Switch */ + xVcVmcPmm_B_TrnEngageReqPre = xVcVmcPmm_B_TrnEngageReqIC; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Con + trol/LogicalSwitch8/Switch */ + xVcVmcPmm_B_TrnEngageReqPre = SVmcPmm__HE482_Switch; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + isabled/SignalDelay10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/ + SignalDelay10/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + 1226_CrShPathDisabled/LogicalOperator4 */ + if (!(xVcVmcPmm_B_TrnEngageReqPre)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPa + thDisabled/SignalDelay10/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1 + 226_CrShPathDisabled/SignalDelay10/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/SignalDelay10/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmissi + on_Control/1226_CrShPathDisabled/SignalDelay10/ts */ + X_SVmcPmm__HE523_UnitDelay = X_SVmcPmm__HE523_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPa + thDisabled/SignalDelay10/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/SignalDelay10/UnitDelay */ + X_SVmcPmm__HE523_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShP + athDisabled/SignalDelay10/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1226_CrShPathDisabled/SignalDelay10/UnitDelay */ + SVmcPmm__HE523_Rel = X_SVmcPmm__HE523_UnitDelay > cVcVmcPmm_t_CrShPahDiTiOut; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or18 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator41 */ + SVmcPmm__HE171__gicalOperator18 = (sVcDtcCta_Tq_CrShInstReq < cVcVmcPmm_Tq_CrShRampDown) && + (sVcDtcCta_Tq_CrShInstReq > cVcVmcPmm_Tq_CrShRampUp); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathD + isabled/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/ + LogicalSwitch9/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_Use7DCT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPa + thDisabled/LogicalSwitch9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1226_CrShPathDisabled/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1226_CrShPathDisabled/LogicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/RelationalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/RelationalOperator2 */ + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE523_Rel || (yVcVmcWtc_B_CrShPathDisabled && + (sVcDtcAjc_Tq_DrCrShReqWhl < cVcVmcPmm_Tq_DrCrShRampDown) && (sVcDtcAjc_Tq_DrCrShReqWhl + > cVcVmcPmm_Tq_DrCrShRampUp)); + } + else { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE479__gicalOperator15; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShP + athDisabled/LogicalOperator15 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/RelationalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/RelationalOperator4 */ + SVmcPmm__HE479__gicalOperator15 = (sVcDtcAjc_Tq_DrPropFrntReq < + cVcVmcPmm_Tq_PropFrntRampDown) && (sVcDtcAjc_Tq_DrPropFrntReq > + cVcVmcPmm_Tq_PropFrntRampUp); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPa + thDisabled/LogicalSwitch12/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabl + ed/LogicalSwitch12/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseEradHybrid) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrS + hPathDisabled/LogicalSwitch12/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Con + trol/1226_CrShPathDisabled/LogicalSwitch9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1226_CrShPathDisabled/LogicalOperator3 */ + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE523_Rel || (SVmcPmm__HE479__gicalOperator15 + && yVcVmcWtd_B_FrntAxlePathDisabled); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrS + hPathDisabled/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDis + abled/LogicalSwitch1/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UsePropFrntRampDown) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_ + CrShPathDisabled/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/1226_CrShPathDisabled/LogicalSwitch12/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/1226_CrShPathDisabled/LogicalSwitch9/Switch */ + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE479__gicalOperator15; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_ + CrShPathDisabled/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/1226_CrShPathDisabled/LogicalSwitch12/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/1226_CrShPathDisabled/LogicalSwitch9/Switch */ + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE171__gicalOperator18; + } + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or43 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator29 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator32 */ + SVmcPmm__HE171__gicalOperator43 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or10 */ + SVmcPmm__HE171__gicalOperator10 = xVcVmcPmm_B_CrShPathDisabled && + SVmcPmm__HE171__gicalOperator43; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF4/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SR_FF4/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF4/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + EdgeDetect1/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + EdgeDetect1/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF4/LogOp */ + X_SVmcPmm__HE505_UnitDelay1 = (SVmcPmm__HE171__gicalOperator10 && + (!(X_SVmcPmm__HE480_Delay))) || (SVmcPmm__HE171__gicalOperator43 && + X_SVmcPmm__HE505_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/EdgeDetect + 1/Delay */ + X_SVmcPmm__HE480_Delay = SVmcPmm__HE171__gicalOperator10; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch6 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch6/Switch: + Omitted comparison with constant. */ + if (cVcVmcPmm_B_CrShPathEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch6/Switch */ + SVmcPmm__HE489_Switch = cVcVmcPmm_B_CrShPathEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch6/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator48 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/RelationalOperator33 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator61 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SR_FF4/UnitDelay1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/RelationalOperator30 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/RelationalOperator27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator15 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/RelationalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/LogicalOperator7 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE489_Switch = (xVcVmcPmm_B_TrnEngageReqPre && X_SVmcPmm__HE505_UnitDelay1 && + SVmcPmm__HE829_Switch && (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdCrSh) + && (CVmcPmm__HE1_D_IceStatus == 2) && (yVcDsePcr_B_TransNtrlDisable || + (sVcDtcAtr_D_TransMode == 1) || (sVcDtcAtr_D_TransMode == 2))) || + (cVcVmcPmm_B_UseOldEngRevStgy && SVmcPmm__HE482_Switch && SVmcPmm__HE829_Switch && + (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdCrSh) && + (CVmcPmm__HE1_D_IceStatus == 2) && (yVcDsePcr_B_TransNtrlDisable || + SVmcPmm__HE171__gicalOperator49)); + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay2/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay2/Switch: O + mitted comparison with constant. */ + if (SVmcPmm__HE171__gicalOperator49) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/S + ignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmissi + on_Control/SignalDelay2/ts */ + X_SVmcPmm__HE509_UnitDelay = X_SVmcPmm__HE509_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + 2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE509_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator29 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator31 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator15 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator16 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SignalDelay2/UnitDelay */ + xVcVmcPmm_B_TrnEngageReq = (xVcVmcPmm_B_TrnEngageReqPre && ((sVcDtcAtr_v_VehDrDirectionRaw + >= cVcVmcPmm_v_ReqEngDrDir) || (CVmcPmm__HE1_D_IceStatus == 2))) || + ((xVcVmcPmm_B_TrnEngageReqPre || (!(xVcVmcPmm_B_CrShPathDisabled))) && + (!(xVcVmcPmm_B_EngStopFast)) && (X_SVmcPmm__HE509_UnitDelay <= cVcVmcPmm_t_GearLevPNDlyOn) + && X_SVmcPmm__HE502_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF/Unit + Delay1 */ + X_SVmcPmm__HE502_UnitDelay1 = xVcVmcPmm_B_TrnEngageReq; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or35 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator1 */ + SVmcPmm__HE171__gicalOperator35 = SVmcPmm__HE482_Switch && + (!(SVmcPmm__HE477__gicalOperator18)); + #if VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3Oil + PresBuildUp/EdgeDetect2/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1223_C3OilPresBuildUp/EdgeDetect2/Logic */ + SVmcPmm__HE513_Logic1 = SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE513_Delay)); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3 + OilPresBuildUp/EdgeDetect2/Delay */ + X_SVmcPmm__HE513_Delay = SVmcPmm__HE829_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilP + resBuildUp/CounterReset1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuild + Up/CounterReset1/Switch: Omitted comparison with constant. */ + if (SVmcPmm__HE513_Logic1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3O + ilPresBuildUp/CounterReset1/Switch */ + SVmcPmm__HE512_Switch = 0.F; + } + else { + /* SLLocal: Default storage class for local variables | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #ifdef SVmcPmm__HE512_Switch_AUX + Float32 SVmcPmm__HE512_Switch1; + #endif + + /* SVmcPmm__HE512_Switch_AUX */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3O + ilPresBuildUp/CounterReset1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBu + ildUp/CounterReset1/Switch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1223_C3OilPresBuildUp/LogicalOperator40 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1223_C3OilPresBuildUp/LogicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1223_C3OilPresBuildUp/RelationalOperator27 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/1223_C3OilPresBuildUp/RelationalOperator26 */ + if ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) && (sVcDtcAtr_v_VehDrDirectionRaw + > 4.F) && (!(SVmcPmm__HE171__gicalOperator35))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_ + C3OilPresBuildUp/CounterReset1/Switch1 + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Tran + smission_Control/1223_C3OilPresBuildUp/ts1 */ + SVmcPmm__HE512_Switch1 = ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_ + C3OilPresBuildUp/CounterReset1/Switch1 */ + SVmcPmm__HE512_Switch1 = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3O + ilPresBuildUp/CounterReset1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contro + l/1223_C3OilPresBuildUp/CounterReset1/Sum */ + SVmcPmm__HE512_Switch = SVmcPmm__HE512_Switch1 + X_SVmcPmm__HE512_UnitDelay; + } + if (1e+30F < SVmcPmm__HE512_Switch) { + rVcVmcPmm_t_TrnC3OilPres = 1e+30F; + } + else { + rVcVmcPmm_t_TrnC3OilPres = SVmcPmm__HE512_Switch; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3 + OilPresBuildUp/CounterReset1/UnitDelay */ + X_SVmcPmm__HE512_UnitDelay = rVcVmcPmm_t_TrnC3OilPres; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3Oil + PresBuildUp/SR_FF3/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1223_C3OilPresBuildUp/SR_FF3/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1223_C3OilPresBuildUp/SR_FF3/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/1223_C3OilPresBuildUp/SR_FF3/LogOp */ + X_SVmcPmm__HE514_UnitDelay1 = SVmcPmm__HE513_Logic1 || ((sVcDtcAtr_v_VehDrDirectionRaw + <= cVcVmcPmm_v_TrnMdeC3OilPresMax) && (sVcTcm_Te_TrsmOilT < + cVcVmcPmm_Te_TrnMdeC3OilPresMax) && X_SVmcPmm__HE514_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3Oil + PresBuildUp/LogicalOperator41 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1223_C3OilPresBuildUp/RelationalOperator29 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/1223_C3OilPresBuildUp/SR_FF3/UnitDelay1 */ + xVcVmcPmm_B_TrnC3OilPres = (rVcVmcPmm_t_TrnC3OilPres < cVcVmcPmm_t_TrnMdeC3OilPresMax) + && X_SVmcPmm__HE514_UnitDelay1 && cVcVmcPmm_B_TrnMdeUseC3OilPres; + #endif + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF7/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SR_FF7/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF7/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator21 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator20 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator42 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF7/LogOp */ + X_SVmcPmm__HE506_UnitDelay1 = ((!(xVcVmcPmm_B_TrnC3OilPres)) && (sVcScIn_v_VehSpdLgt > + cVcVmcPmm_v_TotNtrlSet)) || ((sVcScIn_v_VehSpdLgt > cVcVmcPmm_v_TotNtrlReset) && + X_SVmcPmm__HE506_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1/Switch: + Omitted comparison with constant. */ + if (cVcVmcPmm_D_TransModeReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch1/Switch */ + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TransModeReq_dbi; + } + else { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE490_Switch; + #endif + + /* Vc_Pvc_Hw_B_AT */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch7/Swit + ch: Omitted comparison with constant. */ + if (yVcDsePcr_B_TransNtrlRq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch7/Switch */ + SVmcPmm__HE490_Switch = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch7/Switch */ + SVmcPmm__HE490_Switch = xVcVmcPmm_B_TrnEngageReq; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch4/Swit + ch: Omitted comparison with constant. */ + if (SVmcPmm__HE490_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch14/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch14/ + Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/LogicalOperator28 */ + if (yVcVmcEm_B_NICEnable && cVcVmcPmm_B_TrnMdeHevUseNIC) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Logic + alSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch1/Switch */ + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeHevReqEngNIC; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Logic + alSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch1/Switch */ + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeReqEng; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalS + witch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch5/S + witch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/LogicalOperator33 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/LogicalOperator23 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/LogicalOperator14 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/SR_FF7/UnitDelay1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/RelationalOperator23 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/RelationalOperator5 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission + _Control/RelationalOperator8 */ + if ((yVcDsePcr_B_TransNtrlRq || (sVcDtcAtr_v_VehDrDirectionRaw < + cVcVmcPmm_v_TotNtrlVehDrDir) || (sVcDtcAtr_D_TrgGear == -1) || (sVcDtcAtr_D_TrgGear + > cVcVmcPmm_D_GearTotNtrl) || X_SVmcPmm__HE506_UnitDelay1 || + SVmcPmm__HE171__gicalOperator35) && ((Vc_Pvc_Hw_B_Efad_CN != 0) || + (Vc_Pvc_Hw_B_Erad_CN != 0))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Logic + alSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch1/Switch */ + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeReqTotNtrl; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Logic + alSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_ + Control/LogicalSwitch1/Switch */ + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeReqNtrl; + } + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator16 */ + SVmcPmm__HE171_LogicalOperator3 = SVmcPmm__HE482_Switch && (!(xVcVmcPmm_B_EngStopFast)); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1 + 9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch19/Switch + : Omitted comparison with constant. */ + if (cVcVmcPmm_B_DepStopAT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch19/Switch */ + SVmcPmm__HE484_Switch = yVcDepSs_B_StopAllowed; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwit + ch19/Switch */ + SVmcPmm__HE484_Switch = 1; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay/Switch: Om + itted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator2 */ + if (!(SVmcPmm__HE482_Switch)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + /Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/S + ignalDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmissi + on_Control/ts5 */ + X_SVmcPmm__HE507_UnitDelay = X_SVmcPmm__HE507_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SignalDelay + /Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Co + ntrol/SignalDelay/UnitDelay */ + X_SVmcPmm__HE507_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperat + or27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator24 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator41 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator38 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator25 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + LogicalOperator26 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SignalDelay/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/RelationalOperator6 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Contr + ol/SignalDelay/UnitDelay */ + xVcVmcPmm_B_EngStopReqAT = (!(SVmcPmm__HE171_LogicalOperator3)) && + (X_SVmcPmm__HE590_UnitDelay1 || SVmcPmm__HE484_Switch) && (xVcVmcPmm_B_EngStopFast || + ((sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_EngStopReqAT) && SVmcPmm__HE827_Switch && + (SVmcPmm__HE171__gicalOperator18 || cVcVmcPmm_B_CrShaftRampDownIgnore) && ((sVcEc_n_Eng < + (sVcDtcIcl_n_IdleSpdBs + cVcVmcPmm_n_EngOnDelayOff)) || (X_SVmcPmm__HE507_UnitDelay > + cVcVmcPmm_t_EngOnDelayOff) || cVcVmcPmm_B_EngOnDelayIgnore))); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/ + SR_FF2/LogOp */ + xVcVmcPmm_B_EngOnReqTrans = SVmcPmm__HE171_LogicalOperator3 || + ((!(xVcVmcPmm_B_EngStopReqAT)) && X_SVmcPmm__HE504_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2/Uni + tDelay1 */ + X_SVmcPmm__HE504_UnitDelay1 = xVcVmcPmm_B_EngOnReqTrans; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Out4/EncapsulatedSubsy + stem/Out */ + yVcVmcPmm_B_TrnEngageReqHev = SVmcPmm__HE477__gicalOperator18; + #endif + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Switch: Omitted comparison with cons + tant. */ + if (cVcVmcPmm_B_EngOnReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE6_UnitDelay14 = cVcVmcPmm_B_EngOnReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2/Switch: Omitted comparison with c + onstant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/RelationalOperator1 */ + if (133 == cVcVmcPmm_D_CTF) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + Q_ChMnd/LogicalOperator4 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121Q_ChMnd/SR_FF2/UnitDelay1 */ + X_SVmcPmm__HE6_UnitDelay14 = !(X_SVmcPmm__HE454_UnitDelay1); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch7/Switch: Omitted comparison wit + h constant. */ + if (cVc_B_SeriesHev) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch7/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/O + ut */ + X_SVmcPmm__HE6_UnitDelay14 = yVcVmcPmm_B_EngOnReqEng; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch1/Switch: Omitted comparison + with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalOperator6 */ + if (!(yVcDtcAtr_B_AT)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch7/Swi + tch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2/Swi + tch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Swi + tch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsyste + m/Out */ + X_SVmcPmm__HE6_UnitDelay14 = yVcVmcPmm_B_EngOnReqEng; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch7/Swi + tch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch2/Swi + tch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch4/Swi + tch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE6_UnitDelay14 = xVcVmcPmm_B_EngOnReqTrans; + } + } + } + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay10 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE3_UnitDelay10 = X_SVmcPmm__HE6_UnitDelay14; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch8/Switch: Omitted comparison with cons + tant. */ + if (cVc_B_SeriesHev) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch8/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_TransModeReq = 5; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch8/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_TransModeReq = rVcVmcPmm_D_TransModeReq; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch9/Switch: Omitted comparison with cons + tant. */ + if (cVc_B_SeriesHev) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch9/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_CrShPathEnable = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch11/Switch: Omitted comparison with + constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalOperator5 */ + if (!(yVcDtcAtr_B_AT)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch11/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch9/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2/EncapsulatedSubsystem/Out + */ + yVcVmcPmm_B_CrShPathEnable = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch11/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/LogicalSwitch9/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2/EncapsulatedSubsystem/Out + */ + yVcVmcPmm_B_CrShPathEnable = SVmcPmm__HE489_Switch; + } + } + #if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + #if Vc_Pvc_Hw_B_Efad + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad + /Enable: Enable condition + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad + /Enable: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseEfadCode) { + /* SLLocal: Default storage class for local variables | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE719_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE720_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE728_MinMax; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE728_Prod1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE728_Sum3; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE732_MinMax; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE732_Prod1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE732_Sum3; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE745_Switch1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE765_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE766_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637_LogicalOperator7; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637__gicalOperator40; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637__gicalOperator50; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638_LogicalOperator1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638_LogicalOperator2; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator14; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator15; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator16; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator17; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator40; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator41; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator42; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__ionalOperator13; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__ionalOperator22; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__tionalOperator6; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator16; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator20; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator21; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator23; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__ionalOperator13; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__ionalOperator18; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE672_LogicalOperator7; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE672__gicalOperator10; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE673__gicalOperator23; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE695_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE699_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE700_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE721_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE722_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE741_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE742_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE743__ationalOperator; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE747_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE748_Rel; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE748_Rel1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE749_Rel; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE749_Rel1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE750_Rel; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE750_Rel1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE751_Rel; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE751_Rel1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE752_Rel; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE752_Rel1; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE828_Switch; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 SVmcPmm__HE730__rkRoadIncline_c[2] = + { + /* [0..1] */ 0, 0 + /* 0., 0. */ + }; /* different scalings, different constrained ranges */ + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 SVmcPmm__HE730__rkRoadIncline_r[2] = + { + /* [0..1] */ 0, 0 + /* 0., 0. */ + }; /* different scalings, different constrained ranges */ + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE661_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE662_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE663_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE664_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE665_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE666_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE667_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE668_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE669_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE670_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE671_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE708_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE709_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE710_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE711_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE712_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE713_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE714_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE725_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE726_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE727_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE728_Del1 = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE732_Del1 = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE736_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE737_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE738_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE739_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE740_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE754_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE755_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE756_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE757_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE758_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE759_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE760_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE761_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE762_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE772_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE773_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE779_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE780_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay11 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE638_UnitDelay12 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay2 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay3 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay4 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE638_UnitDelay5 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE638_UnitDelay6 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay7 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay8 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay9 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE639_UnitDelay4 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE643_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE644_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE657_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE658_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE659_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE660_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE672_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE672_UnitDelay2 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE673_UnitDelay15 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE674_UnitDelay7 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE675_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE675_UnitDelay10 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE675_UnitDelay2 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE676_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE677_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE678_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE679_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE680_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE681_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE682_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE683_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE684_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE685_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE686_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE687_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE701_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE702_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE703_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE704_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE705_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE706_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE707_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE717_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE718_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE723_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE724_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE731_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE733_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE734_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE735_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE743_UnitDelay7 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE744_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE744_UnitDelay2 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE744_UnitDelay3 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE748_UnitDelay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE749_UnitDelay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE750_UnitDelay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE751_UnitDelay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE752_UnitDelay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE753_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE771_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE774_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE775_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE776_Delay = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE777_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE778_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch2/Switch: Omitted c + omparison with constant. */ + if (cVcVmcPmm_B_UseOld12VStrtAllwd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch2/Switch + */ + SVmcPmm__HE828_Switch = yVcDepSs_B_StartAllowed; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalSwitch2/Switch + */ + SVmcPmm__HE828_Switch = yVcDepSs_B_12VStartEnable; + } + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay5/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator7 */ + if (sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_IsgStandStillVehSpdOK) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay5/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/ts */ + X_SVmcPmm__HE759_UnitDelay = X_SVmcPmm__HE759_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/UnitDelay */ + X_SVmcPmm__HE759_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/SignalDelay5/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/UnitDelay */ + xVcVmcPmm_B_IsgStandStillVehSpdOK = X_SVmcPmm__HE759_UnitDelay > + cVcVmcPmm_t_IsgStandStillVehSpdOK; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/Abs/Switch1 */ + if (sVcVmcAwd_X_RoadGrad >= 0.F) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/Abs/Switch1 */ + SVmcPmm__HE745_Switch1 = sVcVmcAwd_X_RoadGrad; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/Abs/Switch1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Abs/Gain */ + SVmcPmm__HE745_Switch1 = sVcVmcAwd_X_RoadGrad * -1.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay3/Rel + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1242_Efad/12421_Efad/124212_IsgReq/Sum3 */ + SVmcPmm__HE751_Rel = (cVcVmcPmm_X_IsgStopRoadGradMaxHyst + + cVcVmcPmm_X_IsgStopRoadGradMax) <= SVmcPmm__HE745_Switch1; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay3/Rel1 */ + SVmcPmm__HE751_Rel1 = SVmcPmm__HE745_Switch1 <= cVcVmcPmm_X_IsgStopRoadGradMax; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/Relay3/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay3/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay3/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay3/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay3/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay3/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay3/LogicalOperator4 */ + X_SVmcPmm__HE751_UnitDelay = (SVmcPmm__HE751_Rel && (!(SVmcPmm__HE751_Rel1))) || + ((!(SVmcPmm__HE751_Rel)) && (!(SVmcPmm__HE751_Rel1)) && X_SVmcPmm__HE751_UnitDelay); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator35 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay3/UnitDelay */ + xVcVmcPmm_B_IsgStopRoadGradOK = !(X_SVmcPmm__HE751_UnitDelay); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator20 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator17 */ + SVmcPmm__HE639__gicalOperator20 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) + || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator58 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/O + ut + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + xVcVmcPmm_B_IsgStopStandstillPre = cVcVmcPmm_B_UseIsgStandStill && + (!(yVcVmcPmm_B_EngOnReqEng)) && (CVmcPmm__HE1_D_IceStatus != 0) && + xVcVmcPmm_B_IsgStandStillVehSpdOK && xVcVmcPmm_B_IsgStopRoadGradOK && + SVmcPmm__HE639__gicalOperator20; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8/Switch: Omitted comparison wi + th constant. */ + if (X_SVmcPmm__HE744_UnitDelay3) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay + 8/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/Signal + Delay8/ts */ + X_SVmcPmm__HE780_UnitDelay = X_SVmcPmm__HE780_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay + 8/UnitDelay */ + X_SVmcPmm__HE780_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay/Switch: Omitted comparison wit + h constant. */ + if (X_SVmcPmm__HE744_UnitDelay3) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay + /UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/Signal + Delay/ts */ + X_SVmcPmm__HE779_UnitDelay = X_SVmcPmm__HE779_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay + /UnitDelay */ + X_SVmcPmm__HE779_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay7/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator12 */ + if (sVcVmcBsl_Tq_FrntReqWhl < cVcVmcPmm_Tq_IsgStandStillBslTqOK) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay7/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/ts */ + X_SVmcPmm__HE761_UnitDelay = X_SVmcPmm__HE761_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay7/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/UnitDelay */ + X_SVmcPmm__HE761_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/SignalDelay7/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/UnitDelay */ + xVcVmcPmm_B_IsgStandStillBslTqOK = X_SVmcPmm__HE761_UnitDelay > + cVcVmcPmm_t_IsgStandStillBslTqOK; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay6/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator10 */ + if (sVcVdm_Tq_BrkTqAtWhlsReq > cVcVmcPmm_Tq_IsgStandStillBrkTqOK) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay6/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/ts */ + X_SVmcPmm__HE760_UnitDelay = X_SVmcPmm__HE760_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay6/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/UnitDelay */ + X_SVmcPmm__HE760_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/SignalDelay6/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/UnitDelay */ + xVcVmcPmm_B_IsgStandStillBrkTqOK = X_SVmcPmm__HE760_UnitDelay > + cVcVmcPmm_t_IsgStandStillBrkTqOK; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator16 */ + SVmcPmm__HE639__gicalOperator16 = xVcVmcPmm_B_IsgStandStillBslTqOK && + xVcVmcPmm_B_IsgStandStillBrkTqOK; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator18 */ + xVcVmcPmm_B_IsgStopStandstill = xVcVmcPmm_B_IsgStopStandstillPre && + SVmcPmm__HE639__gicalOperator16; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator24 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator29 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect/Logic + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/RelationalOperato + r24 */ + xVcVmcPmm_B_IsgStopRunReqStandstill = X_SVmcPmm__HE744_UnitDelay1 && + ((!(SVmcPmm__HE639__gicalOperator16)) && X_SVmcPmm__HE774_Delay) && + ((sVcDseGb_D_EfadPathAct == 1) || cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct) && + cVcVmcPmm_B_UseIsgStopRunReqStandstill; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect/Delay */ + X_SVmcPmm__HE774_Delay = SVmcPmm__HE639__gicalOperator16; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/UnitDelay1 */ + X_SVmcPmm__HE744_UnitDelay1 = xVcVmcPmm_B_IsgStopStandstill; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay2/Rel + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1242_Efad/12421_Efad/124212_IsgReq/Sum2 */ + SVmcPmm__HE750_Rel = (cVcVmcPmm_v_IsgStopCoastSpdHyst + + cVcVmcPmm_v_IsgStopCoastSpdMax) <= sVcScIn_v_VehSpdLgt; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay2/Rel1 */ + SVmcPmm__HE750_Rel1 = sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_IsgStopCoastSpdMax; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/Relay2/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay2/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay2/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay2/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay2/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay2/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay2/LogicalOperator4 */ + X_SVmcPmm__HE750_UnitDelay = (SVmcPmm__HE750_Rel && (!(SVmcPmm__HE750_Rel1))) || + ((!(SVmcPmm__HE750_Rel)) && (!(SVmcPmm__HE750_Rel1)) && X_SVmcPmm__HE750_UnitDelay); + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay4/Rel */ + SVmcPmm__HE752_Rel = cVcVmcPmm_v_IsgStopCoastSpdMinOn <= sVcScIn_v_VehSpdLgt; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay4/Rel1 */ + SVmcPmm__HE752_Rel1 = sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_IsgStopCoastSpdMinOff; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/Relay4/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay4/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay4/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay4/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay4/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay4/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay4/LogicalOperator4 */ + X_SVmcPmm__HE752_UnitDelay = (SVmcPmm__HE752_Rel && (!(SVmcPmm__HE752_Rel1))) || + ((!(SVmcPmm__HE752_Rel)) && (!(SVmcPmm__HE752_Rel1)) && X_SVmcPmm__HE752_UnitDelay); + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay/Rel + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1242_Efad/12421_Efad/124212_IsgReq/Sum */ + SVmcPmm__HE748_Rel = (cVcVmcPmm_Tq_IsgStopCoastDrReqHyst + + cVcVmcPmm_Tq_IsgStopCoastDrReqMax) <= sVcVmcBsl_Tq_FrntReqWhl; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay/Rel1 */ + SVmcPmm__HE748_Rel1 = sVcVmcBsl_Tq_FrntReqWhl <= cVcVmcPmm_Tq_IsgStopCoastDrReqMax; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/Relay/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay/LogicalOperator4 */ + X_SVmcPmm__HE748_UnitDelay = (SVmcPmm__HE748_Rel && (!(SVmcPmm__HE748_Rel1))) || + ((!(SVmcPmm__HE748_Rel)) && (!(SVmcPmm__HE748_Rel1)) && X_SVmcPmm__HE748_UnitDelay); + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay1/Rel */ + SVmcPmm__HE749_Rel = cVcVmcPmm_Tq_IsgStopCoastDrReqMin <= sVcVmcBsl_Tq_FrntReqWhl; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/Relay1/Rel1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1242_Efad/12421_Efad/124212_IsgReq/Sum1 */ + SVmcPmm__HE749_Rel1 = sVcVmcBsl_Tq_FrntReqWhl <= (cVcVmcPmm_Tq_IsgStopCoastDrReqMin - + cVcVmcPmm_Tq_IsgStopCoastDrReqHyst); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/Relay1/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay1/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay1/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay1/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay1/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/Relay1/LogicalOperator4 */ + X_SVmcPmm__HE749_UnitDelay = (SVmcPmm__HE749_Rel && (!(SVmcPmm__HE749_Rel1))) || + ((!(SVmcPmm__HE749_Rel)) && (!(SVmcPmm__HE749_Rel1)) && X_SVmcPmm__HE749_UnitDelay); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator21 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator12 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay1/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay/UnitDelay */ + SVmcPmm__HE639__gicalOperator21 = (!(X_SVmcPmm__HE748_UnitDelay)) && + X_SVmcPmm__HE749_UnitDelay; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator22 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator14 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator26 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay4/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator15 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/O + ut + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/Relay2/UnitDelay + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + xVcVmcPmm_B_IsgStopCoast = cVcVmcPmm_B_UseIsgStopCoast && + (!(yVcVmcPmm_B_EngOnReqEng)) && (!(X_SVmcPmm__HE750_UnitDelay)) && + X_SVmcPmm__HE752_UnitDelay && (CVmcPmm__HE1_D_IceStatus != 0) && + SVmcPmm__HE639__gicalOperator20 && SVmcPmm__HE639__gicalOperator21; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator25 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect1/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect1/Logic */ + xVcVmcPmm_B_IsgStopRunReqCoast = X_SVmcPmm__HE744_UnitDelay2 && + ((!(SVmcPmm__HE639__gicalOperator21)) && X_SVmcPmm__HE775_Delay) && + cVcVmcPmm_B_UseIsgStopRunReqCoast; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect1/Delay */ + X_SVmcPmm__HE775_Delay = SVmcPmm__HE639__gicalOperator21; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/UnitDelay2 */ + X_SVmcPmm__HE744_UnitDelay2 = xVcVmcPmm_B_IsgStopCoast; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR1/LogOp2 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR1/UnitDelay + 1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR1/LogOp */ + X_SVmcPmm__HE778_UnitDelay1 = (sVcDseGb_D_EfadPathAct != 2) && (sVcDtcAtr_D_GearLevAT + == cVc_D_GearLevATDrive) && (xVcVmcPmm_B_IsgStopStandstill || + X_SVmcPmm__HE778_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator36 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR1/UnitDelay + 1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect2/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect2/Logic */ + xVcVmcPmm_B_IsgStopPostRunReqStandstill = cVcVmcPmm_B_UseIsgStopPostRunReqStandstill + && ((!(SVmcPmm__HE639__gicalOperator16)) && X_SVmcPmm__HE776_Delay) && + X_SVmcPmm__HE778_UnitDelay1; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/EdgeDetect2/Delay */ + X_SVmcPmm__HE776_Delay = SVmcPmm__HE639__gicalOperator16; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay8/Unit + Delay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SignalDelay/UnitD + elay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator28 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/RelationalOperato + r23 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator23 */ + xVcVmcPmm_B_EngRunReqIsgStop = ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive)) && ((sVcDseGb_D_EfadPathAct != 2) + || (X_SVmcPmm__HE780_UnitDelay <= cVcVmcPmm_t_EngRunReqIsgStopMin)) && + (X_SVmcPmm__HE779_UnitDelay <= cVcVmcPmm_t_EngRunReqIsgStopMax) && + (((xVcVmcPmm_B_IsgStopRunReqStandstill || xVcVmcPmm_B_IsgStopRunReqCoast || + xVcVmcPmm_B_IsgStopPostRunReqStandstill) && (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive)) || X_SVmcPmm__HE777_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/UnitDelay1 */ + X_SVmcPmm__HE777_UnitDelay1 = xVcVmcPmm_B_EngRunReqIsgStop; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/UnitDelay3 */ + X_SVmcPmm__HE744_UnitDelay3 = xVcVmcPmm_B_EngRunReqIsgStop; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/Log + Op2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/Log + Op */ + xVcVmcPmm_B_Wait4CluStrtWhlTqLow = (sVcVmcWtd_Tq_FrntReqWhl < + cVcVmcPmm_Tq_Wait4CluStrtEna) || ((sVcVmcWtd_Tq_FrntReqWhl <= + cVcVmcPmm_Tq_Wait4CluStrtDi) && X_SVmcPmm__HE734_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/UnitDelay1 */ + X_SVmcPmm__HE734_UnitDelay1 = xVcVmcPmm_B_Wait4CluStrtWhlTqLow; + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12 + 421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Sum3 + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Fir + stOrderFilter1/ts */ + SVmcPmm__HE732_Sum3 = ts_VcVmcPmm__HEP7 + cVcVmcPmm_tc_VdmAccFilt; + if (SVmcPmm__HE732_Sum3 > 1e-06F) { + SVmcPmm__HE732_MinMax = SVmcPmm__HE732_Sum3; + } + else { + SVmcPmm__HE732_MinMax = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Prod1 + */ + if (SVmcPmm__HE732_MinMax != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VSta + rt/FirstOrderFilter1/ts */ + SVmcPmm__HE732_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE732_MinMax; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VSta + rt/FirstOrderFilter1/ts */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE732_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE732_Prod1 = 3.402823466e+38F; + } + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12 + 421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Sum2 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderF + ilter1/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilte + r1/Sum1 */ + rVcVmcPmm_a_Veh = X_SVmcPmm__HE732_Del1 + ((sVcVdm_a_ALgtStdFromWhlSpd - + X_SVmcPmm__HE732_Del1) * SVmcPmm__HE732_Prod1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Del + 1 */ + X_SVmcPmm__HE732_Del1 = rVcVmcPmm_a_Veh; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogO + p2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogO + p */ + xVcVmcPmm_B_Wait4CluStrtWhlAccHigh = (rVcVmcPmm_a_Veh > cVcVmcPmm_a_Wait4CluStrtEna) + || ((rVcVmcPmm_a_Veh >= cVcVmcPmm_a_Wait4CluStrtDi) && X_SVmcPmm__HE733_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/UnitDelay1 */ + X_SVmcPmm__HE733_UnitDelay1 = xVcVmcPmm_B_Wait4CluStrtWhlAccHigh; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogO + p2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogO + p */ + xVcVmcPmm_B_Wait4CluStrtAccPedAct = (sVcScIn_X_AccPedalPos > + cVcVmcPmm_X_Wait4CluStrtEna) || ((sVcScIn_X_AccPedalPos >= + cVcVmcPmm_X_Wait4CluStrtDi) && X_SVmcPmm__HE735_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/UnitDelay1 */ + X_SVmcPmm__HE735_UnitDelay1 = xVcVmcPmm_B_Wait4CluStrtAccPedAct; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/RelationalOperator17 + */ + xVcVmcPmm_B_Wait4CluStrtLowVehSpd = sVcScIn_v_VehSpdLgtMax < + cVcVmcPmm_v_Efad12VStartMax; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSwitch1/ + Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSwitch1/Switch: + Omitted comparison with constant. */ + if (cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSw + itch1/Switch */ + SVmcPmm__HE742_Switch = X_SVmcPmm__HE675_UnitDelay1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSw + itch1/Switch */ + SVmcPmm__HE742_Switch = 1; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperato + r7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowe + d/RelationalOperator2 */ + xVcVmcPmm_B_CluStrtTqRsvBlk = (sVcMtcAjc_Tq_EfadReqWhl > sVcDseWt_Tq_EfadMaxElDrvWhl) + && SVmcPmm__HE742_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSwitch/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSwitch/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSw + itch/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAll + owed/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAll + owed/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAll + owed/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAll + owed/LogicalOperator5 */ + SVmcPmm__HE741_Switch = (yVcDeDmm_B_RespStartReq && + cVcVmcPmm_B_UseRespStartReqFromDeDmm) || (yVcVmcEm_B_RespStartReq && + cVcVmcPmm_B_UseRespStartreqFromVmcEm) || (xVcVmcPmm_B_CluStrtTqRsvBlk && + cVcVmcPmm_B_UseTqOffsForCluStrtEval); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalSw + itch/Switch */ + SVmcPmm__HE741_Switch = 1; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperato + r46 */ + xVcVmcPmm_B_CluStrtAllwd = ((!(cVcVmcPmm_B_EfadUseFactory12VStrt)) || + (!(sVcDeDmm_B_DrMdeFactory))) && (!(X_SVmcPmm__HE675_UnitDelay2)) && + (!(X_SVmcPmm__HE675_UnitDelay10)) && (CVmcPmm__HE1_D_IceStatus != 2) && + ((CVmcPmm__HE1_D_IceStatus != cVcVmcPmm_D_IceStsStarting) || (sVcEc_n_Eng <= + cVcVmcPmm_n_CluStrtAllwdEngSpdMax)) && ((!(xVcVmcPmm_B_EngRunReqIsgStop)) || + (!(cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna))) && ((!(cVcVmcPmm_B_CluStrtInDeplBlk)) + || (sVcDtcAtr_v_VehDrDirection >= cVcVmcPmm_v_CluStrtSpdAllw) || + ((!(yVcVmcEm_B_Depletion)) && (!(cVcVmcPmm_B_IgnrDepl))) || + (!(SVmcPmm__HE741_Switch))); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator23 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator34 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator32 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator10 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator9 */ + SVmcPmm__HE673__gicalOperator23 = cVcVmcPmm_B_UseWait4CluStrt && + xVcVmcPmm_B_Wait4CluStrtWhlTqLow && xVcVmcPmm_B_Wait4CluStrtWhlAccHigh && + xVcVmcPmm_B_Wait4CluStrtAccPedAct && xVcVmcPmm_B_Wait4CluStrtLowVehSpd && + xVcVmcPmm_B_EngRunReqTotPre && ((6 != sVcDeDmm_D_DrvMode) && (sVcDeDmm_D_DrvMode != + 11)) && (((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT + == cVc_D_GearLevATReverse)) && yVcGscSgs_B_CluStrtAvl && xVcVmcPmm_B_CluStrtAllwd); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Switch: Omitted comp + arison with constant. */ + if (SVmcPmm__HE673__gicalOperator23) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDel + ay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Si + gnalDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VSta + rt/SignalDelay5/ts */ + X_SVmcPmm__HE737_UnitDelay = X_SVmcPmm__HE737_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Si + gnalDelay5/UnitDelay */ + X_SVmcPmm__HE737_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDe + lay5/UnitDelay */ + xVcVmcPmm_B_Wait4CluStrtTiOut = X_SVmcPmm__HE737_UnitDelay > + cVcVmcPmm_t_Wait4CluStrtTiOut; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator44 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator37 */ + xVcVmcPmm_B_Wait4CluStrt = SVmcPmm__HE673__gicalOperator23 && + (!(xVcVmcPmm_B_Wait4CluStrtTiOut)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator16 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator10 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + xVcVmcPmm_B_IsgStopPwrDwn = cVcVmcPmm_B_UseIsgStopPwrDwn && + (!(SVmcPmm__HE829_Switch)) && (CVmcPmm__HE1_D_IceStatus != 0); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator7 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay5 */ + X_SVmcPmm__HE6_UnitDelay5 = xVcVmcPmm_B_IsgStopStandstill || xVcVmcPmm_B_IsgStopCoast + || xVcVmcPmm_B_IsgStopPwrDwn; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/SR_FF2/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator35 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/SR_FF2/LogOp */ + X_SVmcPmm__HE753_UnitDelay1 = (sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_EfadVehSpdOKIsgBrk) + || ((sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_EfadVehSpdNOKIsgBrk) && + X_SVmcPmm__HE753_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay2/Switch: Omitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SR_FF2/UnitDelay1 */ + if (X_SVmcPmm__HE753_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/ts */ + X_SVmcPmm__HE756_UnitDelay = X_SVmcPmm__HE756_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE756_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/SignalDelay2/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/UnitDelay */ + xVcVmcPmm_B_VehSpdOKIsgBrk = X_SVmcPmm__HE756_UnitDelay > + cVcVmcPmm_t_EfadVehSpdOKIsgBrk; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay3/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator1 */ + if (sVcVdm_Tq_BrkTqAtWhlsReq > cVcVmcPmm_Tq_EfadBrkOKIsgBrk) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/ts */ + X_SVmcPmm__HE757_UnitDelay = X_SVmcPmm__HE757_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE757_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/SignalDelay3/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/UnitDelay */ + xVcVmcPmm_B_BrkOKIsgBrk = X_SVmcPmm__HE757_UnitDelay > cVcVmcPmm_t_EfadBrkOKIsgBrk; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay4/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator9 */ + if (sVcScIn_X_AccPedalPos < cVcVmcPmm_X_EfadAccPedOKIsgBrk) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay4/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/ts */ + X_SVmcPmm__HE758_UnitDelay = X_SVmcPmm__HE758_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/UnitDelay */ + X_SVmcPmm__HE758_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/SignalDelay4/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/UnitDelay */ + xVcVmcPmm_B_AccPedOKIsgBrk = X_SVmcPmm__HE758_UnitDelay > + cVcVmcPmm_t_EfadAccPedOKIsgBrk; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/RelationalOperator13 */ + SVmcPmm__HE639__ionalOperator13 = sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator23 */ + SVmcPmm__HE639__gicalOperator23 = yVcDseGbAvl_B_EfadIsgPathAvoid && + SVmcPmm__HE639__ionalOperator13; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator25 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator33 */ + xVcVmcPmm_B_IsgChrgReqBrk = cVcVmcPmm_B_UseIsgBrk && xVcVmcPmm_B_VehSpdOKIsgBrk && + xVcVmcPmm_B_BrkOKIsgBrk && xVcVmcPmm_B_AccPedOKIsgBrk && yVcVmcEm_B_PrioChrgReq && + ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) || + SVmcPmm__HE639__gicalOperator23); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay9/Switch: Omitted comparison with constant. */ + if (yVcVmcEm_B_ChrgReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay9/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay9/UnitDelay */ + X_SVmcPmm__HE762_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay9/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay9/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay9/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay9/ts */ + X_SVmcPmm__HE762_UnitDelay = X_SVmcPmm__HE762_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay1/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator4 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay1/ts */ + X_SVmcPmm__HE754_UnitDelay = X_SVmcPmm__HE754_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE754_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/LogicalSwitch1/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_TrnModIsgReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/LogicalSwitch1/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator15 */ + xVcVmcPmm_B_TrnModOKIsgReq = sVcDtcAtr_D_TransMode < 3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/LogicalSwitch1/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator2 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem + /Out */ + xVcVmcPmm_B_TrnModOKIsgReq = sVcVmcPmm_D_TransModeReq < 3; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/RelationalOperator */ + SVmcPmm__HE743__ationalOperator = sVcDeDmm_D_DrvMode == 13; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch11/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/RelationalOperat + or1 */ + if (yVcVmcEm_B_PrioChrgReq || (sVcEmiHeat_D_EngUseReq == 2)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch5/Switch: Omitted comp + arison with constant. */ + if (SVmcPmm__HE743__ationalOperator) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch11/Switch */ + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch11/Switch */ + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch4/Switch: Omitted comp + arison with constant. */ + if (SVmcPmm__HE743__ationalOperator) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch11/Switch */ + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch11/Switch */ + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKIsgDrv; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch10/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/RelationalOperat + or17 */ + if (yVcVmcEm_B_PrioChrgReq || (sVcEmiHeat_D_EngUseReq == 2)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch3/Switch: Omitted comp + arison with constant. */ + if (SVmcPmm__HE743__ationalOperator) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch10/Switch */ + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch10/Switch */ + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch/Switch: Omitted compa + rison with constant. */ + if (SVmcPmm__HE743__ationalOperator) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch10/Switch */ + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch10/Switch */ + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKIsgDrv; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3/UnitDelay + 1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/RelationalOperat + or16 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3/LogOp */ + X_SVmcPmm__HE771_UnitDelay1 = (sVcScIn_v_VehSpdLgt < SVmcPmm__HE766_Switch) || + ((sVcScIn_v_VehSpdLgt <= SVmcPmm__HE765_Switch) && X_SVmcPmm__HE771_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay8/Switch: Omitted comparison w + ith constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3/UnitDelay + 1 */ + if (X_SVmcPmm__HE771_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay8/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay8/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDela + y8/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/Signa + lDelay8/ts */ + X_SVmcPmm__HE773_UnitDelay = X_SVmcPmm__HE773_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay8/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDela + y8/UnitDelay */ + X_SVmcPmm__HE773_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay4/Switch: Omitted comparison w + ith constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_FF3/UnitDelay + 1 */ + if (X_SVmcPmm__HE771_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay4/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDela + y4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/Signa + lDelay4/ts */ + X_SVmcPmm__HE772_UnitDelay = X_SVmcPmm__HE772_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDelay4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDela + y4/UnitDelay */ + X_SVmcPmm__HE772_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch: Omitted comparison + with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/RelationalOperat + or2 */ + if (yVcVmcEm_B_PrioChrgReq || (sVcEmiHeat_D_EngUseReq == 2)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDela + y8/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SignalDela + y8/UnitDelay */ + xVcVmcPmm_B_VehSpdOKIsgDrv = X_SVmcPmm__HE773_UnitDelay > + cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch2/Switch: Omitted comp + arison with constant. */ + if (X_SVmcPmm__HE743_UnitDelay7) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/SR_F + F3/UnitDelay1 */ + xVcVmcPmm_B_VehSpdOKIsgDrv = X_SVmcPmm__HE771_UnitDelay1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalS + witch1/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/Sign + alDelay4/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/Sign + alDelay4/UnitDelay */ + xVcVmcPmm_B_VehSpdOKIsgDrv = X_SVmcPmm__HE772_UnitDelay > + cVcVmcPmm_t_VehSpdOKIsgDrv; + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator6 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay1/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator24 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay9/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay9/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay1/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator32 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator33 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator34 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator31 */ + xVcVmcPmm_B_IsgChrgReqDrv = (!(SVmcPmm__HE639__gicalOperator23)) && + SVmcPmm__HE639__ionalOperator13 && ((2 == sVcEmiHeat_D_EngUseReq) || + (X_SVmcPmm__HE762_UnitDelay <= cVcVmcPmm_t_ChrgReqDly)) && + (X_SVmcPmm__HE754_UnitDelay > cVcVmcPmm_t_EfadIceStsDlyIsgDrv) && + xVcVmcPmm_B_TrnModOKIsgReq && ((2 == sVcEmiHeat_D_EngUseReq) || + yVcVmcEm_B_PrioChrgReq || ((sVcDeDmm_D_DrvMode != 11) && ((!(yVcVmcEm_B_Charge)) || + (!(cVcVmcPmm_B_UseChargeInIsgReq))))) && xVcVmcPmm_B_VehSpdOKIsgDrv; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/RelationalOperator18 */ + SVmcPmm__HE639__ionalOperator18 = sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/SignalDelay10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/SignalDelay10/Switch: Omitted comparison with constant. */ + if (SVmcPmm__HE639__ionalOperator18) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay10/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay10/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay10/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay10/ts */ + X_SVmcPmm__HE755_UnitDelay = X_SVmcPmm__HE755_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/SignalDelay10/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay10/UnitDelay */ + X_SVmcPmm__HE755_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124212_IsgReq/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124212_IsgReq/LogicalSwitch8/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator20 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator21 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if ((X_SVmcPmm__HE639_UnitDelay4 == 2) && (CVmcPmm__HE1_D_IceStatus == 2)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/LogicalSwitch8/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay10/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay10/UnitDelay */ + SVmcPmm__HE747_Switch = X_SVmcPmm__HE755_UnitDelay > cVcVmcPmm_t_GearLevNDly; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124212_IsgReq/LogicalSwitch8/Switch */ + SVmcPmm__HE747_Switch = SVmcPmm__HE639__ionalOperator18; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator14 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator22 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/RelationalOperator19 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator19 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay5 */ + xVcVmcPmm_B_IsgChrgReq = ((CVmcPmm__HE1_D_IceStatus == 2) || + (CVmcPmm__HE1_D_IceStatus == 3)) && (xVcVmcPmm_B_IsgChrgReqBrk || + xVcVmcPmm_B_IsgChrgReqDrv || X_SVmcPmm__HE6_UnitDelay5 || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATPark) || SVmcPmm__HE747_Switch); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or11 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator6 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Ou + t */ + xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct = (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive) && (sVcDseGb_D_EfadPathAct == 1) && (sVcVmcPmm_D_TransModeReq + == 1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch2 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch2/Switch: + Omitted comparison with constant. */ + if (cVcVmcPmm_B_IsgStrtInDUseEfadPathAct) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch2/Switch */ + SVmcPmm__HE721_Switch = xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch2/Switch */ + SVmcPmm__HE721_Switch = xVcVmcPmm_B_EngRunReqIsgStop; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch1 + 9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch19/Switch + : Omitted comparison with constant. */ + if (X_SVmcPmm__HE672_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch19/Switch */ + SVmcPmm__HE720_Switch = cVcVmcPmm_Tq_EfadIsgStrtEnaFlt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch19/Switch */ + SVmcPmm__HE720_Switch = cVcVmcPmm_Tq_EfadIsgStrtEna; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch1 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch1/Switch: + Omitted comparison with constant. */ + if (X_SVmcPmm__HE672_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch1/Switch */ + SVmcPmm__HE719_Switch = cVcVmcPmm_Tq_EfadIsgStrtDiFlt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch1/Switch */ + SVmcPmm__HE719_Switch = cVcVmcPmm_Tq_EfadIsgStrtDi; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF10/LogOp + 3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SR_FF10/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + SR_FF10/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + SR_FF10/LogOp */ + X_SVmcPmm__HE723_UnitDelay1 = (sVcVmcWtd_Tq_FrntReqWhl < SVmcPmm__HE720_Switch) || + ((sVcVmcWtd_Tq_FrntReqWhl <= SVmcPmm__HE719_Switch) && X_SVmcPmm__HE723_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1/Switch: O + mitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SR_FF10/UnitDelay1 */ + if (X_SVmcPmm__HE723_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDe + lay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverD + R/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgSta + rtGearLeverDR/SignalDelay1/ts */ + X_SVmcPmm__HE725_UnitDelay = X_SVmcPmm__HE725_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDe + lay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE725_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDela + y1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SignalDelay1/UnitDelay */ + xVcVmcPmm_B_IsgStrtWhlTrqOK = X_SVmcPmm__HE725_UnitDelay > + cVcVmcPmm_t_IsgStrtWhlTrqOK; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or10 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator27 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator28 */ + SVmcPmm__HE672__gicalOperator10 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay2/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay2/Switch: O + mitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator1 */ + if (sVcDtcAtr_v_VehDrDirection < cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDe + lay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverD + R/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgSta + rtGearLeverDR/SignalDelay2/ts */ + X_SVmcPmm__HE726_UnitDelay = X_SVmcPmm__HE726_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDe + lay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE726_UnitDelay = 0.F; + } + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242 + _Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_ + BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_r */ + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_Z_BrkRoadIncline_r[0]), 8, + sVcVdm_Tq_BrkTqAtWhlsReq, SVmcPmm__HE730__rkRoadIncline_r); + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12 + 421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadI + ncline/FirstOrderFilter1/Sum3 + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGear + LeverDR/12421112_BrkRoadIncline/FirstOrderFilter1/ts */ + SVmcPmm__HE728_Sum3 = ts_VcVmcPmm__HEP7 + cVcVmcPmm_tc_LatAccFilt; + if (SVmcPmm__HE728_Sum3 > 1e-06F) { + SVmcPmm__HE728_MinMax = SVmcPmm__HE728_Sum3; + } + else { + SVmcPmm__HE728_MinMax = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkR + oadIncline/FirstOrderFilter1/Prod1 */ + if (SVmcPmm__HE728_MinMax != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgSta + rtGearLeverDR/12421112_BrkRoadIncline/FirstOrderFilter1/ts */ + SVmcPmm__HE728_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE728_MinMax; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgSta + rtGearLeverDR/12421112_BrkRoadIncline/FirstOrderFilter1/ts */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE728_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE728_Prod1 = 3.402823466e+38F; + } + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12 + 421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadI + ncline/FirstOrderFilter1/Sum2 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/12421112_BrkRoadIncline/FirstOrderFilter1/Del1 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + 12421112_BrkRoadIncline/FirstOrderFilter1/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/1242 + 1112_BrkRoadIncline/FirstOrderFilter1/Sum1 */ + X_SVmcPmm__HE728_Del1 = X_SVmcPmm__HE728_Del1 + ((sVcVdm_a_ALat - + X_SVmcPmm__HE728_Del1) * SVmcPmm__HE728_Prod1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRo + adIncline/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadInclin + e/LogicalSwitch5/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseAwdRoadGrad) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112 + _BrkRoadIncline/LogicalSwitch5/Switch */ + rVcVmcPmm_Z_RoadGradient = sVcVmcAwd_X_RoadGrad; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112 + _BrkRoadIncline/LogicalSwitch5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/12421112_BrkRoadIncline/FirstOrderFilter1/Del1 */ + rVcVmcPmm_Z_RoadGradient = X_SVmcPmm__HE728_Del1; + } + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242 + _Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_ + BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_c */ + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_Z_BrkRoadIncline_c[0]), 8, + rVcVmcPmm_Z_RoadGradient, SVmcPmm__HE730__rkRoadIncline_c); + + /* Interpolation: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/12 + 42_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/1242111 + 2_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline */ + rVcVmcPmm_Z_BrkRoadIncline = + mVcVmcPmm_Z_BrkRoadIncline[SVmcPmm__HE730__rkRoadIncline_r[0]][SVmcPmm__HE730__rkRoadIncline_c[0]]; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_B + rkRoadIncline/RelationalOperator4 */ + xVcVmcPmm_B_BrkRoadIncline = rVcVmcPmm_Z_BrkRoadIncline == 1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbC + oding/B_TqRsvActAT_1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/12421111_EpbCoding/Drive8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/12421111_EpbCoding/Drive7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/12421111_EpbCoding/Drive1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/12421111_EpbCoding/Drive */ + xVcVmcPmm_B_EpbActive = (sVcVdm_D_EpbSts == cVcVmcPmm_D_EpbCoding1) || + (sVcVdm_D_EpbSts == cVcVmcPmm_D_EpbCoding2) || (sVcVdm_D_EpbSts == + cVcVmcPmm_D_EpbCoding3) || (sVcVdm_D_EpbSts == cVcVmcPmm_D_EpbCoding4); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay3/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay3/Switch: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator5 */ + if (xVcVmcPmm_B_BrkRoadIncline || xVcVmcPmm_B_EpbActive) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDe + lay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverD + R/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgSta + rtGearLeverDR/SignalDelay3/ts */ + X_SVmcPmm__HE727_UnitDelay = X_SVmcPmm__HE727_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDe + lay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGea + rLeverDR/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE727_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator4 */ + xVcVmcPmm_B_NonSysStrt = (!(yVcDeDmm_B_RespStartReq)) && (sVcDeDmm_D_EngRunReqDriver + == 2); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch5 + /Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalSwitch5/Switch: + Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseIsgStrtAtStndStill) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch5/Switch */ + SVmcPmm__HE722_Switch = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalS + witch5/Switch */ + SVmcPmm__HE722_Switch = xVcVmcPmm_B_NonSysStrt; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator6 */ + SVmcPmm__HE672_LogicalOperator7 = X_SVmcPmm__HE672_UnitDelay2 || + (!(SVmcPmm__HE828_Switch)) || (SVmcPmm__HE848_Switch < + cVcVmcPmm_Te_Efad12VStrtEngClntMin); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or59 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SignalDelay3/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SignalDelay2/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SignalDelay2/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/SignalDelay3/UnitDelay */ + xVcVmcPmm_B_IsgStrtGearLvrDRBraking = xVcVmcPmm_B_IsgStrtWhlTrqOK && + SVmcPmm__HE672__gicalOperator10 && (((X_SVmcPmm__HE726_UnitDelay > + cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR) && (X_SVmcPmm__HE727_UnitDelay > + cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR) && SVmcPmm__HE722_Switch) || + SVmcPmm__HE672_LogicalOperator7); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or8 */ + xVcVmcPmm_B_IsgStrtGearLvrDR = SVmcPmm__HE721_Switch || + xVcVmcPmm_B_IsgStrtGearLvrDRBraking; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/Switc + h + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/Switch: Omitt + ed comparison with constant. */ + if (SVmcPmm__HE829_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5 + /Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Si + gnalDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAll + owed/SignalDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgSta + rtAllowed/SignalDelay5/ts */ + X_SVmcPmm__HE739_UnitDelay = X_SVmcPmm__HE739_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5 + /Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAll + owed/SignalDelay5/UnitDelay */ + X_SVmcPmm__HE739_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/R + el + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/S + ignalDelay5/UnitDelay */ + xVcVmcPmm_B_DrvCycActvFirstStrtTiOut = X_SVmcPmm__HE739_UnitDelay > + cVcVmcPmm_t_DrvCycActvFirstStrt; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator44 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Logi + calOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/R + elationalOperator3 */ + xVcVmcPmm_B_DrvCycActvFirstStrt = (sVcTcm_Te_TrsmOilT < cVcVmcPmm_Te_TrnOil) && + SVmcPmm__HE829_Switch && (!(xVcVmcPmm_B_DrvCycActvFirstStrtTiOut)); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/Switc + h + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/Switch: Omitt + ed comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + if (X_SVmcPmm__HE6_UnitDelay14) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1 + /Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Si + gnalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAll + owed/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgSta + rtAllowed/SignalDelay1/ts */ + X_SVmcPmm__HE738_UnitDelay = X_SVmcPmm__HE738_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1 + /Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAll + owed/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE738_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/R + el + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/S + ignalDelay1/UnitDelay */ + xVcVmcPmm_B_EngOnReqTiOut = X_SVmcPmm__HE738_UnitDelay > cVcVmcPmm_t_EngOnReqDly; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Logi + calOperator7 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + xVcVmcPmm_B_EngOnReqDly = X_SVmcPmm__HE6_UnitDelay14 && + (!(xVcVmcPmm_B_EngOnReqTiOut)) && cVcVmcPmm_B_UseEngOnReqDly; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator3 */ + xVcVmcPmm_B_Efad2IceUnavl = yVcDsePcr_B_IsgStartDisableRq || yVcDsePcr_B_IsgDisableRq + || yVcDseGb_B_EfadIsgPathNotAvl; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator4 */ + xVcVmcPmm_B_Efad2WhlUnavl = yVcDseGb_B_EfadWhlPathNotAvl || + yVcDsePcr_B_EfadDisableRq; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator45 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator36 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator8 */ + xVcVmcPmm_B_EfadUnavl = (xVcVmcPmm_B_Efad2IceUnavl && xVcVmcPmm_B_Efad2WhlUnavl) || + ((!(yVcDepTre_B_ISGTqAllw)) && (sVcDtcAtr_D_GearLevAT != cVc_D_GearLevATReverse)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator55 + */ + xVcVmcPmm_B_IsgStrtAllwd = ((!(sVcDeDmm_B_DrMdeFactory)) || + (!(cVcVmcPmm_B_EfadUseFactory12VStrt))) && (sVcCidd_D_IsgModSts != 7) && + (CVmcPmm__HE1_D_IceStatus != 2) && ((CVmcPmm__HE1_D_IceStatus != + cVcVmcPmm_D_IceStsStarting) || (sVcEc_n_Eng <= cVcVmcPmm_n_IsgStrtAllwdEngSpdMax) || + xVcVmcPmm_B_DrvCycActvFirstStrt || xVcVmcPmm_B_EngOnReqDly) && + (!(X_SVmcPmm__HE674_UnitDelay7)) && (!(yVcDsePcr_B_IsgStartDisableRq)) && + (((!(xVcVmcPmm_B_Efad2IceUnavl)) && (!(xVcVmcPmm_B_EfadUnavl))) || + xVcVmcPmm_B_DrvCycActvFirstStrt); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator27 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator26 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator7 */ + xVcVmcPmm_B_IsgStrtPsbl = cVcVmcPmm_B_EfadUseIsgStrt && (xVcVmcPmm_B_IsgStrtGearLvrDR + || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATNeutral)) && xVcVmcPmm_B_IsgStrtAllwd; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator23 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp */ + xVcVmcPmm_B_CluStrtVehSpdOK = (sVcDtcAtr_v_VehDrDirection > + cVcVmcPmm_v_EfadCluStrtEna) || ((sVcDtcAtr_v_VehDrDirection >= + cVcVmcPmm_v_EfadCluStrtDi) && X_SVmcPmm__HE707_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/UnitDelay1 */ + X_SVmcPmm__HE707_UnitDelay1 = xVcVmcPmm_B_CluStrtVehSpdOK; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator54 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator25 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator2 */ + xVcVmcPmm_B_CluStrtPsbl = cVcVmcPmm_B_EfadUseCluStrt && xVcVmcPmm_B_CluStrtVehSpdOK + && ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATReverse)) && yVcGscSgs_B_CluStrtAvl && xVcVmcPmm_B_CluStrtAllwd; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator18 */ + SVmcPmm__HE638_LogicalOperator1 = xVcVmcPmm_B_CluStrtPsbl && + ((!(X_SVmcPmm__HE638_UnitDelay3)) && (!(X_SVmcPmm__HE638_UnitDelay1))) && + X_SVmcPmm__HE6_UnitDelay14; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch4/Switch: Omitted comparison with con + stant. */ + if (cVcVmcPmm_B_CluStrtReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch4/Switch */ + SVmcPmm__HE695_Switch = cVcVmcPmm_B_CluStrtReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch4/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise6/Logica + lOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise6/Logica + lOperator1 */ + SVmcPmm__HE695_Switch = SVmcPmm__HE638_LogicalOperator1 && + (!(X_SVmcPmm__HE686_UnitDelay1)); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise6/UnitDelay1 */ + X_SVmcPmm__HE686_UnitDelay1 = SVmcPmm__HE638_LogicalOperator1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF3/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE703_UnitDelay1 = SVmcPmm__HE695_Switch || (X_SVmcPmm__HE6_UnitDelay14 && + ((CVmcPmm__HE1_D_IceStatus != 2) || yVcDtcSt_B_CluStrtAct) && + (yVcDtcSt_B_CluStrtAct || (!(X_SVmcPmm__HE678_Delay))) && + (!(X_SVmcPmm__HE638_UnitDelay4)) && SVmcPmm__HE829_Switch && + X_SVmcPmm__HE703_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect2/Delay */ + X_SVmcPmm__HE678_Delay = yVcDtcSt_B_CluStrtAct; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator16 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator12 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 */ + SVmcPmm__HE638__gicalOperator16 = xVcVmcPmm_B_IsgStrtPsbl && + ((!(X_SVmcPmm__HE703_UnitDelay1)) && (!(X_SVmcPmm__HE638_UnitDelay7))) && + X_SVmcPmm__HE6_UnitDelay14; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperat + or9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator12 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + EdgeDetect1/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + EdgeDetect1/Logic */ + xVcVmcPmm_B_IsgStrtGearLvrDRAbort = cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna && + SVmcPmm__HE672__gicalOperator10 && ((!(xVcVmcPmm_B_IsgStrtGearLvrDRBraking)) && + X_SVmcPmm__HE718_Delay) && (!(SVmcPmm__HE721_Switch)); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/EdgeDetect + 1/Delay */ + X_SVmcPmm__HE718_Delay = xVcVmcPmm_B_IsgStrtGearLvrDRBraking; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise8/LogicalOpera + tor + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise8/LogicalOpera + tor1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF2/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE702_UnitDelay1 = (SVmcPmm__HE638__gicalOperator16 && + (!(X_SVmcPmm__HE687_UnitDelay1))) || (X_SVmcPmm__HE6_UnitDelay14 && + (yVcDtcSt_B_StrtAct || (!(X_SVmcPmm__HE679_Delay))) && + (!(X_SVmcPmm__HE638_UnitDelay9)) && SVmcPmm__HE829_Switch && + ((!(xVcVmcPmm_B_IsgStrtGearLvrDRAbort)) || X_SVmcPmm__HE638_UnitDelay8) && + X_SVmcPmm__HE702_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect3/Delay */ + X_SVmcPmm__HE679_Delay = yVcDtcSt_B_StrtAct; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise8/UnitDelay1 */ + X_SVmcPmm__HE687_UnitDelay1 = SVmcPmm__HE638__gicalOperator16; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch5/Switch: Omitted comparison with con + stant. */ + if (cVcVmcPmm_B_IsgStrtPahReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + X_SVmcPmm__HE6_UnitDelay6 = cVcVmcPmm_B_IsgStrtPahReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF2/UnitDelay1 + */ + X_SVmcPmm__HE6_UnitDelay6 = X_SVmcPmm__HE702_UnitDelay1; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + X_SVmcPmm__HE638_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay6; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124212_IsgReq/LogicalOperator49 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + xVcVmcPmm_B_IsgReq = xVcVmcPmm_B_IsgChrgReq || X_SVmcPmm__HE6_UnitDelay6; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay8/Switch: Omitted comparison with constant. */ + if (SVmcPmm__HE829_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay8/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay8/UnitDelay */ + X_SVmcPmm__HE670_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay8/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay8/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay8/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay8/ts */ + X_SVmcPmm__HE670_UnitDelay = X_SVmcPmm__HE670_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay11/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator5 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus != 0) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay11/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay11/UnitDelay */ + X_SVmcPmm__HE663_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay11/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay11/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay11/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay11/ts */ + X_SVmcPmm__HE663_UnitDelay = X_SVmcPmm__HE663_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator54 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator38 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator41 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator12 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator43 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay11/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay8/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay8/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay11/UnitDelay */ + xVcVmcPmm_B_Efad2IcePahReq = (xVcVmcPmm_B_IsgReq || xVcVmcPmm_B_Efad2WhlUnavl) && + (SVmcPmm__HE829_Switch || ((X_SVmcPmm__HE670_UnitDelay <= + cVcVmcPmm_t_IsgDrCycStopMax) && (X_SVmcPmm__HE663_UnitDelay <= + cVcVmcPmm_t_IsgDrCycStop))) && ((!(xVcVmcPmm_B_EfadUnavl)) && + (!(xVcVmcPmm_B_Efad2IceUnavl))); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay2/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_Efad2IcePahReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay2/ts */ + X_SVmcPmm__HE664_UnitDelay = X_SVmcPmm__HE664_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE664_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay9/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator15 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator25 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator19 */ + if ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATReverse)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay9/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay9/UnitDelay */ + X_SVmcPmm__HE671_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay9/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay9/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay9/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay9/ts */ + X_SVmcPmm__HE671_UnitDelay = X_SVmcPmm__HE671_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator44 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator47 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay9/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator48 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay9/UnitDelay */ + xVcVmcPmm_B_Efad2WhlPahReq = (!(xVcVmcPmm_B_Efad2IcePahReq)) && + (X_SVmcPmm__HE671_UnitDelay <= cVcVmcPmm_t_GearLevDRDly) && + yVcPpmPsm_B_DriveCycleActive && yVcPpmPsm_B_PropulsionAllowed && + ((!(xVcVmcPmm_B_EfadUnavl)) && (!(xVcVmcPmm_B_Efad2WhlUnavl))); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay5/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_Efad2WhlPahReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay5/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay5/ts */ + X_SVmcPmm__HE667_UnitDelay = X_SVmcPmm__HE667_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay5/UnitDelay */ + X_SVmcPmm__HE667_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay1/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator55 */ + if (!(SVmcPmm__HE829_Switch)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay1/ts */ + X_SVmcPmm__HE661_UnitDelay = X_SVmcPmm__HE661_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE661_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/SignalDelay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay1/UnitDelay */ + xVcVmcPmm_B_DrvCycTiOut = X_SVmcPmm__HE661_UnitDelay > cVcVmcPmm_t_EfadDrvCycTiOut; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator57 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator53 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator24 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator55 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator70 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator69 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator68 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator49 */ + xVcVmcPmm_B_Efad2IceReqRst = xVcVmcPmm_B_EfadUnavl || ((xVcVmcPmm_B_Efad2IceUnavl || + ((!(xVcVmcPmm_B_Efad2IcePahReq)) && (!(xVcVmcPmm_B_Efad2WhlPahReq))) || + (!(SVmcPmm__HE829_Switch))) && (xVcVmcPmm_B_DrvCycTiOut || + (yVcVmcWtc_B_EfadPathDisabled && yVcDtcTc_B_IsgPathDisabled))); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/SR_FF7/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF7/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator21 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay2/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay2/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF7/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay5/UnitDelay */ + xVcVmcPmm_B_Efad2IceReq = (xVcVmcPmm_B_Efad2IcePahReq && ((X_SVmcPmm__HE664_UnitDelay + > cVcVmcPmm_t_EfadPahDiTiOut) || yVcVmcWtc_B_EfadPathDisabled)) || + (((!(xVcVmcPmm_B_Efad2WhlPahReq)) || ((X_SVmcPmm__HE667_UnitDelay <= + cVcVmcPmm_t_IsgPahDiTiOut) && (!(yVcDtcTc_B_IsgPathDisabled)))) && + (!(xVcVmcPmm_B_Efad2IceReqRst)) && X_SVmcPmm__HE660_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/SR_FF7/UnitDelay1 */ + X_SVmcPmm__HE660_UnitDelay1 = xVcVmcPmm_B_Efad2IceReq; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay4/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator23 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator6 */ + if ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATPark)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay4/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay4/ts */ + X_SVmcPmm__HE666_UnitDelay = X_SVmcPmm__HE666_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay4/UnitDelay */ + X_SVmcPmm__HE666_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/SignalDelay4/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay4/UnitDelay */ + xVcVmcPmm_B_GearLvrNotDRDetn = X_SVmcPmm__HE666_UnitDelay > + cVcVmcPmm_t_EfadGearLvrPNDetn; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator59 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator42 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator60 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator37 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator58 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator66 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator73 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator72 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator52 */ + xVcVmcPmm_B_EfadDisengdReq = (((xVcVmcPmm_B_GearLvrNotDRDetn && + ((!(yVcScDep_B_DrvrPrsnt)) || (sVcScIn_v_VehSpdLgt > + cVcVmcPmm_v_EfadGearLvrPNDiseng) || cVcVmcPmm_B_EfadGearLvrPNDisengEna)) || + (sVcDtcAtr_D_GearLevAT == 7) || (!(yVcPpmPsm_B_DriveCycleActive))) && + ((yVcDtcTc_B_IsgPathDisabled && yVcVmcWtc_B_EfadPathDisabled) || + xVcVmcPmm_B_DrvCycTiOut)) || (!(yVcPpmPsm_B_PropulsionAllowed)) || + xVcVmcPmm_B_EfadUnavl; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/LogicalSwitch21/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/LogicalSwitch21/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_D_EfadPathReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch21/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + X_SVmcPmm__HE639_UnitDelay4 = cVcVmcPmm_D_EfadPathReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/LogicalSwitch2/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_Efad2IceReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/LogicalSwitch21/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + X_SVmcPmm__HE639_UnitDelay4 = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1 + 2421_Efad/LogicalSwitch1/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_EfadDisengdReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/ + 1242_Efad/12421_Efad/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/LogicalSwitch21/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hyb + rid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + X_SVmcPmm__HE639_UnitDelay4 = 5; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/ + 1242_Efad/12421_Efad/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/LogicalSwitch21/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hyb + rid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + X_SVmcPmm__HE639_UnitDelay4 = 2; + } + } + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator31 + # combined # Reference of merge block: Merge1 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge1 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal7/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/RenameSignal7/LogicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator63 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay5 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + SVmcPmm__HE173_Merge1 = (SVmcPmm__HE829_Switch || X_SVmcPmm__HE6_UnitDelay5) && + (X_SVmcPmm__HE639_UnitDelay4 == 1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay2/Switch: Omitted comparison with const + ant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator14 */ + if (sVcDseEm_rt_IsgMaxTorqueLoss < cVcVmcPmm_rt_EfadStrtAllow) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/UnitDe + lay */ + X_SVmcPmm__HE710_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/t + s */ + X_SVmcPmm__HE710_UnitDelay = X_SVmcPmm__HE710_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/UnitDelay */ + xVcVmcPmm_B_ElecMotLowAvailTrq = X_SVmcPmm__HE710_UnitDelay <= + cVcVmcPmm_t_EfadRunReqDelay; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch3/Switch: Omitted comparison with con + stant. */ + if (xVcVmcPmm_B_ElecMotLowAvailTrq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch3/Switch + # combined # Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/Logica + lSwitch3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay3 */ + X_SVmcPmm__HE6_UnitDelay3 = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch3/Switch + # combined # Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/Logica + lSwitch3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay3 */ + X_SVmcPmm__HE6_UnitDelay3 = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay4/Switch: Omitted comparison with const + ant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + if (X_SVmcPmm__HE6_UnitDelay14) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay4/UnitDe + lay */ + X_SVmcPmm__HE712_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay4/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay4/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay4/t + s */ + X_SVmcPmm__HE712_UnitDelay = X_SVmcPmm__HE712_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay5/Switch: Omitted comparison with const + ant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator4 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay5/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay5/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay5/t + s */ + X_SVmcPmm__HE713_UnitDelay = X_SVmcPmm__HE713_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay5/UnitDe + lay */ + X_SVmcPmm__HE713_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator14 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay5/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator21 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay5/UnitDelay */ + SVmcPmm__HE638__gicalOperator14 = (!(SVmcPmm__HE829_Switch)) || + (X_SVmcPmm__HE713_UnitDelay > cVcVmcPmm_t_IceRunng12VStrt); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242112_12VStart/SignalDelay1/Switch: Omitted comp + arison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/EdgeDetect2 + /Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/EdgeDetect2 + /Logic */ + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE731_Delay))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Si + gnalDelay1/UnitDelay */ + X_SVmcPmm__HE736_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDel + ay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Si + gnalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VSta + rt/SignalDelay1/ts */ + X_SVmcPmm__HE736_UnitDelay = X_SVmcPmm__HE736_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/EdgeDetect2/Delay */ + X_SVmcPmm__HE731_Delay = SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDe + lay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDe + lay1/UnitDelay */ + xVcVmcPmm_B_Dly12VStrtVehPwrUp = cVcVmcPmm_B_UseDly12VStrtVehPwrUp && + (X_SVmcPmm__HE736_UnitDelay <= cVcVmcPmm_t_FirstStrtDlyOff) && + ((!(sVcDeDmm_B_DrMdeFactory)) || (!(cVcVmcPmm_B_EfadUseFactory12VStrt))) && + (sVcPpmPsm_D_EngRunReqPsm == 2); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator14 */ + xVcVmcPmm_B_12VStrtAllwd = (!(xVcVmcPmm_B_Dly12VStrtVehPwrUp)) && + (!(X_SVmcPmm__HE673_UnitDelay15)) && (sVcDseGb_D_EfadPathAct != 1) && + (CVmcPmm__HE1_D_IceStatus != 2) && ((CVmcPmm__HE1_D_IceStatus != + cVcVmcPmm_D_IceStsStarting) || (sVcEc_n_Eng <= cVcVmcPmm_n_12VStrtAllwdEngSpdMax)) + && (!(xVcVmcPmm_B_Wait4CluStrt)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator36 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOper + ator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator23 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Relation + alOperator4 */ + xVcVmcPmm_B_12VStrtPsbl = cVcVmcPmm_B_EfadUse12VStrt && ((sVcScIn_v_VehSpdLgtMax < + cVcVmcPmm_v_Efad12VStartMax) && (sVcScIn_v_VehSpdLgtMax > + cVcVmcPmm_v_Efad12VStartMin)) && (SVmcPmm__HE828_Switch || + cVcVmcPmm_B_Efad12VStrtEnblIngoreDep) && (SVmcPmm__HE848_Switch >= + cVcVmcPmm_Te_Efad12VStrtEngClntMin) && xVcVmcPmm_B_12VStrtAllwd; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/UnitDelay1 + */ + X_SVmcPmm__HE675_UnitDelay1 = xVcVmcPmm_B_12VStrtPsbl; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch9/Switch: Omitted comparison with con + stant. */ + if (cVcVmcPmm_B_12VStrtTrigNewPos) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch9/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE700_Switch = X_SVmcPmm__HE6_UnitDelay14; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise1/Logica + lOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise1/Logica + lOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE700_Switch = X_SVmcPmm__HE6_UnitDelay14 && + (!(X_SVmcPmm__HE681_UnitDelay1)); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise1/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE681_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay14; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator5 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + SVmcPmm__HE638__gicalOperator15 = xVcVmcPmm_B_12VStrtPsbl && + ((!(X_SVmcPmm__HE703_UnitDelay1)) && (!(X_SVmcPmm__HE6_UnitDelay6))) && + SVmcPmm__HE700_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch8/Switch: Omitted comparison with con + stant. */ + if (cVcVmcPmm_B_12VStrtTrigNewPos) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch8/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise5/Logica + lOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise5/Logica + lOperator1 */ + SVmcPmm__HE699_Switch = SVmcPmm__HE638__gicalOperator15 && + (!(X_SVmcPmm__HE685_UnitDelay1)); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch8/Switch */ + SVmcPmm__HE699_Switch = SVmcPmm__HE638__gicalOperator15; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise5/UnitDelay1 */ + X_SVmcPmm__HE685_UnitDelay1 = SVmcPmm__HE638__gicalOperator15; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF1/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF1/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF1/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE701_UnitDelay1 = SVmcPmm__HE699_Switch || (X_SVmcPmm__HE6_UnitDelay14 && + (!(X_SVmcPmm__HE638_UnitDelay11)) && SVmcPmm__HE829_Switch && + (CVmcPmm__HE1_D_IceStatus != 2) && X_SVmcPmm__HE701_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch2/Switch: Omitted comparison with con + stant. */ + if (cVcVmcPmm_B_12VStrtReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 */ + X_SVmcPmm__HE638_UnitDelay3 = cVcVmcPmm_B_12VStrtReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF1/UnitDelay1 + */ + X_SVmcPmm__HE638_UnitDelay3 = X_SVmcPmm__HE701_UnitDelay1; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay7 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 */ + X_SVmcPmm__HE638_UnitDelay7 = X_SVmcPmm__HE638_UnitDelay3; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch16/Switch: Omitted comparison with co + nstant. */ + if (SVmcPmm__HE638__gicalOperator14) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch */ + rVcVmcPmm_D_12VStrtCnt = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/Sum3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise3/Logica + lOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise3/Logica + lOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 */ + rVcVmcPmm_D_12VStrtCnt = (UInt8) (X_SVmcPmm__HE638_UnitDelay12 + ((UInt8) + (X_SVmcPmm__HE638_UnitDelay3 && (!(X_SVmcPmm__HE683_UnitDelay1))))); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise3/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 */ + X_SVmcPmm__HE683_UnitDelay1 = X_SVmcPmm__HE638_UnitDelay3; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay12 */ + X_SVmcPmm__HE638_UnitDelay12 = rVcVmcPmm_D_12VStrtCnt; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator22 */ + SVmcPmm__HE638__ionalOperator22 = rVcVmcPmm_D_12VStrtCnt < + cVcVmcPmm_D_Efad12VStrtMax; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator60 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay4/UnitDelay */ + xVcVmcPmm_B_12VStrtActrRdy = (X_SVmcPmm__HE712_UnitDelay > + cVcVmcPmm_t_12VStrtActrRdyDly) && xVcVmcPmm_B_12VStrtPsbl && + SVmcPmm__HE638__ionalOperator22; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay3/Switch: Omitted comparison with const + ant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + if (X_SVmcPmm__HE6_UnitDelay14) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay3/UnitDe + lay */ + X_SVmcPmm__HE711_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay3/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay3/t + s */ + X_SVmcPmm__HE711_UnitDelay = X_SVmcPmm__HE711_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay/Switch: Omitted comparison with consta + nt. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator16 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay/UnitDel + ay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay/ts + */ + X_SVmcPmm__HE708_UnitDelay = X_SVmcPmm__HE708_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay/UnitDel + ay */ + X_SVmcPmm__HE708_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator4 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay/UnitDelay */ + SVmcPmm__HE638_LogicalOperator2 = (!(SVmcPmm__HE829_Switch)) || + (X_SVmcPmm__HE708_UnitDelay > cVcVmcPmm_t_IceRunngIsgStrt); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch7/Switch: Omitted comparison with con + stant. */ + if (SVmcPmm__HE638_LogicalOperator2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch */ + rVcVmcPmm_D_IsgStrtCnt = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/Sum2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise4/Logica + lOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise4/Logica + lOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + rVcVmcPmm_D_IsgStrtCnt = (UInt8) (X_SVmcPmm__HE638_UnitDelay6 + ((UInt8) + (X_SVmcPmm__HE6_UnitDelay6 && (!(X_SVmcPmm__HE684_UnitDelay1))))); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise4/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + X_SVmcPmm__HE684_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay6; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay6 */ + X_SVmcPmm__HE638_UnitDelay6 = rVcVmcPmm_D_IsgStrtCnt; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator6 */ + SVmcPmm__HE638__tionalOperator6 = rVcVmcPmm_D_IsgStrtCnt < + cVcVmcPmm_D_EfadIsgStrtMax; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator35 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator39 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay3/UnitDelay */ + xVcVmcPmm_B_IsgStrtActrRdy = (X_SVmcPmm__HE711_UnitDelay > + cVcVmcPmm_t_IsgStrtActrRdyDly) && xVcVmcPmm_B_IsgStrtPsbl && + SVmcPmm__HE638__tionalOperator6; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay1/Switch: Omitted comparison with const + ant. */ + if (X_SVmcPmm__HE638_UnitDelay2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay1/UnitDe + lay */ + X_SVmcPmm__HE709_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay1/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay1/t + s */ + X_SVmcPmm__HE709_UnitDelay = X_SVmcPmm__HE709_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay2 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE638_UnitDelay2 = X_SVmcPmm__HE6_UnitDelay14; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/SignalDelay6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/SignalDelay6/Switch: Omitted comparison with const + ant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator5 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay6/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay6/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay6/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay6/t + s */ + X_SVmcPmm__HE714_UnitDelay = X_SVmcPmm__HE714_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/SignalDelay6/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay6/UnitDe + lay */ + X_SVmcPmm__HE714_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator17 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay6/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator45 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay6/UnitDelay */ + SVmcPmm__HE638__gicalOperator17 = (!(SVmcPmm__HE829_Switch)) || + (X_SVmcPmm__HE714_UnitDelay > cVcVmcPmm_t_IceRunngCluStrt); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch6/Switch: Omitted comparison with con + stant. */ + if (SVmcPmm__HE638__gicalOperator17) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch */ + rVcVmcPmm_D_CluStrtCnt = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/Sum1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise2/Logica + lOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise2/Logica + lOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 + */ + rVcVmcPmm_D_CluStrtCnt = (UInt8) (X_SVmcPmm__HE638_UnitDelay5 + ((UInt8) + (X_SVmcPmm__HE703_UnitDelay1 && (!(X_SVmcPmm__HE682_UnitDelay1))))); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetectRise2/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 */ + X_SVmcPmm__HE682_UnitDelay1 = X_SVmcPmm__HE703_UnitDelay1; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay5 */ + X_SVmcPmm__HE638_UnitDelay5 = rVcVmcPmm_D_CluStrtCnt; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator13 */ + SVmcPmm__HE638__ionalOperator13 = rVcVmcPmm_D_CluStrtCnt < + cVcVmcPmm_D_EfadCluStrtMax; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator20 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator38 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay1/UnitDelay */ + xVcVmcPmm_B_CluStrtActrRdy = (X_SVmcPmm__HE709_UnitDelay > + cVcVmcPmm_t_CluStrtActrRdyDly) && xVcVmcPmm_B_CluStrtPsbl && + SVmcPmm__HE638__ionalOperator13; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator47 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator62 */ + xVcVmcPmm_B_StrtActrsRdy = (!(SVmcPmm__HE829_Switch)) || xVcVmcPmm_B_12VStrtActrRdy + || xVcVmcPmm_B_IsgStrtActrRdy || xVcVmcPmm_B_CluStrtActrRdy; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/LogicalSwitch8/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_IsgPathEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch8/Switch + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 */ + X_SVmcPmm__HE6_UnitDelay13 = cVcVmcPmm_B_IsgPathEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch8/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator18 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/RelationalOperator20 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/RelationalOperator30 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/RelationalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator61 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator32 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + X_SVmcPmm__HE6_UnitDelay13 = xVcVmcPmm_B_Efad2IcePahReq && + ((!(yVcGscAsr_B_EfadNoTqReq)) && (!(yVcDsePcr_B_IsgNoTqRq))) && + (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdIsg) && + (X_SVmcPmm__HE639_UnitDelay4 == 1) && (sVcDseGb_D_EfadPathAct == 1) && + (sVcCidd_D_IsgModSts == 2); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/UnitDelay7 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 */ + X_SVmcPmm__HE743_UnitDelay7 = X_SVmcPmm__HE6_UnitDelay13; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/UnitDelay2 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 */ + X_SVmcPmm__HE675_UnitDelay2 = X_SVmcPmm__HE6_UnitDelay13; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator50 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator16 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator17 */ + SVmcPmm__HE637__gicalOperator50 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay10/Switch: Omitted comparison with constant. */ + if (SVmcPmm__HE637__gicalOperator50) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay10/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay10/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay10/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay10/ts */ + X_SVmcPmm__HE662_UnitDelay = X_SVmcPmm__HE662_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay10/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay10/UnitDelay */ + X_SVmcPmm__HE662_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator40 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator51 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay10/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay10/UnitDelay */ + SVmcPmm__HE637__gicalOperator40 = (yVcVmcWtc_B_EfadPathDisabled || + (X_SVmcPmm__HE662_UnitDelay > cVcVmcPmm_t_EfadPahDiTiOut)) && + SVmcPmm__HE637__gicalOperator50; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/SR_FF3/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF3/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/EdgeDetect3/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/EdgeDetect3/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF3/LogOp */ + xVcVmcPmm_B_GarageShiftEfadPahDiOK = (SVmcPmm__HE637__gicalOperator40 && + (!(X_SVmcPmm__HE644_Delay))) || (SVmcPmm__HE637__gicalOperator50 && + X_SVmcPmm__HE658_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/SR_FF3/UnitDelay1 */ + X_SVmcPmm__HE658_UnitDelay1 = xVcVmcPmm_B_GarageShiftEfadPahDiOK; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/EdgeDetect3/Delay */ + X_SVmcPmm__HE644_Delay = SVmcPmm__HE637__gicalOperator40; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator7 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator71 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator28 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator23 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator62 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator30 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + SVmcPmm__HE637_LogicalOperator7 = xVcVmcPmm_B_Efad2WhlPahReq && + ((!(yVcDsePcr_B_EfadNoTqRq)) && (!(yVcGscAsr_B_EfadNoTqReq))) && + (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdEfad) && + (X_SVmcPmm__HE639_UnitDelay4 == 2) && (sVcDseGb_D_EfadPathAct == 2) && + (sVcCidd_D_IsgModSts == 2) && (yVcDseGbGear_B_ParkLockNotEngd || + cVcVmcPmm_B_EfadPathEnaParkEngd) && xVcVmcPmm_B_GarageShiftEfadPahDiOK; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay6/Switch: Omitted comparison with constant. */ + if (yVcGscGar_B_EfadShiftInProgress) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay6/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay6/UnitDelay */ + X_SVmcPmm__HE668_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay6/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay6/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay6/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay6/ts */ + X_SVmcPmm__HE668_UnitDelay = X_SVmcPmm__HE668_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay3/Switch: Omitted comparison with constant. */ + if (yVcGscGar_B_EfadShiftInProgress) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay3/ts */ + X_SVmcPmm__HE665_UnitDelay = X_SVmcPmm__HE665_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE665_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/SR_FF1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator20 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/EdgeDetect1/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/EdgeDetect1/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF1/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay6/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay3/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + xVcVmcPmm_B_EvenGearShiftAct = ((!(SVmcPmm__HE637_LogicalOperator7)) && + X_SVmcPmm__HE643_Delay && xVcVmcPmm_B_GarageShiftEfadPahDiOK && + yVcGscGar_B_EfadShiftInProgress) || ((X_SVmcPmm__HE668_UnitDelay <= + cVcVmcPmm_t_EfadShftProgsOffDly) && (X_SVmcPmm__HE665_UnitDelay <= + cVcVmcPmm_t_EfadShftProgsTimeOut) && xVcVmcPmm_B_Efad2WhlPahReq && + (X_SVmcPmm__HE639_UnitDelay4 == 2) && (!(yVcDsePcr_B_EfadNoTqRq)) && + (!(xVcVmcPmm_B_DrvCycTiOut)) && X_SVmcPmm__HE657_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/SR_FF1/UnitDelay1 */ + X_SVmcPmm__HE657_UnitDelay1 = xVcVmcPmm_B_EvenGearShiftAct; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/EdgeDetect1/Delay */ + X_SVmcPmm__HE643_Delay = SVmcPmm__HE637_LogicalOperator7; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/LogicalSwitch9/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_EfadPathEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch9/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay4 */ + X_SVmcPmm__HE6_UnitDelay4 = cVcVmcPmm_B_EfadPathEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator26 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay4 */ + X_SVmcPmm__HE6_UnitDelay4 = SVmcPmm__HE637_LogicalOperator7 || + xVcVmcPmm_B_EvenGearShiftAct; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator27 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242 + _Efad/12421_Efad/D_EradModeReq4/EncapsulatedSubsystem/Out + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RelationalOperator31 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + yVcVmcPmm_B_EfadActReq = (X_SVmcPmm__HE639_UnitDelay4 == 2) && + yVcPpmPsm_B_DriveCycleActive; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/SignalDelay7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/SignalDelay7/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator14 */ + if (!(yVcDepTre_B_ISGTqAllw)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay7/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/SignalDelay7/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay7/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/SignalDelay7/ts */ + X_SVmcPmm__HE669_UnitDelay = X_SVmcPmm__HE669_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/SignalDelay7/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/SignalDelay7/UnitDelay */ + X_SVmcPmm__HE669_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/SR_FF6/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SR_FF6/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF6/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator17 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242 + _Efad/12421_Efad/D_EradModeReq4/EncapsulatedSubsystem/Out + # combined # Reference of merge block: Merge1 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge1 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal7/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/RenameSignal7/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/SR_FF6/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/SignalDelay7/UnitDelay */ + X_SVmcPmm__HE659_UnitDelay1 = SVmcPmm__HE173_Merge1 || yVcVmcPmm_B_EfadActReq || + ((!(xVcVmcPmm_B_DrvCycTiOut)) && (X_SVmcPmm__HE669_UnitDelay <= + cVcVmcPmm_t_EfadTrqAllowTiOut) && (sVcDseGb_D_EfadPathAct != 5) && + X_SVmcPmm__HE659_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/LogicalSwitch13/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/LogicalSwitch13/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_D_EfadModReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch13/Switch */ + rVcVmcPmm_D_EfadModReq = cVcVmcPmm_D_EfadModReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1242 + 1_Efad/LogicalSwitch5/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator46 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/RelationalOperator7 */ + if (yVcDsePcr_B_IsgUdcCtrlRq && (sVcDseGb_D_EfadPathAct == 1)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch */ + rVcVmcPmm_D_EfadModReq = 4; + } + else { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocesso + r IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637__gicalOperator35; + #endif + + /* SVmcPmm__HE1_VcVmcPmm_AUX */ + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/12 + 42_Efad/12421_Efad/LogicalOperator35 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/RelationalOperator11 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/RelationalOperator12 */ + SVmcPmm__HE637__gicalOperator35 = (sVcDseGb_D_EfadPathAct == + cVcVmcPmm_D_EfadPathAllwd1) || (sVcDseGb_D_EfadPathAct == + cVcVmcPmm_D_EfadPathAllwd2); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 2_Efad/12421_Efad/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/1 + 2421_Efad/LogicalSwitch3/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/LogicalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/RelationalOperator26 */ + if ((sVcDtcCtc_D_EfadModeReq == 5) && SVmcPmm__HE637__gicalOperator35) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/ + 1242_Efad/12421_Efad/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch */ + rVcVmcPmm_D_EfadModReq = 5; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/ + 1242_Efad/12421_Efad/LogicalSwitch12/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalSwitch12/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1242_Efad/12421_Efad/LogicalOperator34 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hyb + rid_Mode_Control/1242_Efad/12421_Efad/RelationalOperator2 */ + if ((sVcDtcCtc_D_EfadModeReq == 3) && SVmcPmm__HE637__gicalOperator35) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contr + ol/1242_Efad/12421_Efad/LogicalSwitch12/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch */ + rVcVmcPmm_D_EfadModReq = 3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contr + ol/1242_Efad/12421_Efad/LogicalSwitch14/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/LogicalSwitch14/Switch: Omitted comparison with consta + nt. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hyb + rid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator25 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_ + Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF6/UnitDelay1 */ + if (yVcGscAsr_B_EfadNoTqReq || X_SVmcPmm__HE659_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Co + ntrol/1242_Efad/12421_Efad/LogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch12/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch */ + rVcVmcPmm_D_EfadModReq = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Co + ntrol/1242_Efad/12421_Efad/LogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch12/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch5/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch */ + rVcVmcPmm_D_EfadModReq = 1; + } + } + } + } + } + + /* Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybri + d_Mode_Control/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch */ + SVmcPmm__HE173_Merge = rVcVmcPmm_D_EfadModReq; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch1/Switch: Omitted comparison with con + stant. */ + if (cVcVmcPmm_B_IsgStrtReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch1/Switch + # combined # Reference of merge block: Merge2 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge2 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 */ + X_SVmcPmm__HE6_UnitDelay10 = cVcVmcPmm_B_IsgStrtReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch1/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator26 + # combined # Reference of merge block: Merge2 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge2 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/RenameSignal5/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + X_SVmcPmm__HE6_UnitDelay10 = X_SVmcPmm__HE6_UnitDelay6 && + X_SVmcPmm__HE6_UnitDelay13; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay8 + # combined # Reference of merge block: Merge2 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge2 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 */ + X_SVmcPmm__HE638_UnitDelay8 = X_SVmcPmm__HE6_UnitDelay10; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/LogicalOperator65 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 */ + xVcVmcPmm_B_12VStrtReq = X_SVmcPmm__HE638_UnitDelay3; + + /* Reference of merge block: Merge3 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/Merge3 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator65 */ + SVmcPmm__HE173_Merge3 = xVcVmcPmm_B_12VStrtReq; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/D_IsgModeReq7/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 */ + yVcVmcPmm_B_ClutchStartReq = X_SVmcPmm__HE703_UnitDelay1; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/D_EradModeReq1/EncapsulatedSubsystem/Out + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contro + l/1242_Efad/12421_Efad/Gain + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124212_IsgReq/UnitDelay4 */ + sVcVmcPmm_D_EfadPathReq = X_SVmcPmm__HE639_UnitDelay4; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/Switc + h + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/Switch: Omitt + ed comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/R + elationalOperator4 */ + if (sVcDseEm_rt_IsgMaxTorqueLossStart < cVcVmcPmm_rt_EfadLowAvailTrq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7 + /Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Si + gnalDelay7/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAll + owed/SignalDelay7/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgSta + rtAllowed/SignalDelay7/ts */ + X_SVmcPmm__HE740_UnitDelay = X_SVmcPmm__HE740_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7 + /Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAll + owed/SignalDelay7/UnitDelay */ + X_SVmcPmm__HE740_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/R + el + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/S + ignalDelay7/UnitDelay */ + xVcVmcPmm_B_IsgStrtLowAvailTrq = X_SVmcPmm__HE740_UnitDelay > + cVcVmcPmm_t_EfadLowAvailTrqDly; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator40 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/UnitDelay3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE638__gicalOperator40 = X_SVmcPmm__HE6_UnitDelay14 || + X_SVmcPmm__HE638_UnitDelay3; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF5/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF5/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF5/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator66 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator21 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator61 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect4/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect4/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF5/LogOp */ + X_SVmcPmm__HE704_UnitDelay1 = ((!(SVmcPmm__HE638__gicalOperator40)) && + X_SVmcPmm__HE680_Delay && (!(SVmcPmm__HE638__ionalOperator22)) && + (rVcVmcPmm_D_12VStrtCnt > 0)) || ((!(SVmcPmm__HE638__gicalOperator14)) && + X_SVmcPmm__HE704_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect4/Delay */ + X_SVmcPmm__HE680_Delay = SVmcPmm__HE638__gicalOperator40; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch15/Switch: Omitted comparison with co + nstant. */ + if (cVcVmcPmm_B_12VStrtBlk_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch */ + xVcVmcPmm_B_12VStrtBlk = cVcVmcPmm_B_12VStrtBlk_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF5/UnitDelay1 + */ + xVcVmcPmm_B_12VStrtBlk = X_SVmcPmm__HE704_UnitDelay1; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay11 */ + X_SVmcPmm__HE638_UnitDelay11 = xVcVmcPmm_B_12VStrtBlk; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/UnitDelay15 */ + X_SVmcPmm__HE673_UnitDelay15 = xVcVmcPmm_B_12VStrtBlk; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/UnitDelay2 + */ + X_SVmcPmm__HE672_UnitDelay2 = xVcVmcPmm_B_12VStrtBlk; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator41 + # combined # Reference of merge block: Merge2 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge2 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/LogicalOperator64 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE638__gicalOperator41 = X_SVmcPmm__HE6_UnitDelay14 || + X_SVmcPmm__HE6_UnitDelay10; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF7/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF7/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF7/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator31 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator48 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect1/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect1/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF7/LogOp */ + X_SVmcPmm__HE706_UnitDelay1 = ((!(SVmcPmm__HE638__gicalOperator41)) && + X_SVmcPmm__HE677_Delay && (!(SVmcPmm__HE638__tionalOperator6)) && + (rVcVmcPmm_D_IsgStrtCnt > 0)) || ((!(SVmcPmm__HE638_LogicalOperator2)) && + X_SVmcPmm__HE706_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect1/Delay */ + X_SVmcPmm__HE677_Delay = SVmcPmm__HE638__gicalOperator41; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch11/Switch: Omitted comparison with co + nstant. */ + if (cVcVmcPmm_B_IsgStrtBlk_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch */ + xVcVmcPmm_B_IsgStrtBlk = cVcVmcPmm_B_IsgStrtBlk_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF7/UnitDelay1 + */ + xVcVmcPmm_B_IsgStrtBlk = X_SVmcPmm__HE706_UnitDelay1; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay9 */ + X_SVmcPmm__HE638_UnitDelay9 = xVcVmcPmm_B_IsgStrtBlk; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/UnitDelay7 */ + X_SVmcPmm__HE674_UnitDelay7 = xVcVmcPmm_B_IsgStrtBlk; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/LogicalOperator42 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF3/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE638__gicalOperator42 = X_SVmcPmm__HE6_UnitDelay14 || + X_SVmcPmm__HE703_UnitDelay1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/SR_FF6/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF6/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF6/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator43 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/RelationalOperator18 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator29 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF6/LogOp */ + X_SVmcPmm__HE705_UnitDelay1 = ((!(SVmcPmm__HE638__gicalOperator42)) && + X_SVmcPmm__HE676_Delay && (!(SVmcPmm__HE638__ionalOperator13)) && + (rVcVmcPmm_D_CluStrtCnt > 0)) || ((!(SVmcPmm__HE638__gicalOperator17)) && + X_SVmcPmm__HE705_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/EdgeDetect/Delay */ + X_SVmcPmm__HE676_Delay = SVmcPmm__HE638__gicalOperator42; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad + /12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_E + fad/124211_IceStartCoordination/LogicalSwitch12/Switch: Omitted comparison with co + nstant. */ + if (cVcVmcPmm_B_CluStrtBlk_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch */ + xVcVmcPmm_B_CluStrtBlk = cVcVmcPmm_B_CluStrtBlk_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_E + fad/12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF6/UnitDelay1 + */ + xVcVmcPmm_B_CluStrtBlk = X_SVmcPmm__HE705_UnitDelay1; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/UnitDelay4 */ + X_SVmcPmm__HE638_UnitDelay4 = xVcVmcPmm_B_CluStrtBlk; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/UnitDelay10 + */ + X_SVmcPmm__HE675_UnitDelay10 = xVcVmcPmm_B_CluStrtBlk; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efa + d/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + SR_FF8/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator49 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator82 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + LogicalOperator51 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLever + DR/RelationalOperator9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + EdgeDetect/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + EdgeDetect/Logic + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/ + SR_FF8/LogOp */ + xVcVmcPmm_B_IsgStrtLimLoosen = ((!(X_SVmcPmm__HE6_UnitDelay14)) && + X_SVmcPmm__HE717_Delay && (rVcVmcPmm_D_IsgStrtCnt >= + cVcVmcPmm_D_EfadIsgStrLoosenLim)) || (SVmcPmm__HE672_LogicalOperator7 && + xVcVmcPmm_B_CluStrtBlk) || (SVmcPmm__HE829_Switch && (CVmcPmm__HE1_D_IceStatus != 2) + && X_SVmcPmm__HE724_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8/Uni + tDelay1 */ + X_SVmcPmm__HE724_UnitDelay1 = xVcVmcPmm_B_IsgStrtLimLoosen; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/EdgeDetect + /Delay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE717_Delay = X_SVmcPmm__HE6_UnitDelay14; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_ + Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/UnitDelay1 + */ + X_SVmcPmm__HE672_UnitDelay1 = xVcVmcPmm_B_IsgStrtLimLoosen; + } + #endif + #if Vc_Pvc_Hw_B_Erad + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad + /Enable: Enable condition + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad + /Enable: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseEradCode) { + /* SLLocal: Default storage class for local variables | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + Float32 SVmcPmm__HE615_Switch1; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + Float32 SVmcPmm__HE622_Switch; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + Bool SVmcPmm__HE614__gicalOperator11; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + Bool SVmcPmm__HE614__tionalOperator9; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE624_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE625_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE626_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE630_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE618_Delay = 0; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE627_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE628_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE629_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE614__lOperator11_AUX */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/SignalDelay/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/SignalDelay/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/LogicalOperator28 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out32/EncapsulatedSubsystem/O + ut */ + if ((!(yVcVmcPmm_B_EngOnReqEng)) || yVcDeDmm_B_EradEngageRqDr || + yVcVmcEm_B_EradEngageRqEm || yVcDsePcr_B_EradEngageRq || yVcVmcAwd_B_EngageReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/SignalDelay/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1241_Erad/12411_Erad/SignalDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/SignalDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1241_Erad/12411_Erad/SignalDelay/ts */ + X_SVmcPmm__HE630_UnitDelay = X_SVmcPmm__HE630_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/SignalDelay/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/SignalDelay/UnitDelay */ + X_SVmcPmm__HE630_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/OffDelay1/Switch1: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SignalDelay/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SignalDelay/UnitDelay */ + if (X_SVmcPmm__HE630_UnitDelay > cVcVmcPmm_t_EradOnGlitch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/OffDelay1/UnitDelay */ + X_SVmcPmm__HE624_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1241_Erad/12411_Erad/OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/OffDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1241_Erad/12411_Erad/OffDelay1/ts1 */ + X_SVmcPmm__HE624_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE624_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/LogicalSwitch3/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_EradRmpDwnTqSignal) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch3/Switch */ + SVmcPmm__HE622_Switch = sVcMtcTc_Tq_EradReqWhl; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch3/Switch */ + SVmcPmm__HE622_Switch = sVcDseWt_Tq_PropRear; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/Abs1/Switch1 */ + if (SVmcPmm__HE622_Switch >= 0.F) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/Abs1/Switch1 */ + SVmcPmm__HE615_Switch1 = SVmcPmm__HE622_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/Abs1/Switch1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/Abs1/Gain */ + SVmcPmm__HE615_Switch1 = SVmcPmm__HE622_Switch * -1.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_ + Erad/12411_Erad/RelationalOperator9 */ + SVmcPmm__HE614__tionalOperator9 = SVmcPmm__HE615_Switch1 < cVcVmcPmm_Tq_ERADRampDown; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/SR_FF2/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/OffDelay1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/OffDelay1/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/SR_FF2/LogOp + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2/EncapsulatedSubsystem/Ou + t */ + X_SVmcPmm__HE628_UnitDelay1 = (X_SVmcPmm__HE624_UnitDelay <= + cVcVmcPmm_t_EradOffGlitch) || (((!(yVcVmcPmm_B_CrShPathEnable)) || + (!(SVmcPmm__HE614__tionalOperator9))) && X_SVmcPmm__HE628_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/LogicalOperator11 */ + SVmcPmm__HE614__gicalOperator11 = yVcScIn_B_DrvgDirRvsDes || yVcScIn_B_DrvgDirFwdDes; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/SR_FF8/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF8/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/SR_FF8/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/RelationalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/SR_FF8/LogOp */ + X_SVmcPmm__HE629_UnitDelay1 = (sVcScIn_v_VehSpdLgtMax <= cVcVmcPmm_v_EradOnSpdLim) || + ((sVcScIn_v_VehSpdLgtMax < cVcVmcPmm_v_EradOffSpdLim) && + X_SVmcPmm__HE629_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/LogicalOperator16 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241 + _Erad/12411_Erad/B_EradClutchReq1/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF8/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF2/UnitDelay1 */ + yVcVmcPmm_B_EradDrReq = X_SVmcPmm__HE628_UnitDelay1 && + SVmcPmm__HE614__gicalOperator11 && X_SVmcPmm__HE629_UnitDelay1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/LogicalOperator14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/LogicalOperator30 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/LogicalOperator1 */ + xVcVmcPmm_B_EradAllow = SVmcPmm__HE829_Switch && (!(yVcDsePcr_B_EradDisableRq)) && + yVcPpmPsm_B_PropulsionAllowed && (yVcDepTre_B_ERADTqAllw || cVcVmcPmm_B_ERADTqAllw); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/LogicalOperator6 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241 + _Erad/12411_Erad/B_EradClutchReq1/EncapsulatedSubsystem/Out */ + xVcVmcPmm_B_EradEngageReq = yVcVmcPmm_B_EradDrReq && xVcVmcPmm_B_EradAllow; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/LogicalSwitch5/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_EradPathEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay8 */ + X_SVmcPmm__HE6_UnitDelay8 = cVcVmcPmm_B_EradPathEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/LogicalOperator5 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/RelationalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/LogicalOperator8 */ + X_SVmcPmm__HE6_UnitDelay8 = xVcVmcPmm_B_EradEngageReq && + (!(yVcDsePcr_B_EradNoTqRq)) && (sVcIem_D_WhlMotSysModSts == 2) && + yVcIem_B_WhlMotSysCluSts; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/LogicalSwitch2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/LogicalSwitch2/Switch1: Omitted comparison with constant. */ + if (cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch2/Switch1 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1 + 241_Erad/12411_Erad/LogicalSwitch2/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_WhlMotSysCluOperTypReq = cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch2/Switch1 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1 + 241_Erad/12411_Erad/LogicalSwitch2/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_WhlMotSysCluOperTypReq = sVcDeDmm_D_EradEngageModeReq; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/OnDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/OnDelay1/Switch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/LogicalOperator3 */ + if (!(xVcVmcPmm_B_EradEngageReq)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/OnDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1241_Erad/12411_Erad/OnDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/OnDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1241_Erad/12411_Erad/OnDelay1/ts2 */ + X_SVmcPmm__HE626_UnitDelay = X_SVmcPmm__HE626_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/OnDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/OnDelay1/UnitDelay */ + X_SVmcPmm__HE626_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/OffDelay2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/OffDelay2/Switch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/EdgeDetect/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/EdgeDetect/Logic */ + if ((!(SVmcPmm__HE614__gicalOperator11)) && X_SVmcPmm__HE618_Delay) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/OffDelay2/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/OffDelay2/UnitDelay */ + X_SVmcPmm__HE625_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/OffDelay2/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1241_Erad/12411_Erad/OffDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1241_Erad/12411_Erad/OffDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1241_Erad/12411_Erad/OffDelay2/ts3 */ + X_SVmcPmm__HE625_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE625_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_ + Erad/12411_Erad/EdgeDetect/Delay */ + X_SVmcPmm__HE618_Delay = SVmcPmm__HE614__gicalOperator11; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/SR_FF1/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF1/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/SR_FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/SR_FF1/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/OnDelay1/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/OffDelay2/UnitDelay */ + X_SVmcPmm__HE627_UnitDelay1 = xVcVmcPmm_B_EradEngageReq || + ((X_SVmcPmm__HE626_UnitDelay <= cVcVmcPmm_t_EradDisable) && + ((X_SVmcPmm__HE625_UnitDelay <= cVcVmcPmm_t_EradNtrlGlitch) || + (((!(yVcVmcWtd_B_EradPathDisabled)) && (!(cVcVmcPmm_B_EradIgnrPathDisable))) || + (!(SVmcPmm__HE614__tionalOperator9)))) && X_SVmcPmm__HE627_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Era + d/12411_Erad/LogicalOperator12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/RelationalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1241_Erad/12411_Erad/LogicalOperator15 */ + xVcVmcPmm_B_EradSpdCtrl = (!(yVcIem_B_WhlMotSysCluSts)) && xVcVmcPmm_B_EradAllow && + yVcScIn_B_DrvgDirRvsDes && (sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_EradSpdCtrl); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad + /12411_Erad/LogicalSwitch/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/LogicalSwitch/Switch: Omitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF1/UnitDelay1 */ + if (X_SVmcPmm__HE627_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1 + 241_Erad/12411_Erad/LogicalSwitch/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_WhlMotSysModReq = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_E + rad/12411_Erad/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/1241 + 1_Erad/LogicalSwitch1/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_EradSpdCtrl) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 1_Erad/12411_Erad/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1241_Erad/12411_Erad/LogicalSwitch/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contro + l/1241_Erad/12411_Erad/LogicalSwitch/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_WhlMotSysModReq = 3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 1_Erad/12411_Erad/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1241_Erad/12411_Erad/LogicalSwitch/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contro + l/1241_Erad/12411_Erad/LogicalSwitch/Out1/EncapsulatedSubsystem/Out */ + sVcVmcPmm_D_WhlMotSysModReq = 1; + } + } + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_E + rad/B_EradClutchReq/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1241_Erad/12411_Erad/SR_FF1/UnitDelay1 */ + yVcVmcPmm_B_EradClutchReq = X_SVmcPmm__HE627_UnitDelay1; + } + #endif + #if VcVmcPmm__HEP7_1243_Isg_8 + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/E + nable: Enable condition + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/E + nable: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseIsgCode) { + /* SLLocal: Default storage class for local variables | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + Float32 SVmcPmm__HE787_Switch1; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + Float32 SVmcPmm__HE791_Switch; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + Float32 SVmcPmm__HE810_Switch; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + Bool SVmcPmm__HE784__gicalOperator19; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + Bool SVmcPmm__HE808_LogicalOperator; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE818_Switch_AUX + Bool SVmcPmm__HE818_Switch; + #endif + + /* SVmcPmm__HE818_Switch_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 */ + #ifdef SVmcPmm__HE784_Merge_AUX + static UInt8 SVmcPmm__HE784_Merge = 0; + #endif + + /* SVmcPmm__HE784_Merge_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 */ + #ifdef SVmcPmm__HE784_Merge5_AUX + static UInt8 SVmcPmm__HE784_Merge5 = 0; + #endif + + /* SVmcPmm__HE784_Merge5_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static UInt8 SVmcPmm__HE817___IsgStrtAllow_x[2] = + { + /* [0..1] */ 0, 0 + /* 0., 0. */ + }; /* different scalings, different constrained ranges */ + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 32 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE795_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE804_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE805_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE806_UnitDelay = 0.F; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Float32 X_SVmcPmm__HE814_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Float32 X_SVmcPmm__HE815_UnitDelay = 1e+30F; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue + | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE785_InitValue1 = 1; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Bool X_SVmcPmm__HE788_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Bool X_SVmcPmm__HE802_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE784__lOperator19_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF */ + #ifdef SVmcPmm__HE784_Merge5_AUX + static Bool X_SVmcPmm__HE803_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE784_Merge5_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE807_Delay = 0; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE808_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE809_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE816_UnitDelay1 = 0; + #endif + + /* SVmcPmm__HE808__calOperator_AUX */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/SignalDelay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/SignalDelay1/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RelationalOperator1 */ + if (sVcDseEm_rt_IsgMaxTorqueLoss < cVcVmcPmm_rt_IsgStrtAllow) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/SignalDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE804_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/SignalDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1243_Isg/12431_Isg/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1243_Isg/12431_Isg/SignalDelay1/ts */ + X_SVmcPmm__HE804_UnitDelay = X_SVmcPmm__HE804_UnitDelay + ts_VcVmcPmm__HEP7; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/LogicalSwitch3/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SignalDelay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SignalDelay1/UnitDelay */ + if (X_SVmcPmm__HE804_UnitDelay <= cVcVmcPmm_t_IsgRunReqDelay) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch3/Switch + # combined # Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalSwitch3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay3 */ + X_SVmcPmm__HE6_UnitDelay3 = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch3/Switch + # combined # Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalSwitch3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay3 */ + X_SVmcPmm__HE6_UnitDelay3 = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/SignalDelay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/SignalDelay3/Switch: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RelationalOperator8 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 0) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/SignalDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1243_Isg/12431_Isg/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1243_Isg/12431_Isg/SignalDelay3/ts */ + X_SVmcPmm__HE806_UnitDelay = X_SVmcPmm__HE806_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/SignalDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE806_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg + /12431_Isg/LogicalOperator19 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SignalDelay3/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator13 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SignalDelay3/UnitDelay */ + SVmcPmm__HE784__gicalOperator19 = (!(X_SVmcPmm__HE6_UnitDelay14)) && + (X_SVmcPmm__HE806_UnitDelay > cVcVmcPmm_t_IsgICEStop); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/OffDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/OffDelay3/Switch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/EdgeDetectRise3/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/EdgeDetectRise3/LogicalOperator1 */ + if (SVmcPmm__HE784__gicalOperator19 && (!(X_SVmcPmm__HE788_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/OffDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/OffDelay3/UnitDelay */ + X_SVmcPmm__HE795_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/OffDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1243_Isg/12431_Isg/OffDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/OffDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1243_Isg/12431_Isg/OffDelay3/ts1 */ + X_SVmcPmm__HE795_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE795_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_ + Isg/12431_Isg/EdgeDetectRise3/UnitDelay1 */ + X_SVmcPmm__HE788_UnitDelay1 = SVmcPmm__HE784__gicalOperator19; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg + /12431_Isg/LogicalOperator18 + # combined # Reference of merge block: Merge1 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge1 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal2/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/RenameSignal2/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator27 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator21 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/OffDelay3/UnitDelay */ + SVmcPmm__HE173_Merge1 = ((X_SVmcPmm__HE795_UnitDelay > cVcVmcPmm_t_IsgAdapt) || + cVcVmcPmm_B_SkipIsgCalibration) && SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg + /12431_Isg/LogicalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator31 + # combined # Reference of merge block: Merge1 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Cont + rol/1240_Hybrid_Mode_Control/Merge1 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal2/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/RenameSignal2/LogicalOperator1 */ + xVcVmcPmm_B_IsgEnable = SVmcPmm__HE173_Merge1 && (yVcDepTre_B_ISGTqAllw || + cVcVmcPmm_B_ISGTqAllw) && (!(yVcDsePcr_B_IsgDisableRq)); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/LogicalSwitch7/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_IsgPathEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch7/Switch + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 */ + X_SVmcPmm__HE6_UnitDelay13 = cVcVmcPmm_B_IsgPathEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch7/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/LogicalOperator25 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/RelationalOperator5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/LogicalOperator9 */ + X_SVmcPmm__HE6_UnitDelay13 = xVcVmcPmm_B_IsgEnable && (!(yVcDsePcr_B_IsgNoTqRq)) + && (sVcCidd_D_IsgModSts == 2); + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg + /12431_Isg/SR_FF4/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SR_FF4/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/SR_FF4/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator26 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RelationalOperator2 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/SR_FF4/LogOp */ + X_SVmcPmm__HE803_UnitDelay1 = (cVcVmcPmm_B_UseIsgSpdCtrlStrt && + X_SVmcPmm__HE6_UnitDelay14 && (X_SVmcPmm__HE6_UnitDelay == 2)) || + ((CVmcPmm__HE1_D_IceStatus != 2) && X_SVmcPmm__HE803_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/SignalDelay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/SignalDelay2/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/LogicalOperator20 */ + if (!(xVcVmcPmm_B_IsgEnable)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/SignalDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Cont + rol/1243_Isg/12431_Isg/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/1243_Isg/12431_Isg/SignalDelay2/ts */ + X_SVmcPmm__HE805_UnitDelay = X_SVmcPmm__HE805_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/SignalDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE805_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/LogicalSwitch4/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_IsgRmpDwnTqSignal) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch4/Switch */ + SVmcPmm__HE791_Switch = sVcDtcTc_Tq_IsgReqCrSh; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch4/Switch */ + SVmcPmm__HE791_Switch = sVcDseCt_Tq_IsgCrSh; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/Abs2/Switch1 */ + if (SVmcPmm__HE791_Switch >= 0.F) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/Abs2/Switch1 */ + SVmcPmm__HE787_Switch1 = SVmcPmm__HE791_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/Abs2/Switch1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/Abs2/Gain */ + SVmcPmm__HE787_Switch1 = SVmcPmm__HE791_Switch * -1.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_ + Isg/12431_Isg/RelationalOperator13 */ + xVcVmcPmm_B_IsgActrTqRampDwn = SVmcPmm__HE787_Switch1 < cVcVmcPmm_Tq_IsgRampDown; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg + /12431_Isg/SR_FF3/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SR_FF3/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/SR_FF3/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/SR_FF3/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE802_UnitDelay1 = xVcVmcPmm_B_IsgEnable || ((X_SVmcPmm__HE805_UnitDelay + <= cVcVmcPmm_t_IsgDisable) && (((!(yVcDtcTc_B_IsgPathDisabled)) && + (!(cVcVmcPmm_B_IsgIgnrPathDisable))) || (!(xVcVmcPmm_B_IsgActrTqRampDwn))) && + X_SVmcPmm__HE802_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/ + 12431_Isg/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Is + g/LogicalSwitch11/Switch: Omitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/SR_FF3/UnitDelay1 */ + if (X_SVmcPmm__HE802_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/LogicalSwitch8/Switch: Omitted comparison with constant. */ + if (yVcDsePcr_B_IsgUdcCtrlRq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/LogicalSwitch8/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mod + e_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch + # combined # Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1200 + _Control/1240_Hybrid_Mode_Control/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Contro + l/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch */ + SVmcPmm__HE173_Merge = 4; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12 + 431_Isg/LogicalSwitch6/Switch: Omitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/SR_FF4/UnitDelay1 */ + if (X_SVmcPmm__HE803_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/ + 1243_Isg/12431_Isg/LogicalSwitch6/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1243_Isg/12431_Isg/LogicalSwitch8/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch + # combined # Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1 + 200_Control/1240_Hybrid_Mode_Control/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Con + trol/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch + */ + SVmcPmm__HE173_Merge = 3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/ + 1243_Isg/12431_Isg/LogicalSwitch6/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1243_Isg/12431_Isg/LogicalSwitch8/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch + # combined # Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1 + 200_Control/1240_Hybrid_Mode_Control/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Con + trol/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch + */ + SVmcPmm__HE173_Merge = 2; + } + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/LogicalSwitch11/Switch + # combined # Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1200_Co + ntrol/1240_Hybrid_Mode_Control/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalSwitch11/Switch */ + SVmcPmm__HE173_Merge = 1; + } + #if Vc_Pvc_Hw_B_12VStartMotor == 0 + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124312_IsgStartCoordination/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124312_IsgStartCoordination/LogicalSwitch1/Switch: Omitted comparison with + constant. */ + if (cVcVmcPmm_B_IsgStrtUseSpdCtrl) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124312_IsgStartCoordination/LogicalSwitch1/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/LogicalOperator + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/SR_FF4/UnitDelay1 */ + SVmcPmm__HE818_Switch = !(X_SVmcPmm__HE803_UnitDelay1); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124312_IsgStartCoordination/LogicalSwitch1/Switch */ + SVmcPmm__HE818_Switch = 1; + } + + /* Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1243_Isg/12431_Isg/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/LogicalO + perator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/LogicalOperator2 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE784_Merge5 = (UInt8) (X_SVmcPmm__HE6_UnitDelay14 && + X_SVmcPmm__HE6_UnitDelay13 && (!(yVcDsePcr_B_IsgStartDisableRq)) && + SVmcPmm__HE818_Switch); + + /* Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hy + brid_Mode_Control/1243_Isg/12431_Isg/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/Rescaler + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1 + 243_Isg/12431_Isg/124312_IsgStartCoordination/Rescaler */ + SVmcPmm__HE784_Merge = (UInt8) 0; + #endif + #if Vc_Pvc_Hw_B_12VStartMotor + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124311_IsgStartCoordination12V/LogicalSwitch2/Switch: Omitted comparison w + ith constant. */ + if (cVcVmcPmm_B_UseOilTemp) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch2/Switch */ + SVmcPmm__HE810_Switch = sVcTmTeOil_Te_EngOil; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch2/Switch */ + SVmcPmm__HE810_Switch = SVmcPmm__HE848_Switch; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_ + Isg/12431_Isg/124311_IsgStartCoordination12V/SR_FF4/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/SR_FF4/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/SR_FF4/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetectRise3/Logic + alOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetectRise3/Logic + alOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/SR_FF4/LogOp */ + X_SVmcPmm__HE816_UnitDelay1 = (SVmcPmm__HE829_Switch && + (!(X_SVmcPmm__HE809_UnitDelay1))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE807_Delay))) && (CVmcPmm__HE1_D_IceStatus != 2) && + X_SVmcPmm__HE816_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/12 + 43_Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetect1/Delay */ + X_SVmcPmm__HE807_Delay = SVmcPmm__HE829_Switch; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/12 + 43_Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetectRise3/UnitDelay1 */ + X_SVmcPmm__HE809_UnitDelay1 = SVmcPmm__HE829_Switch; + + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1 + 243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllo + w_x */ + TabIdxS18T6((const Float32 *) &(tVcVmcPmm_Tq_IsgStrtAllow_x[0]), 6, sVcEc_n_Eng, + SVmcPmm__HE817___IsgStrtAllow_x); + + /* Interpolation: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAl + low */ + rVcVmcPmm_Tq_EradMaxLimNoLim = Tab1DIntpI1T6((const Float32 *) + &(tVcVmcPmm_Tq_IsgStrtAllow[0]), &(SVmcPmm__HE817___IsgStrtAllow_x[0])); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124311_IsgStartCoordination12V/OffDelay3/Switch1: Omitted comparison with + constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator + 4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator + 3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator + 2 */ + if ((sVcDseEm_Tq_IsgMaxAvail >= rVcVmcPmm_Tq_EradMaxLimNoLim) && + (sVcDseEm_Pw_IsgMaxAllowPrio >= cVcVmcPmm_Pw_IsgStrtAllow) && + (sVcDseEm_rt_IsgMaxTorqueLoss >= cVcVmcPmm_rt_IsgStrtAllow)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Un + itDelay */ + X_SVmcPmm__HE815_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_C + ontrol/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDela + y3/ts1 */ + X_SVmcPmm__HE815_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE815_UnitDelay; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_ + Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator18 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/Relation + alOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator16 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator17 + # combined # Reference of merge block: Merge4 VcVmcPmm/VcVmcPmm/1000_Hev/1200_C + ontrol/1240_Hybrid_Mode_Control/Merge4 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1 + 240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/RenameSignal1/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator + 8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator6 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/SR_FF4/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay3/UnitDela + y + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/SR_FF4/UnitDelay1 */ + xVcVmcPmm_B_IsgStrtOk = X_SVmcPmm__HE6_UnitDelay13 && ((SVmcPmm__HE810_Switch >= + cVcVmcPmm_Te_IsgStartPossible) || cVcVmcPmm_B_IsgStrtTempOverride) && + ((!(yVcDsePcr_B_IsgStartDisableRq)) || cVcVmcPmm_B_IsgStrtPcrOverride) && + ((!(yVcFsdPc_B_RunDry)) || cVcVmcPmm_B_IsgStrtRunDryOverride) && + ((!(X_SVmcPmm__HE816_UnitDelay1)) || cVcVmcPmm_B_IsgStrtFirstStartOverride) && + (X_SVmcPmm__HE815_UnitDelay <= cVcVmcPmm_t_IsgRunReqDelay) && + ((!(X_SVmcPmm__HE803_UnitDelay1)) || cVcVmcPmm_B_IsgStrtSpdCtrlOverride); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_ + Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetectRise1/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetectRise1/Logic + alOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + SVmcPmm__HE808_LogicalOperator = X_SVmcPmm__HE6_UnitDelay14 && + (!(X_SVmcPmm__HE808_UnitDelay1)); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/12 + 43_Isg/12431_Isg/124311_IsgStartCoordination12V/EdgeDetectRise1/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + X_SVmcPmm__HE808_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay14; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124311_IsgStartCoordination12V/OffDelay1/Switch1: Omitted comparison with + constant. */ + if (SVmcPmm__HE808_LogicalOperator) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Un + itDelay */ + X_SVmcPmm__HE814_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_C + ontrol/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Un + itDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_H + ybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDela + y1/ts1 */ + X_SVmcPmm__HE814_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE814_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124311_IsgStartCoordination12V/LogicalSwitch3/Switch: Omitted comparison w + ith constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/Relation + alOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/OffDelay1/UnitDela + y */ + if (SVmcPmm__HE808_LogicalOperator || ((X_SVmcPmm__HE814_UnitDelay <= + cVcVmcPmm_t_IsgStrtOkDelay) && (!(X_SVmcPmm__HE785_InitValue1)))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/InitValue1 + */ + X_SVmcPmm__HE785_InitValue1 = xVcVmcPmm_B_IsgStrtOk; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124311_IsgStartCoordination12V/LogicalSwitch4/Switch: Omitted comparison w + ith constant. */ + if (cVcVmcPmm_B_IsgStartEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch4/Switch + # combined # Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/120 + 0_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Contro + l/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V + /LogicalSwitch4/Switch */ + SVmcPmm__HE784_Merge5 = (UInt8) cVcVmcPmm_B_IsgStartEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch4/Switch + # combined # Reference of merge block: Merge5 VcVmcPmm/VcVmcPmm/1000_Hev/120 + 0_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Merge5 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Contro + l/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V + /LogicalSwitch4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/InitValue1 + */ + SVmcPmm__HE784_Merge5 = (UInt8) X_SVmcPmm__HE785_InitValue1; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/12 + 43_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator5 */ + xVcVmcPmm_B_12VStrtOk = sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_12VStrtMax; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_I + sg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431 + _Isg/124311_IsgStartCoordination12V/LogicalSwitch5/Switch: Omitted comparison w + ith constant. */ + if (cVcVmcPmm_B_12VStartEnable_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch5/Switch + # combined # Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1200 + _Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Contro + l/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V + /LogicalSwitch5/Switch */ + SVmcPmm__HE784_Merge = (UInt8) cVcVmcPmm_B_12VStartEnable_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/124 + 3_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalSwitch5/Switch + # combined # Reference of merge block: Merge VcVmcPmm/VcVmcPmm/1000_Hev/1200 + _Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Merge + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Contro + l/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V + /LogicalSwitch5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator + 11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator + 13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mo + de_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator + 12 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid + _Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/InitValue1 + */ + SVmcPmm__HE784_Merge = (UInt8) (xVcVmcPmm_B_12VStrtOk && + (!(xVcVmcPmm_B_IsgStrtOk)) && (!(X_SVmcPmm__HE785_InitValue1))); + } + #endif + + /* Reference of merge block: Merge2 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/Merge2 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal3/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/RenameSignal3/LogicalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 */ + X_SVmcPmm__HE6_UnitDelay10 = SVmcPmm__HE784_Merge5 != 0; + + /* Reference of merge block: Merge3 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybr + id_Mode_Control/Merge3 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240 + _Hybrid_Mode_Control/1243_Isg/12431_Isg/RenameSignal4/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1243_Isg/12431_Isg/RenameSignal4/LogicalOperator1 */ + SVmcPmm__HE173_Merge3 = SVmcPmm__HE784_Merge != 0; + } + #endif + #if Vc_Pvc_Hw_B_TqConverterGbx + /* IndexSearch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_Tr + ansHeatReq/Tq_TransHeatReq/Tq_TransHeatReq_x */ + TabIdxS18T390((const Float32 *) &(tVcVmcPmm_Tq_TransHeatReq_x[0]), 6, + sVcDtcAtr_v_VehDrDirectionRaw, SVmcPmm__HE821___TransHeatReq_x); + + /* Interpolation: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_ + TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq */ + SVmcPmm__HE821_Tq_TransHeatReq = Tab1DIntpI1T54((const Float32 *) + &(tVcVmcPmm_Tq_TransHeatReq[0]), &(SVmcPmm__HE821___TransHeatReq_x[0])); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHe + atReq/OnDelay4/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/On + Delay4/Switch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contro + l/1244_TransHeatReq/LogicalOperator24 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1244_TransHeatReq/RelationalOperator6 */ + if (SVmcPmm__HE829_Switch && (sVcDseEm_Tq_EradMaxAvailWhl <= + SVmcPmm__HE821_Tq_TransHeatReq)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_Tran + sHeatReq/OnDelay4/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control + /1244_TransHeatReq/OnDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1244_TransHeatReq/OnDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_ + Mode_Control/1244_TransHeatReq/ts3 */ + X_SVmcPmm__HE819_UnitDelay = X_SVmcPmm__HE819_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_Tran + sHeatReq/OnDelay4/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_ + Control/1244_TransHeatReq/OnDelay4/UnitDelay */ + X_SVmcPmm__HE819_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransH + eatReq/SR_FF5/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1244_TransHeatReq/SR_FF5/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contro + l/1244_TransHeatReq/SR_FF5/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1244_TransHeatReq/OnDelay4/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1244_TransHeatReq/OnDelay4/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Contro + l/1244_TransHeatReq/SR_FF5/LogOp */ + X_SVmcPmm__HE820_UnitDelay1 = (X_SVmcPmm__HE819_UnitDelay > + cVcVmcPmm_t_TransHeatDelayOn) || ((sVcDseEm_Tq_EradMaxAvailWhl <= + (SVmcPmm__HE821_Tq_TransHeatReq + cVcVmcPmm_Tq_TransHeatReqOffset)) && + X_SVmcPmm__HE820_UnitDelay1); + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/SR + _FF5/Q/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Con + trol/1244_TransHeatReq/SR_FF5/UnitDelay1 */ + yVcVmcPmm_B_TransHeatReq = X_SVmcPmm__HE820_UnitDelay1; + #endif + + /* Reference of merge block: Merge3 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Merge3 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybri + d_Mode_Control/RenameSignal1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/R + enameSignal1/LogicalOperator1 */ + SVmcPmm__HE6_Merge3 = SVmcPmm__HE173_Merge3; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/D_IsgModeReq/Encapsulat + edSubsystem/Out */ + sVcVmcPmm_D_IsgModReq = SVmcPmm__HE173_Merge; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/B_IsgEnable1/Encapsulat + edSubsystem/Out */ + yVcVmcPmm_B_IsgActReq = SVmcPmm__HE173_Merge1; + #endif + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay15 */ + X_SVmcPmm__HE6_UnitDelay15 = xVcVmcPmm_B_IsgStopStandstillPre; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay11 */ + X_SVmcPmm__HE6_UnitDelay11 = xVcVmcPmm_B_EngRunReqIsgStop; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay9 */ + X_SVmcPmm__HE6_UnitDelay9 = xVcVmcPmm_B_IsgStopCoast; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay7 */ + X_SVmcPmm__HE6_UnitDelay7 = xVcVmcPmm_B_Wait4CluStrt; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay12 */ + X_SVmcPmm__HE6_UnitDelay12 = xVcVmcPmm_B_EngRunReqIsgStop; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay2 */ + X_SVmcPmm__HE6_UnitDelay2 = xVcVmcPmm_B_StrtActrsRdy; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay/Switc + h + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay/Switch: Omitt + ed comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + RelationalOperator5 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + if (CVmcPmm__HE1_D_IceStatus == 2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay/Sw + itch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sign + alDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/SignalDelay/ts */ + X_SVmcPmm__HE593_UnitDelay = X_SVmcPmm__HE593_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SignalDelay/Sw + itch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SignalDelay/UnitDelay */ + X_SVmcPmm__HE593_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch13/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch13/Switch: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + icalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op37 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SignalDelay/UnitDelay */ + if ((X_SVmcPmm__HE593_UnitDelay > cVcVmcPmm_t_EngRunStall) || (!(SVmcPmm__HE829_Switch))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 3/Switch */ + rVcVmcPmm_D_StallAbortNum = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Sum + */ + rVcVmcPmm_D_StallAbortNum = (UInt8) (X_SVmcPmm__HE172_UnitDelay3 + ((UInt8) + SVmcPmm__HE527_LogicalOperator)); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/UnitDelay3 */ + X_SVmcPmm__HE172_UnitDelay3 = rVcVmcPmm_D_StallAbortNum; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOpe + rator4 */ + xVcVmcPmm_B_StallAbortNum = rVcVmcPmm_D_StallAbortNum >= cVcVmcPmm_D_AbortStart; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay3/Switch1: Omitte + d comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise5/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise5/LogicalOperator1 */ + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE530_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay3/Swit + ch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay3/UnitDelay */ + X_SVmcPmm__HE581_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay3/Swit + ch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffD + elay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts11 */ + X_SVmcPmm__HE581_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE581_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRis + e5/UnitDelay1 */ + X_SVmcPmm__HE530_UnitDelay1 = SVmcPmm__HE829_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay2/Switch1: Omitte + d comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise2/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Edg + eDetectRise2/LogicalOperator1 */ + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE528_UnitDelay1))) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay2/Swit + ch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay2/UnitDelay */ + X_SVmcPmm__HE580_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffDelay2/Swit + ch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OffD + elay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts3 */ + X_SVmcPmm__HE580_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE580_UnitDelay; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetectRis + e2/UnitDelay1 */ + X_SVmcPmm__HE528_UnitDelay1 = SVmcPmm__HE829_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch17/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch17/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtFrstStrtStall) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 7/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp22 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay2/RelationalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogicalOperator + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SR_FF2/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay3/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OffDelay2/UnitDelay */ + xVcVmcPmm_B_AbrtFrstStrtStall = X_SVmcPmm__HE590_UnitDelay1 && (X_SVmcPmm__HE581_UnitDelay + > cVcVmcPmm_t_BlockAbrtFrstDrCycle) && (X_SVmcPmm__HE580_UnitDelay <= + cVcVmcPmm_t_AbrtFrstDrCycle); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 7/Switch */ + xVcVmcPmm_B_AbrtFrstStrtStall = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch20/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch20/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtNtrlAdapt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 0/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp25 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp24 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SR_FF2/UnitDelay1 */ + xVcVmcPmm_B_AbrtNtrlAdapt = (!(yVcScDep_B_NeutralMTValid)) && X_SVmcPmm__HE590_UnitDelay1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 0/Switch */ + xVcVmcPmm_B_AbrtNtrlAdapt = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay4/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay4/Switch1: Omitted + comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF2/UnitDelay1 */ + if (X_SVmcPmm__HE590_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay4/Switc + h1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts6 */ + X_SVmcPmm__HE585_UnitDelay = X_SVmcPmm__HE585_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay4/Switc + h1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay4/UnitDelay */ + X_SVmcPmm__HE585_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch19/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch19/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallTime) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 9/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay4/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay4/UnitDelay */ + xVcVmcPmm_B_AbrtStallTime = X_SVmcPmm__HE585_UnitDelay > cVcVmcPmm_t_AbrtStall; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 9/Switch */ + xVcVmcPmm_B_AbrtStallTime = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch32/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch32/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallGp) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 2/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator13 */ + xVcVmcPmm_B_AbrtStallGp = sVcGp_D_StopStart != 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 2/Switch */ + xVcVmcPmm_B_AbrtStallGp = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallRcvInSpd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + /Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp12 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator19 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SR_FF2/UnitDelay1 */ + xVcVmcPmm_B_StallRcvAbortInSpd = (sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_VehMaxStallRcv) && + X_SVmcPmm__HE590_UnitDelay1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + /Switch */ + xVcVmcPmm_B_StallRcvAbortInSpd = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6/Sw + itch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6/Switch: Om + itted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallSsRcfSet) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6 + /Switch */ + xVcVmcPmm_B_AbrtStallSsRcfSet = yVcEc_B_SsRcfSet; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6 + /Switch */ + xVcVmcPmm_B_AbrtStallSsRcfSet = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch16/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch16/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallAbortHard) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 6/Switch */ + xVcVmcPmm_B_AbrtStallAbortHard = yVcPpmRc_B_StrtAbortHard; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 6/Switch */ + xVcVmcPmm_B_AbrtStallAbortHard = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch15/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch15/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallSeatBelt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp20 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + LogOp15 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/SR_FF2/UnitDelay1 */ + xVcVmcPmm_B_AbrtStallSeatBelt = X_SVmcPmm__HE590_UnitDelay1 && + (!(yVcCem_B_BltLockStAtDrvr)); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 5/Switch */ + xVcVmcPmm_B_AbrtStallSeatBelt = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch23/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch23/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallMicHev) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 3/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator8 */ + xVcVmcPmm_B_AbrtStallMicHev = sVcDeDmm_D_MicHevMode == 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2 + 3/Switch */ + xVcVmcPmm_B_AbrtStallMicHev = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch34/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch34/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallEngClntL) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 4/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/RelationalOperator16 */ + xVcVmcPmm_B_AbrtStallEngClntL = SVmcPmm__HE848_Switch < cVcVmcPmm_Te_AbrtStallEngClntL; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch3 + 4/Switch */ + xVcVmcPmm_B_AbrtStallEngClntL = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch40/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch40/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_AbrtStallRcShutOff) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 0/Switch */ + xVcVmcPmm_B_AbrtStallRcShutOff = yVcPpmRc_B_ShutOffReq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch4 + 0/Switch */ + xVcVmcPmm_B_AbrtStallRcShutOff = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp6 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + UnitDelay8 */ + X_SVmcPmm__HE172_UnitDelay8 = xVcVmcPmm_B_StallAbortNum || xVcVmcPmm_B_AbrtFrstStrtStall || + xVcVmcPmm_B_AbrtNtrlAdapt || xVcVmcPmm_B_AbrtStallTime || xVcVmcPmm_B_AbrtStallGp || + xVcVmcPmm_B_StallRcvAbortInSpd || xVcVmcPmm_B_AbrtStallSsRcfSet || + xVcVmcPmm_B_AbrtStallAbortHard || xVcVmcPmm_B_AbrtStallSeatBelt || + xVcVmcPmm_B_AbrtStallMicHev || xVcVmcPmm_B_AbrtStallEngClntL || + xVcVmcPmm_B_AbrtStallRcShutOff; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + UnitDelay8 */ + X_SVmcPmm__HE172_UnitDelay1 = X_SVmcPmm__HE172_UnitDelay8; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/RelationalOperator5 */ + xVcVmcPmm_B_DrDoorOpen = sVcCem_D_DoorDrvrSts == cVcVmcPmm_D_DrDoorOpen; + #if Vc_Pvc_Hw_B_HVSystem == 0 + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/OnDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/OnDelay1/Switch1: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/RelationalOperator3 */ + if (sVcEc_n_Eng <= cVcVmcPmm_n_PwdRpmOnly) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11111_PowerDown/OnDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11111_PowerDown/ts1 */ + X_SVmcPmm__HE46_UnitDelay = X_SVmcPmm__HE46_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay1/UnitDelay */ + X_SVmcPmm__HE46_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch18/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch18/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdRpmOnly) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch18/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay1/UnitDelay */ + SVmcPmm__HE36_Switch = X_SVmcPmm__HE46_UnitDelay > cVcVmcPmm_t_PwdRpm; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch18/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/RelationalOperator19 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE36_Switch = CVmcPmm__HE1_D_IceStatus == 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch11/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdRcShutOffDCA) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch11/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator25 */ + SVmcPmm__HE32_Switch = yVcPpmPsm_B_DriveCycleActive && yVcPpmRc_B_ShutOffReq; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch11/Switch */ + SVmcPmm__HE32_Switch = yVcPpmRc_B_ShutOffReq; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/OnDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/OnDelay3/Switch1: Omitted comparison with constant. */ + if (SVmcPmm__HE32_Switch) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11111_PowerDown/OnDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11111_PowerDown/ts4 */ + X_SVmcPmm__HE48_UnitDelay = X_SVmcPmm__HE48_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay3/UnitDelay */ + X_SVmcPmm__HE48_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch6/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdRcShutOff) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch6/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay3/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay3/UnitDelay */ + SVmcPmm__HE41_Switch = X_SVmcPmm__HE48_UnitDelay > cVcVmcPmm_t_PwdRcShutOff; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch6/Switch */ + SVmcPmm__HE41_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch4/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdSpeedLimit) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch4/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/RelationalOperator5 */ + SVmcPmm__HE39_Switch = sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_PwdSpeedLimit; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch4/Switch */ + SVmcPmm__HE39_Switch = 1; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11111_PowerDown/LogicalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator24 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator16 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator3 */ + xVcVmcPmm_B_PwdPossible = yVcPpmPsm_B_DriveCycleActive && ((yVcPpmRc_B_StrtAbortHard && + cVcVmcPmm_B_PwdDrReadyAbortHard) || (!(yVcPpmPsm_B_DrReady))) && (SVmcPmm__HE36_Switch || + SVmcPmm__HE41_Switch) && SVmcPmm__HE39_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch9/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdSeatBeltDoor) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF1 */ + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE31_Switch; + #endif + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 111_PowerDown/LogicalSwitch10/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdIgnoreQfDrDoor) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11111_PowerDown/LogicalSwitch10/Switch */ + SVmcPmm__HE31_Switch = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11111_PowerDown/LogicalSwitch10/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrateg + y_uHev/1111_Reconfig_uHev/11111_PowerDown/RelationalOperator7 */ + SVmcPmm__HE31_Switch = sVcCem_Qf_DoorDrvrSts != 3; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator21 */ + SVmcPmm__HE44_Switch = xVcVmcPmm_B_DrDoorOpen || SVmcPmm__HE31_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch9/Switch */ + SVmcPmm__HE44_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11111_PowerDown/LogicalOperator15 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator12 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator11 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/RelationalOperator6 */ + SVmcPmm__HE26_LogicalOperator15 = (((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && + cVcVmcPmm_B_PwdSeatBeltP) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) && + cVcVmcPmm_B_PwdSeatBeltN)) && (!(yVcCem_B_BltLockStAtDrvr)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11111_PowerDown/LogicalOperator23 */ + SVmcPmm__HE26_LogicalOperator23 = SVmcPmm__HE44_Switch && SVmcPmm__HE26_LogicalOperator15; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/OnDelay2/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/OnDelay2/Switch1: Omitted comparison with constant. */ + if (SVmcPmm__HE26_LogicalOperator15) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay2/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11111_PowerDown/OnDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11111_PowerDown/ts2 */ + X_SVmcPmm__HE47_UnitDelay = X_SVmcPmm__HE47_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay2/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay2/UnitDelay */ + X_SVmcPmm__HE47_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch5/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdSeatBelt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 111_PowerDown/LogicalSwitch8/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator18 */ + if (yVcDtcAtr_B_AT && cVcVmcPmm_B_PwdUseSeatBeltAT) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11111_PowerDown/LogicalSwitch8/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uH + ev/1111_Reconfig_uHev/11111_PowerDown/LogicalSwitch5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator22 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrateg + y_uHev/1111_Reconfig_uHev/11111_PowerDown/OnDelay2/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrateg + y_uHev/1111_Reconfig_uHev/11111_PowerDown/OnDelay2/UnitDelay */ + SVmcPmm__HE40_Switch = SVmcPmm__HE26_LogicalOperator23 || (X_SVmcPmm__HE47_UnitDelay + > cVcVmcPmm_t_PwdSeatBeltAT); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11111_PowerDown/LogicalSwitch8/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uH + ev/1111_Reconfig_uHev/11111_PowerDown/LogicalSwitch5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator1 */ + SVmcPmm__HE40_Switch = !(yVcCem_B_BltLockStAtDrvr); + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch5/Switch */ + SVmcPmm__HE40_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch12/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch12/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdRcfDep) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch12/Switch */ + SVmcPmm__HE33_Switch = yVcEc_B_SsRcfSet; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch12/Switch */ + SVmcPmm__HE33_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch13/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch13/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdAbrtStall) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch13/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Co + ntrol/UnitDelay8 */ + SVmcPmm__HE34_Switch = X_SVmcPmm__HE172_UnitDelay8; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch13/Switch */ + SVmcPmm__HE34_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch17/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdAbortHard) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch17/Switch */ + SVmcPmm__HE35_Switch = yVcPpmRc_B_StrtAbortHard; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch17/Switch */ + SVmcPmm__HE35_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch2/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdTransFailure) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch2/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator10 */ + SVmcPmm__HE37_Switch = yVcTcm_B_TrsmNeutFailr && yVcDtcAtr_B_AT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch2/Switch */ + SVmcPmm__HE37_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch3/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdTCMNodeAlive) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch3/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator5 */ + SVmcPmm__HE38_Switch = (!(yVcEc_B_TCMNodeAlive)) && yVcDtcAtr_B_AT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch3/Switch */ + SVmcPmm__HE38_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/OnDelay4/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/OnDelay4/Switch1: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/RelationalOperator8 */ + if (sVcDtcAtr_D_TransMode != sVcSpMon_D_PtTrsmModReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay4/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11111_PowerDown/OnDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11111_PowerDown/ts5 */ + X_SVmcPmm__HE49_UnitDelay = X_SVmcPmm__HE49_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OnDelay4/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay4/UnitDelay */ + X_SVmcPmm__HE49_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch7/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_PwdTCMModeFail) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch7/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/LogicalOperator8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay4/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OnDelay4/UnitDelay */ + SVmcPmm__HE42_Switch = (X_SVmcPmm__HE49_UnitDelay > cVcVmcPmm_t_PwdTcmModeFail) && + yVcDtcAtr_B_AT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch7/Switch */ + SVmcPmm__HE42_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11111_PowerDown/LogicalOperator4 */ + xVcVmcPmm_B_PwdTrig = SVmcPmm__HE40_Switch || SVmcPmm__HE33_Switch || SVmcPmm__HE34_Switch + || SVmcPmm__HE35_Switch || SVmcPmm__HE37_Switch || SVmcPmm__HE38_Switch || + SVmcPmm__HE42_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11111_PowerDown/LogicalOperator7 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator20 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator6 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/RelationalOperator16 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/RelationalOperator15 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + xVcVmcPmm_B_PwdReset = (!(yVcPpmPsm_B_DriveCycleActive)) || ((CVmcPmm__HE1_D_IceStatus == + 1) || (CVmcPmm__HE1_D_IceStatus == 2)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11111_PowerDown/SR_FF7/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/SR_FF7/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/SR_FF7/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/SR_FF7/LogOp */ + X_SVmcPmm__HE50_UnitDelay1 = (xVcVmcPmm_B_PwdPossible && xVcVmcPmm_B_PwdTrig) || + ((!(xVcVmcPmm_B_PwdReset)) && X_SVmcPmm__HE50_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/LogicalSwitch1/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UsePowerDownReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/SR_FF7/UnitDelay1 */ + SVmcPmm__HE30_Switch = X_SVmcPmm__HE50_UnitDelay1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/LogicalSwitch1/Switch */ + SVmcPmm__HE30_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11111_PowerDown/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/OffDelay1/Switch1: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11111_PowerDown/LogicalOperator19 */ + if (SVmcPmm__HE30_Switch && SVmcPmm__HE26_LogicalOperator23) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OffDelay1/UnitDelay */ + X_SVmcPmm__HE45_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11111_PowerDown/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11111_PowerDown/OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11111_PowerDown/OffDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11111_PowerDown/ts3 */ + X_SVmcPmm__HE45_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE45_UnitDelay; + } + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111 + _PowerDown/OffDelay1/y/EncapsulatedSubsystem/Out + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/OffDelay1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11111_PowerDown/OffDelay1/UnitDelay */ + yVcVmcPmm_B_BlockPushStartHMI = X_SVmcPmm__HE45_UnitDelay <= cVcVmcPmm_t_BlockPsmPwd; + #endif + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_S + tartModeHybrid/Enable: Enable condition + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_S + tartModeHybrid/Enable: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseStartModeHybrid) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + UInt8 SVmcPmm__HE389_MinMax; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | + Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE390_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE391_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE392_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE393_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE394_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE395_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE399_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE400_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE401_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE402_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHy + brid/121M1_StartModeHybrid/SR_FF5/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF5/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF5/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator53 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF5/LogOp */ + X_SVmcPmm__HE402_UnitDelay1 = (!(SVmcPmm__HE829_Switch)) || ((CVmcPmm__HE1_D_IceStatus + != 2) && X_SVmcPmm__HE402_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHy + brid/121M1_StartModeHybrid/LogicalOperator52 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator51 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF5/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator50 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out + */ + SVmcPmm__HE389__gicalOperator52 = X_SVmcPmm__HE402_UnitDelay1 && + (yVcDsePcr_B_PwrUpIceStrtReq || yVcVmcEm_B_PwrUpIceStrtReq || + (yVcVmcPmm_B_EngRunReqTrans && cVcVmcPmm_B_PwrUpIceStrtReqUseTrans)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHy + brid/121M1_StartModeHybrid/SR_FF1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator12 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/EdgeDetect1/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator6 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/Encaps + ulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/EdgeDetect1/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF1/LogOp */ + xVcVmcPmm_B_SafeISGPrio = yVcDsePcr_B_SafeEngStrtReq || ((yVcVmcPmm_B_EngRunReqFuel || + xVcVmcPmm_B_EngRunReqPsm || SVmcPmm__HE389__gicalOperator52) && (SVmcPmm__HE829_Switch + && (!(X_SVmcPmm__HE391_Delay)))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE393_Delay))) && ((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE395_Delay) && X_SVmcPmm__HE400_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/SR_FF1/UnitDelay1 */ + X_SVmcPmm__HE400_UnitDelay1 = xVcVmcPmm_B_SafeISGPrio; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/EdgeDetect5/Delay */ + X_SVmcPmm__HE395_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/EdgeDetect3/Delay */ + X_SVmcPmm__HE393_Delay = SVmcPmm__HE829_Switch; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/EdgeDetect1/Delay */ + X_SVmcPmm__HE391_Delay = SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHy + brid/121M1_StartModeHybrid/LogicalOperator14 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/RelationalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator4 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_St + artModeHybrid/121M1_StartModeHybrid/Sum + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/RelationalOperator4 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Out + */ + xVcVmcPmm_B_FastStart = yVcDeDmm_B_RespStartReq || (((yVcDtcEsc_B_Active && + cVcVmcPmm_B_StrtMdeEscCond) || ((sVcDtcAtr_n_TrgGear - sVcDtcIcl_n_IdleSpdBs) >= + cVcVmcPmm_n_StrtDiffFast)) && ((sVcVmcPmm_D_TransModeReq <= 2) || + cVcVmcPmm_B_StrtMdeSkipTrnMde)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHy + brid/121M1_StartModeHybrid/SR_FF/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF/LogOp */ + X_SVmcPmm__HE399_UnitDelay1 = xVcVmcPmm_B_FastStart || (((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE392_Delay) && X_SVmcPmm__HE399_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/EdgeDetect2/Delay */ + X_SVmcPmm__HE392_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHyb + rid/121M1_StartModeHybrid/MinMax */ + if (sVcEmiHeat_D_EngUseReq > sVcTmStrt_D_EngUseReq) { + SVmcPmm__HE389_MinMax = sVcEmiHeat_D_EngUseReq; + } + else { + SVmcPmm__HE389_MinMax = sVcTmStrt_D_EngUseReq; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHy + brid/121M1_StartModeHybrid/SR_FF2/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/RelationalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121M_StartModeHybrid/121M1_StartModeHybrid/RelationalOperator2 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + M_StartModeHybrid/121M1_StartModeHybrid/SR_FF2/LogOp */ + xVcVmcPmm_B_SafeISG = (cVcVmcPmm_B_SerialModeSafeBISG && (SVmcPmm__HE389_MinMax == 1) && + (sVcVmcPmm_D_TransModeReq > 2)) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE390_Delay))) && ((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE394_Delay) && X_SVmcPmm__HE401_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/SR_FF2/UnitDelay1 */ + X_SVmcPmm__HE401_UnitDelay1 = xVcVmcPmm_B_SafeISG; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/EdgeDetect4/Delay */ + X_SVmcPmm__HE394_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMod + eHybrid/121M1_StartModeHybrid/EdgeDetect/Delay */ + X_SVmcPmm__HE390_Delay = SVmcPmm__HE829_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHyb + rid/121M1_StartModeHybrid/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M + 1_StartModeHybrid/LogicalSwitch6/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_SafeISGPrio) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMode + Hybrid/121M1_StartModeHybrid/LogicalSwitch6/Switch */ + SVmcPmm__HE398_Switch = cVcVmcPmm_D_SafeBISG; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartMode + Hybrid/121M1_StartModeHybrid/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/1 + 21M1_StartModeHybrid/LogicalSwitch2/Switch: Omitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contr + ol/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF/UnitDelay1 */ + if (X_SVmcPmm__HE399_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartM + odeHybrid/121M1_StartModeHybrid/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalSwitch6/Switch */ + SVmcPmm__HE398_Switch = cVcVmcPmm_D_FastBISG; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartM + odeHybrid/121M1_StartModeHybrid/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybri + d/121M1_StartModeHybrid/LogicalSwitch1/Switch: Omitted comparison with constant + . */ + if (xVcVmcPmm_B_SafeISG) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_Sta + rtModeHybrid/121M1_StartModeHybrid/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalSwitch6/Switch */ + SVmcPmm__HE398_Switch = cVcVmcPmm_D_SafeBISG; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_Sta + rtModeHybrid/121M1_StartModeHybrid/LogicalSwitch1/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalSwitch6/Switch */ + SVmcPmm__HE398_Switch = cVcVmcPmm_D_NormalBISG; + } + } + } + } + #endif + #if VcVmcPmm__HEP7_1270_12VStartEnable_10 + /* Reference of merge block: Merge3 VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Merge3 + update of variable(s) associated with VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1270_12VSt + artEnable/Constant1 */ + SVmcPmm__HE6_Merge3 = 1; + #endif + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Lo + gicalOperator + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/LogicalOperator8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/LogicalOperator9 */ + xVcVmcPmm_B_FastEngmtTrqDemand = yVcDeDmm_B_RespStartReq && ((!(yVcVmcTfa_B_CcActive)) || + cVcVmcPmm_B_IgnrCcActive) && (sVcScIn_X_AccPedalPos >= cVcVmcPmm_X_AccPedFastEngmtMin); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLP + F1_pole_v2/LogicalSwitch/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLPF1_pole_ + v2/LogicalSwitch/Switch: Omitted comparison with constant. */ + if (X_SVmcPmm__HE456_Del2) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + DLPF1_pole_v2/LogicalSwitch/Switch */ + rVcVmcPmm_Xd_AccPedalPos = 0.F; + } + else { + /* SLLocal: Default storage class for local variables | Width: 32 */ + Float32 SVmcPmm__HE456_MinMax1; + Float32 SVmcPmm__HE456_MinMax2; + Float32 SVmcPmm__HE456_Prod; + Float32 SVmcPmm__HE456_Prod1; + Float32 SVmcPmm__HE456_Sum; + Float32 SVmcPmm__HE456_Sum3; + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLP + F1_pole_v2/Sum */ + SVmcPmm__HE456_Sum = sVcScIn_X_AccPedalPos - X_SVmcPmm__HE456_Del; + + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121R_EngagementMode/DLPF1_pole_v2/ts */ + if (ts_VcVmcPmm__HEP7 > 1e-06F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121R_EngagementMode/DLPF1_pole_v2/ts */ + SVmcPmm__HE456_MinMax1 = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE456_MinMax1 = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /DLPF1_pole_v2/Prod */ + if (SVmcPmm__HE456_MinMax1 != 0.F) { + SVmcPmm__HE456_Prod = SVmcPmm__HE456_Sum / SVmcPmm__HE456_MinMax1; + } + else { + if (SVmcPmm__HE456_Sum < 0.F) { + SVmcPmm__HE456_Prod = -3.402823466e+38F; + } + else { + SVmcPmm__HE456_Prod = 3.402823466e+38F; + } + } + + /* Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLP + F1_pole_v2/Sum3 + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121R_EngagementMode/DLPF1_pole_v2/ts */ + SVmcPmm__HE456_Sum3 = ts_VcVmcPmm__HEP7 + cVcVmcPmm_tc_AccPedDer; + if (SVmcPmm__HE456_Sum3 > 1e-06F) { + SVmcPmm__HE456_MinMax2 = SVmcPmm__HE456_Sum3; + } + else { + SVmcPmm__HE456_MinMax2 = 1e-06F; + } + + /* Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /DLPF1_pole_v2/Prod1 */ + if (SVmcPmm__HE456_MinMax2 != 0.F) { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121R_EngagementMode/DLPF1_pole_v2/ts */ + SVmcPmm__HE456_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE456_MinMax2; + } + else { + /* # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121R_EngagementMode/DLPF1_pole_v2/ts */ + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE456_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE456_Prod1 = 3.402823466e+38F; + } + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + DLPF1_pole_v2/LogicalSwitch/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Engag + ementMode/DLPF1_pole_v2/Sum2 + # combined # Product: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/DLPF1_pole_v2/Prod2 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Engag + ementMode/DLPF1_pole_v2/Sum1 */ + rVcVmcPmm_Xd_AccPedalPos = X_SVmcPmm__HE456_Del1 + ((SVmcPmm__HE456_Prod - + X_SVmcPmm__HE456_Del1) * SVmcPmm__HE456_Prod1); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /DLPF1_pole_v2/Del */ + X_SVmcPmm__HE456_Del = sVcScIn_X_AccPedalPos; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /DLPF1_pole_v2/Del1 */ + X_SVmcPmm__HE456_Del1 = rVcVmcPmm_Xd_AccPedalPos; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /DLPF1_pole_v2/Del2 */ + X_SVmcPmm__HE456_Del2 = 0; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Lo + gicalOperator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator1 */ + xVcVmcPmm_B_FastEngmtPwrDemand = yVcVmcEm_B_RespStartReq && (rVcVmcPmm_Xd_AccPedalPos > + cVcVmcPmm_Xd_AccPedFastEngmtMin); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Log + icalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalSwit + ch1/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + LogicalSwitch1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 */ + SVmcPmm__HE458_Switch = X_SVmcPmm__HE6_UnitDelay10; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + LogicalSwitch1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + SVmcPmm__HE458_Switch = X_SVmcPmm__HE6_UnitDelay6; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Lo + gicalOperator10 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/LogicalOperator43 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator29 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator32 */ + xVcVmcPmm_B_FastEngmtIsgStrt = SVmcPmm__HE458_Switch && ((sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse)) && + (sVcVdm_Tq_BrkTqAtWhlsReq <= cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Lo + gicalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/LogicalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator6 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Out + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator3 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/RelationalOperator2 */ + SVmcPmm__HE226_LogicalOperator3 = (sVcVmcPmm_D_TransModeReq == 1) && ((sVcScDep_D_DrvgDirDes + == 1) || (sVcScDep_D_DrvgDirDes == 3)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Lo + gicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/LogicalOperator7 */ + SVmcPmm__HE226_LogicalOperator6 = (xVcVmcPmm_B_FastEngmtTrqDemand || + xVcVmcPmm_B_FastEngmtPwrDemand || xVcVmcPmm_B_FastEngmtIsgStrt) && + SVmcPmm__HE226_LogicalOperator3; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Sig + nalDelay/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/SignalDelay + /Switch: Omitted comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out2/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_CrShPathEnable) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + SignalDelay/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Engag + ementMode/SignalDelay/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + R_EngagementMode/SignalDelay/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121R_EngagementMode/SignalDelay/ts */ + X_SVmcPmm__HE461_UnitDelay = X_SVmcPmm__HE461_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + SignalDelay/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + R_EngagementMode/SignalDelay/UnitDelay */ + X_SVmcPmm__HE461_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/SR + _FF8/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/SR_FF8/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/EdgeDetect2/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/EdgeDetect2/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_Enga + gementMode/SR_FF8/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_E + ngagementMode/SignalDelay/UnitDelay */ + xVcVmcPmm_B_EngmtModFast = (SVmcPmm__HE226_LogicalOperator6 && (!(X_SVmcPmm__HE457_Delay))) || + (SVmcPmm__HE226_LogicalOperator3 && (X_SVmcPmm__HE461_UnitDelay <= + cVcVmcPmm_t_EngEngmtFastRstDelay) && X_SVmcPmm__HE460_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /SR_FF8/UnitDelay1 */ + X_SVmcPmm__HE460_UnitDelay1 = xVcVmcPmm_B_EngmtModFast; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode + /EdgeDetect2/Delay */ + X_SVmcPmm__HE457_Delay = SVmcPmm__HE226_LogicalOperator6; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Log + icalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalSwit + ch2/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_EngmtModFast) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + LogicalSwitch2/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out22/Encapsula + tedSubsystem/Out */ + sVcVmcPmm_D_EngagementMode = cVcVmcPmm_D_EngmtModFast; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/ + LogicalSwitch2/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out22/Encapsula + tedSubsystem/Out */ + sVcVmcPmm_D_EngagementMode = cVcVmcPmm_D_EngmtModSmooth; + } + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N + 1_StartModeHybrid12V/Enable: Enable condition + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N + 1_StartModeHybrid12V/Enable: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseStartModeHybrid12V) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + UInt8 SVmcPmm__HE403_MinMax; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + Bool SVmcPmm__HE403__gicalOperator11; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + Bool SVmcPmm__HE403__gicalOperator12; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* SLStaticLocalInit: Default storage class for static local variables with initvalue | + Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE404_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE405_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE406_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE407_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE408_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE409_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE410_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE411_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE412_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE413_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE414_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE415_Delay = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE422_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE423_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE424_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE425_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE426_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE427_UnitDelay1 = 0; + #endif + + /* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/SR_FF5/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF5/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF5/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator53 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF5/LogOp */ + X_SVmcPmm__HE425_UnitDelay1 = (!(SVmcPmm__HE829_Switch)) || ((CVmcPmm__HE1_D_IceStatus + != 2) && X_SVmcPmm__HE425_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/LogicalOperator52 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator51 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF5/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator50 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out + */ + SVmcPmm__HE403__gicalOperator52 = X_SVmcPmm__HE425_UnitDelay1 && + (yVcDsePcr_B_PwrUpIceStrtReq || yVcVmcEm_B_PwrUpIceStrtReq || + xVcVmcPmm_B_EngRunReqEngClnt || (yVcVmcPmm_B_EngRunReqTrans && + cVcVmcPmm_B_PwrUpIceStrtReqUseTrans)); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator13 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator14 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/RelationalOperator5 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_St + artModeHybrid12V/121N1_StartModeHybrid12V/Sum + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF2/LogOp */ + X_SVmcPmm__HE424_UnitDelay1 = yVcDsePcr_B_SafeEngStrtReq || yVcFsdPc_B_RunDry || + (cVcVmcPmm_B_UseLastStrtMod && (rVcVmcPmm_D_StallAbortNum >= ((UInt8) + (cVcVmcPmm_D_AbortStart - 1)))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE409_Delay))) && ((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE411_Delay) && X_SVmcPmm__HE424_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect5/Delay */ + X_SVmcPmm__HE411_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect3/Delay */ + X_SVmcPmm__HE409_Delay = SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/SR_FF9/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF9/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF9/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator9 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/RelationalOperator8 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out22/Encaps + ulatedSubsystem/Out + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/RelationalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/RelationalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF9/LogOp */ + X_SVmcPmm__HE427_UnitDelay1 = ((sVcVmcPmm_D_EngagementMode == cVcVmcPmm_D_EngmtModFast) + && ((sVcDtcAtr_D_GearLevAT == cVcVmcPmm_D_GearLevRespStrtOK1) || (sVcDtcAtr_D_GearLevAT + == cVcVmcPmm_D_GearLevRespStrtOK2) || cVcVmcPmm_B_IgnoreGearLevRespStrt)) || + ((SVmcPmm__HE829_Switch || (!(X_SVmcPmm__HE405_Delay))) && + ((!(xVcVmcPmm_B_EngOnReqEng)) || X_SVmcPmm__HE408_Delay) && + X_SVmcPmm__HE427_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect2/Delay */ + X_SVmcPmm__HE408_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect1/Delay */ + X_SVmcPmm__HE405_Delay = SVmcPmm__HE829_Switch; + + /* MinMax: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHyb + rid12V/121N1_StartModeHybrid12V/MinMax */ + if (sVcTmStrt_D_EngUseReq > sVcEmiHeat_D_EngUseReq) { + SVmcPmm__HE403_MinMax = sVcTmStrt_D_EngUseReq; + } + else { + SVmcPmm__HE403_MinMax = sVcEmiHeat_D_EngUseReq; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalOperator8 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/RelationalOperator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/RelationalOperator3 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out1/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp */ + xVcVmcPmm_B_EmiStrt = (cVcVmcPmm_B_UseFirstStartMode && (sVcVmcPmm_D_TransModeReq > 2) + && (SVmcPmm__HE403_MinMax == 1)) || SVmcPmm__HE403__gicalOperator52 || + ((SVmcPmm__HE829_Switch || (!(X_SVmcPmm__HE404_Delay))) && + ((!(xVcVmcPmm_B_EngOnReqEng)) || X_SVmcPmm__HE410_Delay) && + X_SVmcPmm__HE422_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/SR_FF1/UnitDelay1 */ + X_SVmcPmm__HE422_UnitDelay1 = xVcVmcPmm_B_EmiStrt; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect4/Delay */ + X_SVmcPmm__HE410_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect/Delay */ + X_SVmcPmm__HE404_Delay = SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/LogicalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect8/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect6/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect6/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect8/Logic */ + SVmcPmm__HE403__gicalOperator11 = ((!(SVmcPmm__HE829_Switch)) && X_SVmcPmm__HE412_Delay) + || (xVcVmcPmm_B_EngOnReqEng && (!(X_SVmcPmm__HE414_Delay))); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect8/Delay */ + X_SVmcPmm__HE414_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect6/Delay */ + X_SVmcPmm__HE412_Delay = SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/SR_FF8/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF8/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF8/LogOp2 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF8/LogOp */ + X_SVmcPmm__HE426_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay10 || + (((!(SVmcPmm__HE403__gicalOperator11)) || X_SVmcPmm__HE413_Delay) && + X_SVmcPmm__HE426_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect7/Delay */ + X_SVmcPmm__HE413_Delay = SVmcPmm__HE403__gicalOperator11; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/LogicalOperator12 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect11/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect10/Logic1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect10/Logic + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/EdgeDetect11/Logic */ + SVmcPmm__HE403__gicalOperator12 = ((!(SVmcPmm__HE829_Switch)) && X_SVmcPmm__HE406_Delay) + || (xVcVmcPmm_B_EngOnReqEng && (!(X_SVmcPmm__HE407_Delay))); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect11/Delay */ + X_SVmcPmm__HE407_Delay = xVcVmcPmm_B_EngOnReqEng; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect10/Delay */ + X_SVmcPmm__HE406_Delay = SVmcPmm__HE829_Switch; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/SR_FF11/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF11/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF11/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF11/LogOp */ + X_SVmcPmm__HE423_UnitDelay1 = SVmcPmm__HE6_Merge3 || + (((!(SVmcPmm__HE403__gicalOperator12)) || X_SVmcPmm__HE415_Delay) && + X_SVmcPmm__HE423_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/EdgeDetect9/Delay */ + X_SVmcPmm__HE415_Delay = SVmcPmm__HE403__gicalOperator12; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHyb + rid12V/121N1_StartModeHybrid12V/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/1 + 21N1_StartModeHybrid12V/LogicalSwitch1/Switch: Omitted comparison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF2/UnitDelay1 */ + if (X_SVmcPmm__HE424_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMode + Hybrid12V/121N1_StartModeHybrid12V/LogicalSwitch1/Switch */ + SVmcPmm__HE416_Switch = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMode + Hybrid12V/121N1_StartModeHybrid12V/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12 + V/121N1_StartModeHybrid12V/LogicalSwitch4/Switch: Omitted comparison with constant + . + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contr + ol/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF9/UnitDelay1 */ + if (X_SVmcPmm__HE427_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartM + odeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch1/Switch */ + SVmcPmm__HE416_Switch = 3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartM + odeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybri + d12V/121N1_StartModeHybrid12V/LogicalSwitch3/Switch: Omitted comparison with co + nstant. */ + if (xVcVmcPmm_B_EmiStrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_Sta + rtModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch1/Switch + */ + SVmcPmm__HE416_Switch = 0; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_Sta + rtModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHy + brid12V/121N1_StartModeHybrid12V/LogicalSwitch2/Switch: Omitted comparison w + ith constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine + _Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF8/UnitDelay1 + */ + if (X_SVmcPmm__HE426_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_ + StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_ + Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch3/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_ + Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch4/S + witch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_ + Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch1/S + witch */ + SVmcPmm__HE416_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_ + StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch13/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartMod + eHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch13/Switch: Omitted compa + rison with constant. + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Eng + ine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF11/Unit + Delay1 */ + if (X_SVmcPmm__HE423_UnitDelay1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12 + 1N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_Start + ModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch5/Switch: Omitted + comparison with constant. */ + if (cVcVmcPmm_B_UseStrtMde3All12vStrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control + /121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch5/Sw + itch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch13/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch1/Switch */ + SVmcPmm__HE416_Switch = 3; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control + /121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch5/Sw + itch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch13/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_E + ngine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/Logi + calSwitch1/Switch */ + SVmcPmm__HE416_Switch = 1; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12 + 1N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwitch13/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engi + ne_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwi + tch2/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engi + ne_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwi + tch3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engi + ne_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwi + tch4/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engi + ne_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/LogicalSwi + tch1/Switch */ + SVmcPmm__HE416_Switch = cVcVmcPmm_D_StrtModDft; + } + } + } + } + } + } + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/Resc + aler */ + SVmcPmm__HE222_Rescaler = 1; + #endif + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Rela + tionalOperator11 */ + SVmcPmm__HE223__ionalOperator11 = sVcScIn_X_AccPedalPos > cVcVmcPmm_X_StrtMdeAcc; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Rela + tionalOperator18 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE223__ionalOperator18 = CVmcPmm__HE1_D_IceStatus == 2; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SignalDe + lay3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SignalDelay3/Swi + tch: Omitted comparison with constant. */ + if (SVmcPmm__HE223__ionalOperator18) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + lDelay3/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Start + Mode/SignalDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121O_StartMode/ts12 */ + X_SVmcPmm__HE436_UnitDelay = X_SVmcPmm__HE436_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + lDelay3/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay3/UnitDelay */ + X_SVmcPmm__HE436_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SignalDe + lay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SignalDelay2/Swi + tch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/LogicalOperator41 */ + if (!(SVmcPmm__HE223__ionalOperator11)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + lDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Start + Mode/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121O_StartMode/ts11 */ + X_SVmcPmm__HE435_UnitDelay = X_SVmcPmm__HE435_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + lDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE435_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF2/ + LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/SR_FF2/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/LogicalOperator42 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/LogicalOperator43 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/SR_FF2/LogOp + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_S + tartMode/SignalDelay3/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_S + tartMode/SignalDelay2/UnitDelay */ + xVcVmcPmm_B_StrtMdeAcc = (SVmcPmm__HE223__ionalOperator11 && + (!(SVmcPmm__HE223__ionalOperator18))) || ((X_SVmcPmm__HE436_UnitDelay <= + cVcVmcPmm_t_StrtMdeAccRun) && (X_SVmcPmm__HE435_UnitDelay <= cVcVmcPmm_t_StrtMdeAccRst) && + X_SVmcPmm__HE433_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_F + F2/UnitDelay1 */ + X_SVmcPmm__HE433_UnitDelay1 = xVcVmcPmm_B_StrtMdeAcc; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Rela + tionalOperator1 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE223__tionalOperator1 = CVmcPmm__HE1_D_IceStatus == 2; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SignalDe + lay1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SignalDelay1/Swi + tch: Omitted comparison with constant. */ + if (SVmcPmm__HE223__tionalOperator1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + lDelay1/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Start + Mode/SignalDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121O_StartMode/ts6 */ + X_SVmcPmm__HE434_UnitDelay = X_SVmcPmm__HE434_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Signa + lDelay1/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE434_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/LogicalS + witch15/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/LogicalSwitch15/ + Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_StrtMdeStopTrig) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logic + alSwitch15/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_S + tartMode/LogicalOperator26 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/RelationalOperator6 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE428_Switch = (CVmcPmm__HE1_D_IceStatus == 3) && X_SVmcPmm__HE223_UnitDelay8; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logic + alSwitch15/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay1/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + O_StartMode/SignalDelay1/UnitDelay */ + SVmcPmm__HE428_Switch = X_SVmcPmm__HE434_UnitDelay > cVcVmcPmm_t_StrtMdeRunning; + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Unit + Delay8 */ + X_SVmcPmm__HE223_UnitDelay8 = SVmcPmm__HE223__tionalOperator1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF1/ + LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/SR_FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/LogicalOperator49 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Star + tMode/SR_FF1/LogOp */ + xVcVmcPmm_B_StrtMdeRunning = (SVmcPmm__HE428_Switch && SVmcPmm__HE829_Switch) || + (SVmcPmm__HE829_Switch && X_SVmcPmm__HE432_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_F + F1/UnitDelay1 */ + X_SVmcPmm__HE432_UnitDelay1 = xVcVmcPmm_B_StrtMdeRunning; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch/Switch: Omitted c + omparison with constant. */ + if (cVcVmcPmm_D_StartMode_swi) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = cVcVmcPmm_D_StartMode_dbi; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch14/Swit + ch */ + if (Vc_Pvc_Hw_B_Isg_CN >= 1 /* 0.5 */) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch63/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch63/Switch: O + mitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Log + icalOperator28 */ + if (!(SVmcPmm__HE222_Rescaler)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6 + 3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = SVmcPmm__HE398_Switch; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch6 + 3/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = SVmcPmm__HE416_Switch; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Lo + gicalSwitch23/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/LogicalSwi + tch23/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_StrtMdeRunning) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode + /LogicalSwitch25/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logical + Switch25/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_StrtMdeSet) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartM + ode/LogicalSwitch24/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/Logi + calSwitch24/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_StrtMdeAcc) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Sta + rtMode/LogicalSwitch24/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121O_StartMode/LogicalSwitch25/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121O_StartMode/LogicalSwitch23/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/LogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/LogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_Sta + rtMode/LogicalSwitch24/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121O_StartMode/LogicalSwitch25/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121O_StartMode/LogicalSwitch23/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/LogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/LogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = 1; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartM + ode/LogicalSwitch25/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/121O_StartMode/LogicalSwitch23/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/LogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Contro + l/LogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = 0; + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode + /LogicalSwitch23/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch14/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/L + ogicalSwitch/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE3_UnitDelay2 = 0; + } + } + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE6_UnitDelay = X_SVmcPmm__HE3_UnitDelay2; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/UnitDelay3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE170_UnitDelay3 = X_SVmcPmm__HE3_UnitDelay2; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + X_SVmcPmm__HE6_UnitDelay1 = X_SVmcPmm__HE3_UnitDelay2; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/y3/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/UnitDelay2 */ + sVcVmcPmm_D_StartMode = X_SVmcPmm__HE3_UnitDelay2; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/y29/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + UnitDelay8 */ + yVcVmcPmm_B_StallPwdReq = X_SVmcPmm__HE172_UnitDelay8; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/y19/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_FCAdaptReq = SVmcPmm__HE159_LogOp3; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/y11/EncapsulatedSubsystem/Out + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + sVcVmcPmm_D_IceStatus = CVmcPmm__HE1_D_IceStatus; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/y1/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay14 */ + yVcVmcPmm_B_EngOnReq = X_SVmcPmm__HE6_UnitDelay14; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out43/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay5 */ + yVcVmcPmm_B_FastIsgStopReq = X_SVmcPmm__HE6_UnitDelay5; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out42/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay6 */ + yVcVmcPmm_B_IsgStrtPahReq = X_SVmcPmm__HE6_UnitDelay6; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out4/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay8 */ + yVcVmcPmm_B_EradPathEnable = X_SVmcPmm__HE6_UnitDelay8; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out25/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay13 */ + yVcVmcPmm_B_IsgPathEnable = X_SVmcPmm__HE6_UnitDelay13; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out24/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay4 */ + yVcVmcPmm_B_EfadPathEnable = X_SVmcPmm__HE6_UnitDelay4; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out20/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/UnitDelay10 */ + yVcVmcPmm_B_IsgStartReq = X_SVmcPmm__HE6_UnitDelay10; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out19/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_12VStartEnable = SVmcPmm__HE6_Merge3; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out15/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF2/UnitDelay1 */ + yVcVmcPmm_B_IceStall = X_SVmcPmm__HE590_UnitDelay1; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/Switch1: Omitted + comparison with constant. */ + if (SVmcPmm__HE172_LogOp1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/Switc + h1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDe + lay7/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay7/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_ + Control/ts9 */ + X_SVmcPmm__HE588_UnitDelay = X_SVmcPmm__HE588_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/Switc + h1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Contr + ol/OnDelay7/UnitDelay */ + X_SVmcPmm__HE588_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/Rela + tionalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + OnDelay7/UnitDelay */ + xVcVmcPmm_B_StallRunUnintd = X_SVmcPmm__HE588_UnitDelay > cVcVmcPmm_t_StallRunUnintd; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch10/S + witch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch10/Switch: O + mitted comparison with constant. */ + if (cVcVmcPmm_B_StallRunUnintd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 0/Switch */ + SVmcPmm__HE532_Switch = xVcVmcPmm_B_StallRunUnintd; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1 + 0/Switch */ + SVmcPmm__HE532_Switch = 0; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOpe + rator20 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE172__ionalOperator20 = CVmcPmm__HE1_D_IceStatus == 2; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF1/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF1/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF1/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op45 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Log + Op44 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_ + FF1/LogOp */ + X_SVmcPmm__HE589_UnitDelay1 = SVmcPmm__HE532_Switch || (yVcPpmRc_B_ShutOffReq && + cVcVmcPmm_B_UnintdStallRcShOff) || (((!(SVmcPmm__HE172__ionalOperator20)) || + X_SVmcPmm__HE526_Delay) && SVmcPmm__HE829_Switch && X_SVmcPmm__HE589_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/EdgeDetect2/D + elay */ + X_SVmcPmm__HE526_Delay = SVmcPmm__HE172__ionalOperator20; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF1/Q/EncapsulatedSubs + ystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/ + SR_FF1/UnitDelay1 */ + yVcVmcPmm_B_UnintdStall = X_SVmcPmm__HE589_UnitDelay1; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out19/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOp + erator11 */ + yVcVmcPmm_B_PwrUpIceStrtReq = SVmcPmm__HE389__gicalOperator52 || + SVmcPmm__HE403__gicalOperator52; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch36/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch36/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngOnOff) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch36/Swit + ch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum */ + Aux_U32 = 1; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch36/Swit + ch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum */ + Aux_U32 = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch37/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch37/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqDriver) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch37/Swit + ch */ + SVmcPmm__HE265_Switch = 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch37/Swit + ch */ + SVmcPmm__HE265_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch38/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch38/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqPsm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch38/Swit + ch */ + SVmcPmm__HE266_Switch = 4; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch38/Swit + ch */ + SVmcPmm__HE266_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch39/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch39/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqEm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch39/Swit + ch */ + SVmcPmm__HE267_Switch = 8; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch39/Swit + ch */ + SVmcPmm__HE267_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch40/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch40/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out10/Encapsulated + Subsystem/Out */ + if (yVcVmcPmm_B_EngRunReqTm) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch40/Swit + ch */ + SVmcPmm__HE269_Switch = 16; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch40/Swit + ch */ + SVmcPmm__HE269_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch41/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch41/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqDep) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch41/Swit + ch */ + SVmcPmm__HE270_Switch = 32; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch41/Swit + ch */ + SVmcPmm__HE270_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch42/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch42/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqTrans) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch42/Swit + ch */ + SVmcPmm__HE271_Switch = 64; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch42/Swit + ch */ + SVmcPmm__HE271_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch43/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch43/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/EncapsulatedS + ubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqClim) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch43/Swit + ch */ + SVmcPmm__HE272_Switch = 128; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch43/Swit + ch */ + SVmcPmm__HE272_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch44/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch44/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqPcr) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch44/Swit + ch */ + SVmcPmm__HE273_Switch = 256; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch44/Swit + ch */ + SVmcPmm__HE273_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch45/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch45/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqFCAdapt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch45/Swit + ch */ + SVmcPmm__HE274_Switch = 512; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch45/Swit + ch */ + SVmcPmm__HE274_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch46/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch46/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqBrake) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch46/Swit + ch */ + SVmcPmm__HE275_Switch = 1024; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch46/Swit + ch */ + SVmcPmm__HE275_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch47/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch47/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/Encapsulated + Subsystem/Out */ + if (yVcVmcPmm_B_EngRunReqFuel) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch47/Swit + ch */ + SVmcPmm__HE276_Switch = 2048; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch47/Swit + ch */ + SVmcPmm__HE276_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch48/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch48/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqIsg) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch48/Swit + ch */ + SVmcPmm__HE277_Switch = 4096; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch48/Swit + ch */ + SVmcPmm__HE277_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch49/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch49/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqStabCtrl) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch49/Swit + ch */ + SVmcPmm__HE278_Switch = 8192; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch49/Swit + ch */ + SVmcPmm__HE278_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch50/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch50/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqDrLeave) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch50/Swit + ch */ + SVmcPmm__HE280_Switch = 16384; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch50/Swit + ch */ + SVmcPmm__HE280_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch51/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch51/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_RunReqIceStall) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch51/Swit + ch */ + SVmcPmm__HE281_Switch = 32768; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch51/Swit + ch */ + SVmcPmm__HE281_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch53/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch53/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqChas) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch53/Swit + ch */ + SVmcPmm__HE283_Switch = 131072; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch53/Swit + ch */ + SVmcPmm__HE283_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch56/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch56/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/Encapsulated + Subsystem/Out */ + if (yVcVmcPmm_B_EngRunReqObd) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch56/Swit + ch */ + SVmcPmm__HE286_Switch = 262144; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch56/Swit + ch */ + SVmcPmm__HE286_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch57/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch57/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out17/Encapsulated + Subsystem/Out */ + if (yVcVmcPmm_B_EngRunReqRc) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch57/Swit + ch */ + SVmcPmm__HE287_Switch = 524288; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch57/Swit + ch */ + SVmcPmm__HE287_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch58/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch58/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out26/Encapsulated + Subsystem/Out */ + if (yVcVmcPmm_B_EngRunReqSapp) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch58/Swit + ch */ + SVmcPmm__HE288_Switch = 1048576; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch58/Swit + ch */ + SVmcPmm__HE288_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch59/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch59/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out3/EncapsulatedS + ubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqEms) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch59/Swit + ch */ + SVmcPmm__HE289_Switch = 2097152; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch59/Swit + ch */ + SVmcPmm__HE289_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch60/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch60/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out4/EncapsulatedS + ubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqEmLv) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch60/Swit + ch */ + SVmcPmm__HE291_Switch = 4194304; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch60/Swit + ch */ + SVmcPmm__HE291_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch61/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch61/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqRemote) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch61/Swit + ch */ + SVmcPmm__HE292_Switch = 8388608; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch61/Swit + ch */ + SVmcPmm__HE292_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch62/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch62/Switch: Omitted + comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out7/EncapsulatedS + ubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqFanAfterrun) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch62/Swit + ch */ + SVmcPmm__HE293_Switch = 16777216; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch62/Swit + ch */ + SVmcPmm__HE293_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch66/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch66/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqCEC) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch66/Swit + ch */ + SVmcPmm__HE297_Switch = 33554432; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch66/Swit + ch */ + SVmcPmm__HE297_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch71/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch71/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqEngClnt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch71/Swit + ch */ + SVmcPmm__HE303_Switch = 67108864; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch71/Swit + ch */ + SVmcPmm__HE303_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch72/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch72/Switch: Omitted + comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqMaxTime) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch72/Swit + ch */ + SVmcPmm__HE304_Switch = 67108864; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch72/Swit + ch */ + SVmcPmm__HE304_Switch = 0; + } + Aux_U32 += SVmcPmm__HE265_Switch; + Aux_U32 += SVmcPmm__HE266_Switch; + Aux_U32 += SVmcPmm__HE267_Switch; + Aux_U32 += SVmcPmm__HE269_Switch; + Aux_U32 += SVmcPmm__HE270_Switch; + Aux_U32 += SVmcPmm__HE271_Switch; + Aux_U32 += SVmcPmm__HE272_Switch; + Aux_U32 += SVmcPmm__HE273_Switch; + Aux_U32 += SVmcPmm__HE274_Switch; + Aux_U32 += SVmcPmm__HE275_Switch; + Aux_U32 += SVmcPmm__HE276_Switch; + Aux_U32 += SVmcPmm__HE277_Switch; + Aux_U32 += SVmcPmm__HE278_Switch; + Aux_U32 += SVmcPmm__HE280_Switch; + Aux_U32 += SVmcPmm__HE281_Switch; + Aux_U32 += SVmcPmm__HE283_Switch; + Aux_U32 += SVmcPmm__HE286_Switch; + Aux_U32 += SVmcPmm__HE287_Switch; + Aux_U32 += SVmcPmm__HE288_Switch; + Aux_U32 += SVmcPmm__HE289_Switch; + Aux_U32 += SVmcPmm__HE291_Switch; + Aux_U32 += SVmcPmm__HE292_Switch; + Aux_U32 += SVmcPmm__HE293_Switch; + Aux_U32 += SVmcPmm__HE297_Switch; + Aux_U32 += SVmcPmm__HE303_Switch; + rVcVmcPmm_D_EngRunReqLogg = Aux_U32 + SVmcPmm__HE304_Switch; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out18/EncapsulatedSubsystem/Out + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Gain + # combined # Outport: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/DID/Out1 + */ + sVcVmcPmm_D_EngRunReqLogg = rVcVmcPmm_D_EngRunReqLogg; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/y5/EncapsulatedSubsystem/Out */ + sVcVmcPmm_Z_HillGradientDeg = SVmcPmm__HE153__HillGradAcc2deg; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Out1/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/LogicalOperator2 */ + yVcVmcPmm_B_PowerDownReq = SVmcPmm__HE30_Switch || xVcVmcPmm_B_DrLeavePowerDownReq; + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + i/SignalDelay4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Signal + Delay4/Switch: Omitted comparison with constant. */ + if (xVcVmcPmm_B_EngRunReqFCAdapt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay4/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_En + gRunReqDispHmi/SignalDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121P_EngRunReqDispHmi/SignalDelay4/ts */ + X_SVmcPmm__HE446_UnitDelay = X_SVmcPmm__HE446_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay4/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay4/UnitDelay */ + X_SVmcPmm__HE446_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + i/SignalDelay5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Signal + Delay5/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator3 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out21/Encapsula + tedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out5/Encapsulat + edSubsystem/Out */ + if (xVcVmcPmm_B_EngRunReqPcr || yVcVmcPmm_B_EngRunReqClim || xVcVmcPmm_B_EngRunReqPsm || + yVcVmcPmm_B_EngRunReqFuel) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay5/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_En + gRunReqDispHmi/SignalDelay5/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay5/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121P_EngRunReqDispHmi/SignalDelay5/ts */ + X_SVmcPmm__HE447_UnitDelay = X_SVmcPmm__HE447_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay5/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay5/UnitDelay */ + X_SVmcPmm__HE447_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + i/SignalDelay8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Signal + Delay8/Switch: Omitted comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out17/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqBrake) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay8/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_En + gRunReqDispHmi/SignalDelay8/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay8/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121P_EngRunReqDispHmi/SignalDelay8/ts */ + X_SVmcPmm__HE449_UnitDelay = X_SVmcPmm__HE449_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay8/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay8/UnitDelay */ + X_SVmcPmm__HE449_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + i/SignalDelay7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Signal + Delay7/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator48 */ + if (!(xVcVmcPmm_B_EngRunReqEm)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay7/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_En + gRunReqDispHmi/SignalDelay7/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay7/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121P_EngRunReqDispHmi/SignalDelay7/ts */ + X_SVmcPmm__HE448_UnitDelay = X_SVmcPmm__HE448_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay7/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay7/UnitDelay */ + X_SVmcPmm__HE448_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispH + mi/SR_FF3/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SR_FF3/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/SR_FF3/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator23 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay7/Rel + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/Encapsula + tedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay7/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/SR_FF3/LogOp + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out20/Encapsula + tedSubsystem/Out */ + X_SVmcPmm__HE443_UnitDelay1 = ((X_SVmcPmm__HE448_UnitDelay > cVcVmcPmm_t_RunReqObdDelayHmi) + && yVcVmcPmm_B_EngRunReqObd) || (yVcVmcPmm_B_EngRunReqObd && + X_SVmcPmm__HE443_UnitDelay1); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispH + mi/SR_FF/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SR_FF/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/SR_FF/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/RelationalOperator10 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/SR_FF/LogOp + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + X_SVmcPmm__HE442_UnitDelay1 = ((sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_TransRunRqDlyMaxHmi) && + yVcVmcPmm_B_EngRunReqTrans) || (yVcVmcPmm_B_EngRunReqTrans && + X_SVmcPmm__HE442_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHm + i/SignalDelay2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Signal + Delay2/Switch: Omitted comparison with constant. + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + if (yVcVmcPmm_B_EngRunReqTrans) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay2/Switch + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_En + gRunReqDispHmi/SignalDelay2/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay2/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Con + trol/121P_EngRunReqDispHmi/SignalDelay2/ts */ + X_SVmcPmm__HE445_UnitDelay = X_SVmcPmm__HE445_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDis + pHmi/SignalDelay2/Switch + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/ + 121P_EngRunReqDispHmi/SignalDelay2/UnitDelay */ + X_SVmcPmm__HE445_UnitDelay = 0.F; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispH + mi/SR_FF4/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/SR_FF4/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator45 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/EdgeDetectRise3/LogicalOperator + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/EdgeDetectRise3/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/SR_FF4/LogOp + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + xVcVmcPmm_B_HeatUpEOP = (yVcVmcPmm_B_EngRunReqTrans && (SVmcPmm__HE829_Switch && + (!(X_SVmcPmm__HE439_UnitDelay1)))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE437_Delay))) && (yVcVmcPmm_B_EngRunReqTrans || + (!(X_SVmcPmm__HE438_Delay))) && X_SVmcPmm__HE444_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDi + spHmi/SR_FF4/UnitDelay1 */ + X_SVmcPmm__HE444_UnitDelay1 = xVcVmcPmm_B_HeatUpEOP; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDi + spHmi/EdgeDetect1/Delay + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Out14/EncapsulatedSubsystem/Out */ + X_SVmcPmm__HE438_Delay = yVcVmcPmm_B_EngRunReqTrans; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDi + spHmi/EdgeDetect/Delay */ + X_SVmcPmm__HE437_Delay = SVmcPmm__HE829_Switch; + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDi + spHmi/EdgeDetectRise3/UnitDelay1 */ + X_SVmcPmm__HE439_UnitDelay1 = SVmcPmm__HE829_Switch; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Out12/ + EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator41 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator22 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SR_FF3/UnitDelay1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay8/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay5/Rel + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay4/Rel + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator20 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator1 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Out2/Encapsulat + edSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay4/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay5/UnitDelay + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay8/UnitDelay + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay2/Rel + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SR_FF/UnitDelay1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121 + P_EngRunReqDispHmi/SignalDelay2/UnitDelay */ + yVcVmcPmm_B_RunReqSystemHmi = ((yVcTmStrt_B_EngRunTmLong || yVcCmnEngRunReqCEC_B_ReqLong) + && yVcVmcPmm_B_EngRunReqTot) || (X_SVmcPmm__HE446_UnitDelay > + cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi) || (X_SVmcPmm__HE447_UnitDelay > + cVcVmcPmm_t_RunReqOnDelayHmi) || (X_SVmcPmm__HE449_UnitDelay > + cVcVmcPmm_t_BrakeRunReqOnDelayHmi) || X_SVmcPmm__HE443_UnitDelay1 || + (X_SVmcPmm__HE442_UnitDelay1 || (X_SVmcPmm__HE445_UnitDelay > + cVcVmcPmm_t_TransRunReqOnDelayHmi)) || xVcVmcPmm_B_HeatUpEOP; + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/Out11/ + EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_E + ngRunReqDispHmi/LogicalOperator40 */ + yVcVmcPmm_B_RunReqDriverHmi = xVcVmcPmm_B_EngRunReqDriver || xVcVmcPmm_B_EngRunReqEm; + #endif + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalOperator22 */ + xVcVmcPmm_B_TrailerPresent = yVcTrm_B_TrlrPrsnt || + yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt; + #if Vc_Pvc_Sw_B_StopStart + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch23/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch23/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActHood) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch23/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator24 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out9/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator23 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator6 */ + yVcVmcPmm_B_SsActHoodHMI = (sVcCem_D_HoodSts == 1) && (sVcVmm_D_CarModSts1 != 5); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch23/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out9/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActHoodHMI = 0; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay/Rel */ + SVmcPmm__HE90_Rel = cVcVmcPmm_Te_AmbHighH <= sVcEc_Te_Amb; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay/Rel1 */ + SVmcPmm__HE90_Rel1 = sVcEc_Te_Amb <= cVcVmcPmm_Te_AmbHighL; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/Relay/LogicalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator4 */ + xVcVmcPmm_B_AmbTempH = (SVmcPmm__HE90_Rel && (!(SVmcPmm__HE90_Rel1))) || + ((!(SVmcPmm__HE90_Rel)) && (!(SVmcPmm__HE90_Rel1)) && X_SVmcPmm__HE90_UnitDelay); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay/UnitDelay */ + X_SVmcPmm__HE90_UnitDelay = xVcVmcPmm_B_AmbTempH; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay1/Rel */ + SVmcPmm__HE91_Rel = cVcVmcPmm_Te_AmbLowH <= sVcEc_Te_Amb; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay1/Rel1 */ + SVmcPmm__HE91_Rel1 = sVcEc_Te_Amb <= cVcVmcPmm_Te_AmbLowL; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/Relay1/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/Relay1/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay1/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay1/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay1/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay1/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay1/LogicalOperator4 */ + X_SVmcPmm__HE91_UnitDelay = (SVmcPmm__HE91_Rel && (!(SVmcPmm__HE91_Rel1))) || + ((!(SVmcPmm__HE91_Rel)) && (!(SVmcPmm__HE91_Rel1)) && X_SVmcPmm__HE91_UnitDelay); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/LogicalOperator8 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/Relay1/UnitDelay */ + xVcVmcPmm_B_AmbTempL = !(X_SVmcPmm__HE91_UnitDelay); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch9/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch9/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/LogicalOperator18 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator8 */ + if ((sVcEc_Qf_TeAmb == 3) && cVcVmcPmm_B_SsActTemp) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch9/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator9 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out3/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsAmbFault = xVcVmcPmm_B_AmbTempH || xVcVmcPmm_B_AmbTempL; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch9/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out3/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsAmbFault = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch20/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch20/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActTempStrt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch20/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out3/EncapsulatedSubsystem/Out */ + SVmcPmm__HE66_Switch = yVcVmcPmm_B_SsAmbFault; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch20/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator21 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator53 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out3/EncapsulatedSubsystem/Out + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator10 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator15 + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain + # combined # Gain: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/Gain */ + SVmcPmm__HE66_Switch = yVcVmcPmm_B_SsAmbFault && ((CVmcPmm__HE1_D_IceStatus == 1) || + (CVmcPmm__HE1_D_IceStatus == 2)); + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/LogicalOperator14 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconf + ig_uHev/11112_StopStartActive/Out8/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActAmbHMI = SVmcPmm__HE66_Switch && cVcVmcPmm_B_UseSsActTemp; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay2/Rel */ + SVmcPmm__HE92_Rel = cVcVmcPmm_p_AmbH <= sVcEc_p_Amb; + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/Relay2/Rel1 */ + SVmcPmm__HE92_Rel1 = sVcEc_p_Amb <= cVcVmcPmm_p_AmbL; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/Relay2/LogicalOperator3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/Relay2/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay2/LogicalOperator2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay2/LogicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay2/LogicalOperator4 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay2/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/Relay2/LogicalOperator4 */ + X_SVmcPmm__HE92_UnitDelay = (SVmcPmm__HE92_Rel && (!(SVmcPmm__HE92_Rel1))) || + ((!(SVmcPmm__HE92_Rel)) && (!(SVmcPmm__HE92_Rel1)) && X_SVmcPmm__HE92_UnitDelay); + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/LogicalOperator16 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/Relay2/UnitDelay */ + xVcVmcPmm_B_AmbPresLow = !(X_SVmcPmm__HE92_UnitDelay); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch12/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch12/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActAmbPres) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch12/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out7/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsAltitudeFault = xVcVmcPmm_B_AmbPresLow; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch12/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out7/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsAltitudeFault = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/SR_FF2/LogOp3 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/SR_FF2/UnitDelay1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/SR_FF2/LogOp2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator17 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/SR_FF2/LogOp */ + X_SVmcPmm__HE93_UnitDelay1 = (SVmcPmm__HE153__HillGradAcc2deg >= + cVcVmcPmm_Z_SsActTrailerUpHillH) || ((SVmcPmm__HE153__HillGradAcc2deg > + cVcVmcPmm_Z_SsActTrailerUpHillL) && X_SVmcPmm__HE93_UnitDelay1); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch6/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch6/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActTrailer) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch6/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator20 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out6/EncapsulatedSubsystem/Out + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/SR_FF2/UnitDelay1 */ + yVcVmcPmm_B_SsActTrailerHMI = X_SVmcPmm__HE93_UnitDelay1 && xVcVmcPmm_B_TrailerPresent; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch6/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out6/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActTrailerHMI = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/Switch1: Omitted comparison with cons + tant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator2 */ + if (!(yVcCem_B_BltLockStAtDrvr)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/UnitDe + lay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/ts1 */ + X_SVmcPmm__HE96_UnitDelay = X_SVmcPmm__HE96_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/UnitDe + lay */ + X_SVmcPmm__HE96_UnitDelay = 0.F; + } + + /* Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/RelationalOperator1 */ + SVmcPmm__HE27___tionalOperator1 = sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator5 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/RelationalOp + erator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/OnDelay1/UnitDelay + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator2 */ + xVcVmcPmm_B_SsActSeatBeltInhib = (X_SVmcPmm__HE96_UnitDelay > cVcVmcPmm_t_SsActSeatBelt) || + ((!(yVcCem_B_BltLockStAtDrvr)) && (!(SVmcPmm__HE27___tionalOperator1))); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch: Omitted comparison wit + h constant. */ + if (cVcVmcPmm_B_SsActSeatBeltNoSeq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch */ + xVcVmcPmm_B_SsActSeatBeltAllow = yVcCem_B_BltLockStAtDrvr; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator21 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator23 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/EdgeDetectRise1/Lo + gicalOperator + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/EdgeDetectRise1/Lo + gicalOperator1 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator4 + */ + xVcVmcPmm_B_SsActSeatBeltAllow = (yVcCem_B_BltLockStAtDrvr && + (SVmcPmm__HE27___tionalOperator1 && (!(X_SVmcPmm__HE94_UnitDelay1)))) || + ((!(SVmcPmm__HE27___tionalOperator1)) && yVcCem_B_BltLockStAtDrvr); + } + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/EdgeDetectRise1/UnitDelay1 */ + X_SVmcPmm__HE94_UnitDelay1 = SVmcPmm__HE27___tionalOperator1; + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp2 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp */ + xVcVmcPmm_B_SRSeatBeltAT = xVcVmcPmm_B_SsActSeatBeltInhib || + ((!(xVcVmcPmm_B_SsActSeatBeltAllow)) && X_SVmcPmm__HE97_UnitDelay1); + + /* Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfi + g_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/UnitDelay1 */ + X_SVmcPmm__HE97_UnitDelay1 = xVcVmcPmm_B_SRSeatBeltAT; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch2/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch2/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActSeatBelt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch17/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch17/Switch: Omitted comparison with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator17 */ + if (yVcDtcAtr_B_AT && cVcVmcPmm_B_SsActSeatBeltPrkBlock) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uH + ev/1111_Reconfig_uHev/11112_StopStartActive/LogicalSwitch2/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_ + Reconfig_uHev/11112_StopStartActive/Out5/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActSeatBeltHMI = xVcVmcPmm_B_SRSeatBeltAT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch17/Switch + # combined # Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uH + ev/1111_Reconfig_uHev/11112_StopStartActive/LogicalSwitch2/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator19 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_ + Reconfig_uHev/11112_StopStartActive/Out5/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActSeatBeltHMI = !(yVcCem_B_BltLockStAtDrvr); + } + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch2/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out5/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActSeatBeltHMI = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalSwitch18/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalSwitch18/Switch: Omitted compariso + n with constant. + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/LogicalOperator19 */ + if (!(yVcCem_B_BltLockStAtDrvr)) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalSwitch18/Switch */ + SVmcPmm__HE98_Switch = cVcVmcPmm_B_SsActDoorNoBelt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalSwitch18/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperat + or9 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperat + or8 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperat + or6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperat + or5 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperat + or10 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator1 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator2 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperat + or4 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator6 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator5 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/Relational + Operator4 */ + SVmcPmm__HE98_Switch = ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && + cVcVmcPmm_B_SsActDoorBeltP) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) && + cVcVmcPmm_B_SsActDoorBeltR) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) && + cVcVmcPmm_B_SsActDoorBeltN) || (((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevAT4th) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevAT3rd) || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevAT2nd)) && + cVcVmcPmm_B_SsActDoorBeltD); + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperator20 */ + xVcVmcPmm_B_SsActDriverLeaving = yVcDtcAtr_B_AT && xVcVmcPmm_B_DrDoorOpen && + SVmcPmm__HE98_Switch; + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch18/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch18/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActDriverLeaving) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch18/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out4/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActDoorOpenHMI = xVcVmcPmm_B_SsActDriverLeaving; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch18/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out4/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActDoorOpenHMI = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/OffDelay3/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/OffDelay3/Switch1: Omitted comparison with constant. */ + if (yVcVdm_B_AbsCtrlActv) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/OffDelay3/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay3/UnitDelay */ + X_SVmcPmm__HE77_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/OffDelay3/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11112_StopStartActive/OffDelay3/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay3/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11112_StopStartActive/ts6 */ + X_SVmcPmm__HE77_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE77_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch14/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch14/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActAbs) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch14/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay3/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay3/UnitDelay */ + SVmcPmm__HE60_Switch = X_SVmcPmm__HE77_UnitDelay <= cVcVmcPmm_t_SsActAbs; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch14/Switch */ + SVmcPmm__HE60_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/OffDelay1/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/OffDelay1/Switch1: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator3 */ + if (sVcVdm_D_EngRunngReqByBrk == 1) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/OffDelay1/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay1/UnitDelay */ + X_SVmcPmm__HE76_UnitDelay = 0.F; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/OffDelay1/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11112_StopStartActive/OffDelay1/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay1/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11112_StopStartActive/ts1 */ + X_SVmcPmm__HE76_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE76_UnitDelay; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch16/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch16/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActBrk) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch16/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay1/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OffDelay1/UnitDelay */ + SVmcPmm__HE62_Switch = X_SVmcPmm__HE76_UnitDelay <= cVcVmcPmm_t_SsActBrk; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch16/Switch */ + SVmcPmm__HE62_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/OnDelay4/Switch1 + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/OnDelay4/Switch1: Omitted comparison with constant. + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator2 */ + if (sVcDtcAtr_D_TransMode != sVcSpMon_D_PtTrsmModReq) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/OnDelay4/Switch1 + # combined # Sum: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/111 + 1_Reconfig_uHev/11112_StopStartActive/OnDelay4/Sum + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OnDelay4/UnitDelay + # combined # Data store read: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrat + egy_uHev/1111_Reconfig_uHev/11112_StopStartActive/ts5 */ + X_SVmcPmm__HE78_UnitDelay = X_SVmcPmm__HE78_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/OnDelay4/Switch1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/OnDelay4/UnitDelay */ + X_SVmcPmm__HE78_UnitDelay = 0.F; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch7/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch7/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActRcfSetAlt) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch7/Switch */ + SVmcPmm__HE73_Switch = yVcEc_B_SsRcfSetAlt; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch7/Switch */ + SVmcPmm__HE73_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch8/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch8/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActRcfSet) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch8/Switch */ + SVmcPmm__HE74_Switch = yVcEc_B_SsRcfSet; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch8/Switch */ + SVmcPmm__HE74_Switch = 0; + } + + /* Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_u + Hev/11112_StopStartActive/LogicalOperator25 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator14 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator13 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator4 */ + SVmcPmm__HE27_LogicalOperator25 = (sVcDeDmm_D_DrvMode == cVcVmcPmm_D_SsActDrMd1) || + (sVcDeDmm_D_DrvMode == cVcVmcPmm_D_SsActDrMd2) || (sVcDeDmm_D_DrvMode == + cVcVmcPmm_D_SsActDrMd3); + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch21/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch21/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActDrMdInv) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch21/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator26 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out10/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActDrMdHMI = !(SVmcPmm__HE27_LogicalOperator25); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch21/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out10/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActDrMdHMI = SVmcPmm__HE27_LogicalOperator25; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uH + ev/11112_StopStartActive/LogicalSwitch3/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/LogicalSwitch3/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_UseSsActive) { + /* SLLocal: Default storage class for local variables | Width: 8 */ + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE55_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE56_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE57_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE59_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE61_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE70_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/Pr + eprocessor IF */ + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE71_Switch; + #endif + + /* Vc_Pvc_Sw_B_StopStart */ + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch10/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch10/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActGpSs) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch10/Switch + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrateg + y_uHev/1111_Reconfig_uHev/11112_StopStartActive/RelationalOperator9 */ + SVmcPmm__HE56_Switch = sVcGp_D_StopStart != 2; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch10/Switch */ + SVmcPmm__HE56_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch11/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch11/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActNtrl) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch11/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator3 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator22 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator15 */ + SVmcPmm__HE57_Switch = (!(yVcScDep_B_NeutralMTValid)) && (!(yVcDtcAtr_B_AT)); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch11/Switch */ + SVmcPmm__HE57_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch15/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch15/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActEcoMde) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch15/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator12 */ + SVmcPmm__HE61_Switch = !(yVcDeDmm_B_EcoModeSs); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch15/Switch */ + SVmcPmm__HE61_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch1/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch1/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActTransFailure) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch1/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator4 */ + SVmcPmm__HE55_Switch = yVcTcm_B_TrsmNeutFailr && yVcDtcAtr_B_AT; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch1/Switch */ + SVmcPmm__HE55_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch4/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch4/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActTCMNodeAlive) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch4/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator6 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator1 */ + SVmcPmm__HE70_Switch = yVcDtcAtr_B_AT && (!(yVcEc_B_TCMNodeAlive)); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch4/Switch */ + SVmcPmm__HE70_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch5/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch5/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActTCMModeFail) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch5/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_u + Hev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator7 + # combined # Relational: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrateg + y_uHev/1111_Reconfig_uHev/11112_StopStartActive/OnDelay4/RelationalOperator1 + # combined # Unit delay: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrateg + y_uHev/1111_Reconfig_uHev/11112_StopStartActive/OnDelay4/UnitDelay */ + SVmcPmm__HE71_Switch = yVcDtcAtr_B_AT && (X_SVmcPmm__HE78_UnitDelay > + cVcVmcPmm_t_SsActTcmModeFail); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch5/Switch */ + SVmcPmm__HE71_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch13/Switch + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11 + 112_StopStartActive/LogicalSwitch13/Switch: Omitted comparison with constant. */ + if (cVcVmcPmm_B_SsActTipSport) { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch13/Switch */ + SVmcPmm__HE59_Switch = yVcDeDmm_B_TipSport; + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Recon + fig_uHev/11112_StopStartActive/LogicalSwitch13/Switch */ + SVmcPmm__HE59_Switch = 0; + } + + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch3/Switch + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev + /1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator5 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out1/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out4/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out5/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out8/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out6/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out7/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out9/EncapsulatedSubsystem/Out + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out10/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActive = (!(SVmcPmm__HE60_Switch)) && (!(SVmcPmm__HE62_Switch)) && + (!(SVmcPmm__HE56_Switch)) && (!(SVmcPmm__HE57_Switch)) && (!(SVmcPmm__HE61_Switch)) && + (!(yVcVmcPmm_B_SsActDoorOpenHMI)) && (!(yVcVmcPmm_B_SsActSeatBeltHMI)) && + (!(yVcVmcPmm_B_SsActAmbHMI)) && (!(yVcVmcPmm_B_SsActTrailerHMI)) && + (!(SVmcPmm__HE55_Switch)) && (!(SVmcPmm__HE70_Switch)) && (!(SVmcPmm__HE71_Switch)) && + (!(SVmcPmm__HE73_Switch)) && (!(SVmcPmm__HE74_Switch)) && + (!(yVcVmcPmm_B_SsAltitudeFault)) && (!(SVmcPmm__HE59_Switch)) && + (!(yVcVmcPmm_B_SsActHoodHMI)) && (!(yVcVmcPmm_B_SsActDrMdHMI)); + } + else { + /* Switch: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig + _uHev/11112_StopStartActive/LogicalSwitch3/Switch + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Rec + onfig_uHev/11112_StopStartActive/Out1/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsActive = 1; + } + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/Out2/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/LogicalOperator11 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/LogicalOperator10 + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/LogicalOperator13 + # combined # VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconf + ig_uHev/11112_StopStartActive/Out1/EncapsulatedSubsystem/Out */ + yVcVmcPmm_B_SsRcfAct = (!(yVcVmcPmm_B_SsActive)) && (SVmcPmm__HE73_Switch || + SVmcPmm__HE74_Switch); + + /* VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112 + _StopStartActive/Out11/EncapsulatedSubsystem/Out + # combined # Logical: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/11 + 11_Reconfig_uHev/11112_StopStartActive/LogicalOperator28 */ + yVcVmcPmm_B_SsActAbsHMI = SVmcPmm__HE60_Switch || SVmcPmm__HE62_Switch; + #endif + } + else { + /* set system state to 'disabled': VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_Fuel + CutRequest */ + SVmcPmm__HE156_RSWE = 0; + + /* set system state to 'disabled': VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_Driv + erLeaveVehicle */ + SVmcPmm__HE157_RSWE = 0; + } +} +#include "CVC_CODE_END.h" + +/**************************************************************************************************\ + *** FUNCTION: + *** INIT_SVmcPmm_____FuelCutRequest + *** + *** DESCRIPTION: + *** + *** + *** PARAMETERS: + *** Type Name Description + *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + *** + *** RETURNS: + *** void + *** + *** SETTINGS: + *** +\**************************************************************************************************/ +#include "CVC_CODE_START.h" +void INIT_SVmcPmm_____FuelCutRequest(void) +{ + /* initialization for block: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutReques + t/SR_FF2/UnitDelay1 */ + X_SVmcPmm__HE159_UnitDelay1 = 0; + + /* initialization for block: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutReques + t/SR_FF4/UnitDelay1 */ + X_SVmcPmm__HE160_UnitDelay1 = 0; + + /* initialization for block: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutReques + t/SignalDelay1/UnitDelay */ + X_SVmcPmm__HE161_UnitDelay = 0.F; +} +#include "CVC_CODE_END.h" + +/**************************************************************************************************\ + *** FUNCTION: + *** INIT_SVmcPmm____verLeaveVehicle + *** + *** DESCRIPTION: + *** + *** + *** PARAMETERS: + *** Type Name Description + *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + *** + *** RETURNS: + *** void + *** + *** SETTINGS: + *** +\**************************************************************************************************/ +#include "CVC_CODE_START.h" +void INIT_SVmcPmm____verLeaveVehicle(void) +{ + /* initialization for block: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVe + hicle/OnDelay/UnitDelay */ + X_SVmcPmm__HE163_UnitDelay = 0.F; + + /* initialization for block: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVe + hicle/OnDelay1/UnitDelay */ + X_SVmcPmm__HE164_UnitDelay = 0.F; + + /* initialization for block: VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVe + hicle/OnDelay2/UnitDelay */ + X_SVmcPmm__HE165_UnitDelay = 0.F; +} +#include "CVC_CODE_END.h" + +/*------------------------------------------------------------------------------------------------*\ + MODULE LOCAL FUNCTION DEFINITIONS +\*------------------------------------------------------------------------------------------------*/ +#endif /* VCVMCPMM_C */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/cnfg_files/VcVmcPmm.e b/tests/pybuild/cnfg_files/VcVmcPmm.e new file mode 100644 index 0000000..e86e4f5 --- /dev/null +++ b/tests/pybuild/cnfg_files/VcVmcPmm.e @@ -0,0 +1,14438 @@ + + +#ifndef VCVMCPMM_C +#define VCVMCPMM_C + + + + +#include "tl_aux_defines_VmcPmm__HE.h" +#include "VcVmcPmm__HEP7_OPortMvd_LocalDefs.h" +#include "VcVmcPmm.h" +#include "VcUnitTsDefines.h" +#include "TabIdxS18T6.h" +#include "TabIdxS18T390.h" +#include "Tab2DIntpI1T6.h" +#include "Tab1DIntpI1T6.h" +#include "Tab1DIntpI1T54.h" + + + + + + +#include "CVC_CODE_START.h" + +static Float32 X_SVmcPmm__HE161_UnitDelay = 0.F; +static Float32 X_SVmcPmm__HE163_UnitDelay = 0.F; +static Float32 X_SVmcPmm__HE164_UnitDelay = 0.F; +static Float32 X_SVmcPmm__HE165_UnitDelay = 0.F; + + +static Bool X_SVmcPmm__HE159_UnitDelay1 = 0; +static Bool X_SVmcPmm__HE160_UnitDelay1 = 0; +#include "CVC_CODE_END.h" + +#include "PREDECL_CAL_EXT_START.h" + +CVC_CAL_EXT Bool cVc_B_SeriesHev; +#include "PREDECL_CAL_EXT_END.h" + +#include "CVC_CAL_START.h" + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_Pw_IsgStrtAllow = 4.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_Te_AbrtStallEngClntL = -10.F; + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbHighH = 25.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbHighL = 20.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbLowH = 2.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Te_AmbLowL = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_Te_EngClntEngOffReq = 10.F; +CVC_CAL Float32 cVcVmcPmm_Te_EngClntEngRunReq = -4.5F; +CVC_CAL Float32 cVcVmcPmm_Te_FCAdaptEngClntRst = 40.F; +CVC_CAL Float32 cVcVmcPmm_Te_FCAdaptEngClntSet = 50.F; + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_Te_IsgStartPossible = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Float32 cVcVmcPmm_Te_TrnMdeC3OilPresMax = 20.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Te_TrnOil = 0.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_CrShRampDown = 20.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_CrShRampUp = -20.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_DrCrShRampDown = 20.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_DrCrShRampUp = -20.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_ERADRampDown = 20.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadBrkOKIsgBrk = 1000.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtDi = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtDiFlt = 8.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtEna = 1.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_EfadIsgStrtEnaFlt = 6.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax = 1.F; + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgRampDown = 10.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStandStillBrkTqOK = 1000.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStandStillBslTqOK = 1.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStopCoastDrReqMax = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_IsgStopCoastDrReqMin = 0.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_PropFrntRampDown = 100.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_Tq_PropFrntRampUp = -100.F; +#endif + + + + +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_TransHeatReqOffset = 10.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_Wait4CluStrtDi = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_Tq_Wait4CluStrtEna = 500.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_X_AccPedFastEngmtMin = 0.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_EfadAccPedOKIsgBrk = 1.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_X_FanAfterrunLimHi = 0.F; +CVC_CAL Float32 cVcVmcPmm_X_FanAfterrunLimLo = 0.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_IsgStopRoadGradMax = 100.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_IsgStopRoadGradMaxHyst = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_X_StallRcvClNtrl = 30.F; +CVC_CAL Float32 cVcVmcPmm_X_StallRcvClOnly = 60.F; +CVC_CAL Float32 cVcVmcPmm_X_StrtAbrtAcc = 10.F; +CVC_CAL Float32 cVcVmcPmm_X_StrtAbrtCl = 50.F; +CVC_CAL Float32 cVcVmcPmm_X_StrtMdeAcc = 110.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_Wait4CluStrtDi = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_X_Wait4CluStrtEna = 5.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_Xd_AccPedFastEngmtMin = 30.F; + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkDownH = -16.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkDownL = -15.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkUpH = 16.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_Z_BrkHGSkipParkUpL = 15.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_ResetLimDownHill = -7.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_ResetLimUpHill = 6.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_SetLimDownHill = -8.5F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_Z_SetLimUpHill = 9.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Z_SsActTrailerUpHillH = -100.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_Z_SsActTrailerUpHillL = -100.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_a_HillGradientFault = 0.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_a_HillGradientMax = 4.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_a_HillGradientMin = -4.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_a_Wait4CluStrtDi = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_a_Wait4CluStrtEna = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_n_12VStrtAllwdEngSpdMax = -10000.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_n_CFTStop = 300.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_n_CluStrtAllwdEngSpdMax = -10000.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_n_EngOnDelayOff = 10000.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_n_FCAdaptEngRst = 800.F; +CVC_CAL Float32 cVcVmcPmm_n_FCAdaptEngSet = 1000.F; +CVC_CAL Float32 cVcVmcPmm_n_IceStallMax = 10000.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_n_IsgStrtAllwdEngSpdMax = -10000.F; +#endif + + + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_n_PwdRpmOnly = 100.F; +#endif +CVC_CAL Float32 cVcVmcPmm_n_StallEmiMinEngSpd = 100.F; +CVC_CAL Float32 cVcVmcPmm_n_StallRcv = 10000.F; + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_n_TrnEngBlockMin = 1000.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_n_Wait4Eng2StopLim = 450.F; +CVC_CAL Float32 cVcVmcPmm_n_Wait4Eng2StopLimHigh = 500.F; +CVC_CAL Float32 cVcVmcPmm_n_Wait4Eng2StopLimHighTest = -10000.F; + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_p_AmbH = 85.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_p_AmbL = 84.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_p_BrVacuum = -4.5F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_rt_EfadLowAvailTrq = -1000.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_rt_EfadStrtAllow = 0.5F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_rt_FCLvlRunning = 0.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_12VStrtActrRdyDly = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_ATComStrt = 0.1F; +CVC_CAL Float32 cVcVmcPmm_t_AbrtFrstDrCycle = 5.F; +CVC_CAL Float32 cVcVmcPmm_t_AbrtStall = 10.F; +CVC_CAL Float32 cVcVmcPmm_t_AbsStrt = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_BlockAbrtFrstDrCycle = 0.F; + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_BlockPsmPwd = 0.F; +#endif + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_BrakeRunReqOnDelayHmi = 20.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_t_BrkAbs = 4.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_t_BrkEngRunReqAlive = 0.F; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 cVcVmcPmm_t_BrkHillGrad = 10.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR = 0.5F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_BrkStrt = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_CTFStop = 0.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_ChrgReqDly = 0.06F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_CluStrtActrRdyDly = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_ComInhbtIceStatus = 0.F; + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_CrShPahDiTiOut = 5.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_DrLeaveAutoParkReq = 30.F; +CVC_CAL Float32 cVcVmcPmm_t_DrLeaveDCADly = 1.F; +CVC_CAL Float32 cVcVmcPmm_t_DrLeavePwrDwnDly = 4800.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_DrvCycActvFirstStrt = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadAccPedOKIsgBrk = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadBrkOKIsgBrk = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadDrvCycTiOut = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadGearLvrPNDetn = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadIceStsDlyIsgDrv = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadLowAvailTrqDly = 0.25F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadRunReqDelay = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadShftProgsOffDly = 0.3F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadShftProgsTimeOut = 3.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadTrqAllowTiOut = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EfadVehSpdOKIsgBrk = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_EngEngmtFastRstDelay = 1.F; +CVC_CAL Float32 cVcVmcPmm_t_EngOff = 0.2F; +CVC_CAL Float32 cVcVmcPmm_t_EngOffFcAdapt = 0.01F; +CVC_CAL Float32 cVcVmcPmm_t_EngOffMax = 1000.F; + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_EngOnDelayOff = 2.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_EngOnOff = 4.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EngOnReqDly = 0.05F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EngRunReqIsgStopMax = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_EngRunReqIsgStopMin = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradDisable = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradNtrlGlitch = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradOffGlitch = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_t_EradOnGlitch = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_FCAdaptIdleDelayOff = 0.F; + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_FanAfterrunDelay = 0.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_FirstStrtDlyOff = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_GearLevDRDly = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_GearLevNDly = 2.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_GearLevPNDlyOn = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_GlitchEngOnTrans = 0.5F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IceRunng12VStrt = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IceRunngCluStrt = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IceRunngIsgStrt = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgAdapt = 0.1F; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgDisable = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgDrCycStop = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgDrCycStopMax = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgICEStop = 0.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_IsgIceStopACCTimeout = 1.5F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_t_IsgIceStopTimeout = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgPahDiTiOut = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStandStillBrkTqOK = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStandStillBslTqOK = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStandStillVehSpdOK = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtActrRdyDly = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtOkDelay = 0.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtPahReqTiOut = 2.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_IsgStrtWhlTrqOK = 1.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_MinStopCEC = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopChas = 3.F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopClim = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopEMS = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopEmLv = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopTime = 0.2F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopTm = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_MinStopTrans = 0.F; + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdRcShutOff = 0.F; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdRpm = 0.04F; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdSeatBeltAT = 100000.F; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_t_PwdTcmModeFail = 4.F; +#endif + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_RunReqObdDelayHmi = 5.F; +#endif + + + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_RunReqOnDelayHmi = 2.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_Running = 0.5F; + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActAbs = 4.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActBrk = 0.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActSeatBelt = 100000.F; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Float32 cVcVmcPmm_t_SsActTcmModeFail = 2.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_StallEmiMinEngSpd = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrt = 2.F; +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtActrFinishd = 0.5F; +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtEmi = 40.F; +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtEmiExtra = 2.F; +CVC_CAL Float32 cVcVmcPmm_t_StallIceStrtIsgDrv = 4.F; +CVC_CAL Float32 cVcVmcPmm_t_StallRcvClDelay = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_StallRcvNeutral = 0.1F; +CVC_CAL Float32 cVcVmcPmm_t_StallRun = 0.5F; +CVC_CAL Float32 cVcVmcPmm_t_StallRunComInhbt = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_StallRunUnintd = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_StallStrtM = 1.5F; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_t_StandStill = 0.7F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_Started = 0.04F; +CVC_CAL Float32 cVcVmcPmm_t_StrtAbrt = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_StrtMdeAccRst = 1.F; +CVC_CAL Float32 cVcVmcPmm_t_StrtMdeAccRun = 0.F; +CVC_CAL Float32 cVcVmcPmm_t_StrtMdeRunning = 0.F; + + +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 cVcVmcPmm_t_TransHeatDelayOn = 2.F; +#endif + + + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_t_TransRunReqOnDelayHmi = 1.F; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnEngBlockMax = 1.F; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnEngCatHeatDly = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnEngRpmDly = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Float32 cVcVmcPmm_t_TrnMdeC3OilPresMax = 25.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_VehSpdOKIsgDrv = 0.5F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_t_Wait4CluStrtTiOut = 10.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_t_Wait4Eng2StopTiOut = 2.F; +CVC_CAL Float32 cVcVmcPmm_t_Wait4EngRunReqTot = 0.02F; +CVC_CAL Float32 cVcVmcPmm_t_WaitToReset = 2.F; +CVC_CAL Float32 cVcVmcPmm_tc_AccPedDer = 0.1F; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_BcmLongAccFilt = 0.5F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_BrkTrqFilt = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_tc_LatAccFilt = 0.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_StandStill = 0.1F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_tc_VdmAccFilt = 0.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_tc_VehAccFilt = 0.3F; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 cVcVmcPmm_v_12VStrtMax = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_CluStrtSpdAllw = 70.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_v_DrLeaveLim = 5.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadCluStrtDi = 8.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadCluStrtEna = 10.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadGearLvrPNDiseng = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKIsgBrk = 1.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKIsgDrv = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv = 8.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco = 8.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKIsgBrk = 0.1F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKIsgDrv = 0.1F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco = 0.1F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv = 4.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco = 4.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_EngStopReqAT = 350.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_v_EradOffSpdLim = 140.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_v_EradOnSpdLim = 130.F; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Float32 cVcVmcPmm_v_EradSpdCtrl = 255.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_v_FCAdaptVehRst = 35.F; +CVC_CAL Float32 cVcVmcPmm_v_FCAdaptVehSet = 40.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStandStillVehSpdOK = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStopCoastSpdMax = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStopCoastSpdMinOff = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_IsgStopCoastSpdMinOn = 0.F; +#endif + + + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Float32 cVcVmcPmm_v_PwdSpeedLimit = 10.F; +#endif + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_ReqEngDrDir = -1.F; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_v_SpeedLimitHG = 2.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_v_StallRcvStart = 5.F; +CVC_CAL Float32 cVcVmcPmm_v_StallReset = -2.F; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 cVcVmcPmm_v_StandStillLoLim = 2.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_TotNtrlReset = 18.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_TotNtrlSet = 25.F; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Float32 cVcVmcPmm_v_TotNtrlVehDrDir = -1.F; +#endif + + + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_CAL Float32 cVcVmcPmm_v_TransRunRqDlyMaxHmi = 125.F; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Float32 cVcVmcPmm_v_TrnEngBlockMax = 5.F; +#endif + + + + +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Float32 cVcVmcPmm_v_TrnMdeC3OilPresMax = 20.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_v_VehMaxStallRcv = 10.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR = -1000.F; +#endif + + +CVC_CAL Float32 cVcVmcPmm_v_WaitToReset = 350.F; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 mVcVmcPmm_Z_BrkRoadIncline_c[8] = +{ + 1.F, 2.F, 3.F, 4.F, 5.F, 6.F, 7.F, 8.F + +}; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Float32 mVcVmcPmm_Z_BrkRoadIncline_r[8] = +{ + 1.F, 2.F, 3.F, 4.F, 5.F, 6.F, 7.F, 8.F + +}; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 mVcVmcPmm_tc_HillGradient[6][4] = +{ + { + 1.F, 2.F, 4.F, 4.F + + }, + { + 1.F, 2.F, 4.F, 4.F + + }, + { + 1.F, 2.F, 4.F, 4.F + + }, + { + 1.F, 2.F, 4.F, 4.F + + }, + { + 1.F, 2.F, 4.F, 4.F + + }, + { + 1.F, 2.F, 4.F, 4.F + + } +}; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 mVcVmcPmm_tc_HillGradient_c[4] = +{ + 0.F, 500.F, 1000.F, 2000.F + +}; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 mVcVmcPmm_tc_HillGradient_r[6] = +{ + 0.F, 2.F, 5.F, 10.F, 50.F, 100.F + +}; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_IsgStrtAllow[6] = +{ + 50.F, 50.F, 50.F, 0.F, 0.F, 0.F + +}; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_IsgStrtAllow_x[6] = +{ + 500.F, 1000.F, 1500.F, 2500.F, 3500.F, 5000.F + +}; +#endif + + + + +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_TransHeatReq[6] = +{ + 600.F, 600.F, 500.F, 325.F, 250.F, 200.F + +}; +#endif + + + + +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_CAL Float32 tVcVmcPmm_Tq_TransHeatReq_x[6] = +{ + 0.F, 50.F, 55.F, 80.F, 110.F, 140.F + +}; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 tVcVmcPmm_Z_HillGradAcc2deg[5] = +{ + -90.F, -45.F, 0.F, 45.F, 90.F + +}; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Float32 tVcVmcPmm_Z_HillGradAcc2deg_x[5] = +{ + -9.81F, -4.9F, 0.F, 4.9F, 9.81F + +}; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 tVcVmcPmm_p_BrVacuumVeh[7] = +{ + -45.F, -50.F, -55.F, -60.F, -65.F, -70.F, -90.F + +}; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Float32 tVcVmcPmm_p_BrVacuumVeh_x[7] = +{ + 0.F, 15.F, 30.F, 45.F, 60.F, 75.F, 300.F + +}; +#endif + + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStartEnable_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStartEnable_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtBlk_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtBlk_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtReq_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_12VStrtTrigNewPos = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_ATComStrt = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtFrstStrtStall = 0; +CVC_CAL Bool cVcVmcPmm_B_AbrtNtrlAdapt = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallAbortHard = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallEngClntL = 0; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallGp = 0; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallMicHev = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallRcShutOff = 0; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallRcvInSpd = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallSeatBelt = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallSsRcfSet = 1; +CVC_CAL Bool cVcVmcPmm_B_AbrtStallTime = 1; +CVC_CAL Bool cVcVmcPmm_B_AbsStrt = 0; + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkAbs = 1; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkEngRunReq = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkEngRunReqAlive = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkHGSkipPark = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkHillGrad = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Bool cVcVmcPmm_B_BrkHillGradStart = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_BrkStrt = 0; + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkUseNegVacuum = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkVacuum = 1; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL Bool cVcVmcPmm_B_BrkVacuumVeh = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_CTFStart = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtBlk_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtBlk_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtInDeplBlk = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_CluStrtReq_swi = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_CrShPathEnable_dbi = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_CrShPathEnable_swi = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_CrShaftRampDownIgnore = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_DepStop = 1; + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_DepStopAT = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_DepStrt = 1; +CVC_CAL Bool cVcVmcPmm_B_DrLeaveEnable = 0; +CVC_CAL Bool cVcVmcPmm_B_DrLeaveKeepRunReq = 1; +CVC_CAL Bool cVcVmcPmm_B_DrLeavePowerDown = 1; + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_ERADTqAllw = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_Efad12VStrtEnblIngoreDep = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadGearLvrPNDisengEna = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadPathEnaParkEngd = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadPathEnable_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadPathEnable_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadUse12VStrt = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadUseCluStrt = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_EfadUseIsgStrt = 1; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_EngOnDelayIgnore = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_EngOnReq_dbi = 0; +CVC_CAL Bool cVcVmcPmm_B_EngOnReq_swi = 0; +CVC_CAL Bool cVcVmcPmm_B_EngRunReqTot_dbi = 0; +CVC_CAL Bool cVcVmcPmm_B_EngRunReqTot_swi = 0; +CVC_CAL Bool cVcVmcPmm_B_EngStoppedUseHiRes = 0; +CVC_CAL Bool cVcVmcPmm_B_EngineArchitecture = 1; + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradIgnrPathDisable = 1; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradPathEnable_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradPathEnable_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_EradRmpDwnTqSignal = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_FCAdaptEnable = 0; +CVC_CAL Bool cVcVmcPmm_B_FCAdaptIdle = 1; +CVC_CAL Bool cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq = 0; +CVC_CAL Bool cVcVmcPmm_B_GlitchEngOnTrans = 0; + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_ISGTqAllw = 1; +#endif + + + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_IgnoreGearLevRespStrt = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_IgnrCcActive = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IgnrDepl = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IgnrPropAlwdEfad = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IgnrPropAlwdIsg = 1; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgIgnrPathDisable = 1; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgRmpDwnTqSignal = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStartEnable_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStartEnable_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtBlk_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtBlk_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtFirstStartOverride = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtInDUseEfadPathAct = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtPahReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtPahReq_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtPcrOverride = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtReq_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtRunDryOverride = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtSpdCtrlOverride = 0; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtTempOverride = 0; +#endif + + + + +#ifdef SVmcPmm__HE818_Switch_AUX +CVC_CAL Bool cVcVmcPmm_B_IsgStrtUseSpdCtrl = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_LosStop = 0; +CVC_CAL Bool cVcVmcPmm_B_LosStrt = 0; +CVC_CAL Bool cVcVmcPmm_B_MinStopCEC = 0; +CVC_CAL Bool cVcVmcPmm_B_MinStopChas = 1; +CVC_CAL Bool cVcVmcPmm_B_MinStopClim = 0; +CVC_CAL Bool cVcVmcPmm_B_MinStopEMS = 0; +CVC_CAL Bool cVcVmcPmm_B_MinStopEmLv = 0; +CVC_CAL Bool cVcVmcPmm_B_MinStopTm = 0; +CVC_CAL Bool cVcVmcPmm_B_MinStopTrans = 0; +CVC_CAL Bool cVcVmcPmm_B_PTDGearLevAT = 1; +CVC_CAL Bool cVcVmcPmm_B_PTDStrt = 0; + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdAbortHard = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdAbrtStall = 1; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdDrReadyAbortHard = 1; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdIgnoreQfDrDoor = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRcShutOff = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRcShutOffDCA = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRcfDep = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdRpmOnly = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBelt = 1; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBeltDoor = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBeltN = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSeatBeltP = 1; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdSpeedLimit = 1; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdTCMModeFail = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdTCMNodeAlive = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdTransFailure = 0; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_PwdUseSeatBeltAT = 1; +#endif +CVC_CAL Bool cVcVmcPmm_B_RcShutOff = 0; + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL Bool cVcVmcPmm_B_SerialModeSafeBISG = 0; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_SkipIsgCalibration = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActAbs = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActAmbPres = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActBrk = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltD = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltN = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltP = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorBeltR = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDoorNoBelt = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDrMdInv = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActDriverLeaving = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActEcoMde = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActGpSs = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActHood = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActNtrl = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActRcfSet = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActRcfSetAlt = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActSeatBelt = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActSeatBeltNoSeq = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActSeatBeltPrkBlock = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTCMModeFail = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTCMNodeAlive = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTemp = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTempStrt = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTipSport = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTrailer = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_SsActTransFailure = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_StallEmiExtraCond = 0; +CVC_CAL Bool cVcVmcPmm_B_StallIceStrt = 0; +CVC_CAL Bool cVcVmcPmm_B_StallIceStrtActrFinishd = 0; +CVC_CAL Bool cVcVmcPmm_B_StallIceStrtEmi = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRcShutOff = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRcvAT = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRcvAccFtOnPed = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRcvClOnly = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRcvCrnk = 1; +CVC_CAL Bool cVcVmcPmm_B_StallRcvFootOnBrPed = 1; +CVC_CAL Bool cVcVmcPmm_B_StallRcvFrcd = 1; +CVC_CAL Bool cVcVmcPmm_B_StallRun = 1; +CVC_CAL Bool cVcVmcPmm_B_StallRunComInhbt = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRunHiRes = 0; +CVC_CAL Bool cVcVmcPmm_B_StallRunStartM = 1; +CVC_CAL Bool cVcVmcPmm_B_StallRunUnintd = 0; +CVC_CAL Bool cVcVmcPmm_B_StallStartM = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbortClu = 0; +CVC_CAL Bool cVcVmcPmm_B_StrtAbortHard = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbortIsg = 0; +CVC_CAL Bool cVcVmcPmm_B_StrtAbortSoft = 0; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrt = 0; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtAcc = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtCl = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtDrReady = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtIce = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtNtrl = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtNtrlValid = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtRpm = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtAbrtStrtM = 1; +CVC_CAL Bool cVcVmcPmm_B_StrtMdeSet = 0; + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL Bool cVcVmcPmm_B_StrtMdeSkipTrnMde = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_StrtMdeStopTrig = 0; + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnEngBlockSkipEngUseReq = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeHev = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeHevUseNIC = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeIC = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_TrnMdeReqBrk = 0; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseAwd = 1; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseBrake = 1; +#endif + + + + +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseC3OilPres = 0; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUsePcr = 1; +#endif + + + + +#ifdef SVmcPmm__HE477_MinMax_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnMdeUseTrans = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_TrnModIsgReq = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UnintdStallRcShOff = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseAgedFuel = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseAwdRoadGrad = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseBrake = 0; +CVC_CAL Bool cVcVmcPmm_B_UseCEC = 1; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseChargeInIsgReq = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseChas = 1; +CVC_CAL Bool cVcVmcPmm_B_UseClPedAdaptStrtAbrt = 0; +CVC_CAL Bool cVcVmcPmm_B_UseClim = 1; +CVC_CAL Bool cVcVmcPmm_B_UseComInhbtIceStatus = 0; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Bool cVcVmcPmm_B_UseDefHGDynoMd = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseDep = 0; +CVC_CAL Bool cVcVmcPmm_B_UseDesDrvDir = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseDly12VStrtVehPwrUp = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseDrLeave = 0; +CVC_CAL Bool cVcVmcPmm_B_UseDriver = 1; +CVC_CAL Bool cVcVmcPmm_B_UseEMS = 1; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseEfadCode = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseEm = 1; +CVC_CAL Bool cVcVmcPmm_B_UseEmLv = 0; +CVC_CAL Bool cVcVmcPmm_B_UseEmiGpfFC = 0; +CVC_CAL Bool cVcVmcPmm_B_UseEngClntRunReq = 0; +CVC_CAL Bool cVcVmcPmm_B_UseEngOffMaxTime = 0; +CVC_CAL Bool cVcVmcPmm_B_UseEngOnOff = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseEngOnReqDly = 0; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_B_UseEradCode = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_UseEradHybrid = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseFCAdapt = 0; +CVC_CAL Bool cVcVmcPmm_B_UseFanAfterrun = 1; + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseFirstStartMode = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseIceEnable = 1; +CVC_CAL Bool cVcVmcPmm_B_UseIceStall = 1; +CVC_CAL Bool cVcVmcPmm_B_UseIscActvnEMS = 0; +CVC_CAL Bool cVcVmcPmm_B_UseIsg = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgBrk = 0; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgCode = 0; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgSpdCtrlStrt = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStandStill = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopCoast = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopPostRunReqStandstill = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopPwrDwn = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopRunReqCoast = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStopRunReqStandstill = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseIsgStrtAtStndStill = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseLOS = 0; + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseLastStrtMod = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseObd = 0; + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_CAL Bool cVcVmcPmm_B_UseOilTemp = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseOld12VStrtAllwd = 1; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_UseOldEngRevStgy = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseOldEngStrtAllwd = 1; + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_CAL Bool cVcVmcPmm_B_UsePowerDownReq = 0; +#endif + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_B_UsePropFrntRampDown = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UsePsm = 1; +CVC_CAL Bool cVcVmcPmm_B_UseRc = 1; +CVC_CAL Bool cVcVmcPmm_B_UseRemoteStart = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseRespStartReqFromDeDmm = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseRespStartreqFromVmcEm = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseRunDryInhb = 0; +CVC_CAL Bool cVcVmcPmm_B_UseRunDryInhbOnly = 0; +CVC_CAL Bool cVcVmcPmm_B_UseSapp = 0; + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_UseSsActTemp = 1; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL Bool cVcVmcPmm_B_UseSsActive = 1; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseStabCtrl = 0; +CVC_CAL Bool cVcVmcPmm_B_UseStallRcvBlock = 0; +CVC_CAL Bool cVcVmcPmm_B_UseStartAllowedPath = 0; + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL Bool cVcVmcPmm_B_UseStartModeHybrid = 0; +#endif + + + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseStartModeHybrid12V = 0; +#endif + + + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL Bool cVcVmcPmm_B_UseStrtMde3All12vStrt = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseTm = 0; +CVC_CAL Bool cVcVmcPmm_B_UseTotEngRunReq = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseTqOffsForCluStrtEval = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseTqSPM = 1; +CVC_CAL Bool cVcVmcPmm_B_UseTrans = 1; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_B_UseWait4CluStrt = 0; +#endif + + +CVC_CAL Bool cVcVmcPmm_B_UseWait4Eng2Stop = 0; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL Bool cVcVmcPmm_B_UseWhlSpdDirection = 1; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_CAL UInt8 cVcVmcPmm_D_BrkHillVal = 1; +#endif + + +CVC_CAL UInt8 cVcVmcPmm_D_DrDoorOpen = 1; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_Efad12VStrtMax = 2; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadCluStrtMax = 2; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadIsgStrLoosenLim = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadIsgStrtMax = 2; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadModReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_D_EfadModReq_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadPathAllwd1 = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadPathAllwd2 = 5; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EfadPathReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL Bool cVcVmcPmm_D_EfadPathReq_swi = 0; +#endif + + +CVC_CAL UInt8 cVcVmcPmm_D_EngmtModSmooth = 1; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding1 = 6; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding2 = 12; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding3 = 3; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 cVcVmcPmm_D_EpbCoding4 = 10; +#endif + + +CVC_CAL Int8 cVcVmcPmm_D_FCAdaptGearRst = 2; +CVC_CAL Int8 cVcVmcPmm_D_FCAdaptGearSet = 3; +CVC_CAL UInt8 cVcVmcPmm_D_FCAdaptLockUpRst = 1; +CVC_CAL UInt8 cVcVmcPmm_D_FCAdaptLockUpSet = 1; + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL UInt8 cVcVmcPmm_D_GearLevRespStrtOK1 = 0; +#endif + + + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL UInt8 cVcVmcPmm_D_GearLevRespStrtOK2 = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Int8 cVcVmcPmm_D_GearTotNtrl = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL UInt8 cVcVmcPmm_D_QfEpbLongAccInit = 0; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_CAL UInt8 cVcVmcPmm_D_QfEpbLongAccOK = 3; +#endif + + + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL UInt8 cVcVmcPmm_D_SafeBISG = 0; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL UInt8 cVcVmcPmm_D_SsActDrMd1 = 100; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL UInt8 cVcVmcPmm_D_SsActDrMd2 = 100; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CAL UInt8 cVcVmcPmm_D_SsActDrMd3 = 100; +#endif + + +CVC_CAL UInt8 cVcVmcPmm_D_StartMode_dbi = 0; +CVC_CAL Bool cVcVmcPmm_D_StartMode_swi = 0; + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_CAL UInt8 cVcVmcPmm_D_StrtModDft = 4; +#endif + + +CVC_CAL UInt8 cVcVmcPmm_D_StrtModLongIceStsDetn = 1; + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TransModeReq_dbi = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL Bool cVcVmcPmm_D_TransModeReq_swi = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeHevReqEngNIC = 2; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeReqEng = 2; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeReqNtrl = 3; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL UInt8 cVcVmcPmm_D_TrnMdeReqTotNtrl = 4; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Int8 cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_CAL Bool cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL UInt8 mVcVmcPmm_Z_BrkRoadIncline[8][8] = +{ + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + }, + { + 0, 0, 0, 0, 0, 0, 0, 0 + + } +}; +#endif + + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_Te_Efad12VStrtEngClntMin = -5.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_Tq_IsgStopCoastDrReqHyst = 0.F; +#endif + + +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngRunning = 700.F; +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngStalled = 10.F; +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngStarted = 500.F; +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_EngStopped = 100.F; +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_StrtAbrtRpm = 400.F; + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_n_StrtDiffFast = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE785__sgStrtAllow_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_rt_IsgStrtAllow = 0.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_t_EfadPahDiTiOut = 5.F; +#endif + + +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_t_EngRunStall = 30.F; + + +#ifdef SVmcPmm__HE785__sgStrtAllow_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_t_IsgRunReqDelay = 2.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_v_Efad12VStartMax = 10.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_v_Efad12VStartMin = -100.F; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Float32 cVcVmcPmm_v_IsgStopCoastSpdHyst = 0.F; +#endif + + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_EfadUseFactory12VStrt = 1; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_IgnrPropAlwdCrSh = 1; +#endif + + + + +#ifdef SVmcPmm__HE637__hEnable_dbi_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_IsgPathEnable_dbi = 0; +#endif + + + + +#ifdef SVmcPmm__HE637__hEnable_dbi_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_IsgPathEnable_swi = 0; +#endif + + + + +#ifdef SVmcPmm__HE389__ReqUseTrans_AUX +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_PwrUpIceStrtReqUseTrans = 1; +#endif + + + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_StrtMdeEscCond = 0; +#endif + + +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_Use7DCT = 0; +CVC_CAL_MERGEABLE Bool cVcVmcPmm_B_UseClPedAdaptStallRecovery = 0; +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_AbortStart = 4; +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_CTF = 0; +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_EngmtModFast = 2; + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_FastBISG = 1; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_IceStsStarting = 1; +#endif + + + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_CAL_MERGEABLE UInt8 cVcVmcPmm_D_NormalBISG = 1; +#endif + + +#include "CVC_CAL_END.h" + +#include "PREDECL_CONST_START.h" + +CVC_CONST_EXT UInt8 cVc_D_GearLevATDrive; +CVC_CONST_EXT UInt8 cVc_D_GearLevATNeutral; +CVC_CONST_EXT UInt8 cVc_D_GearLevATPark; +CVC_CONST_EXT UInt8 cVc_D_GearLevATReverse; + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CONST_EXT UInt8 cVc_D_GearLevAT2nd; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CONST_EXT UInt8 cVc_D_GearLevAT3rd; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_CONST_EXT UInt8 cVc_D_GearLevAT4th; +#endif + + +#include "PREDECL_CONST_END.h" + +#include "CVC_DISP_START.h" + +CVC_DISP UInt32 rVcVmcPmm_D_EngRunReqLogg; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_Tq_BrkTrqFilt; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_DISP Float32 rVcVmcPmm_Tq_EradMaxLimNoLim; +#endif + + +CVC_DISP Float32 rVcVmcPmm_Xd_AccPedalPos; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Float32 rVcVmcPmm_Z_RoadGradient; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_BcmLongAccFilt; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_MergedAcc; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_MergedAccFilt; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_MergedAccSaturated; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_SignedHGVehFilt; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Float32 rVcVmcPmm_a_Veh; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_a_VehAccFilt; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Float32 rVcVmcPmm_p_BrVacuumVeh; +#endif + + +CVC_DISP Float32 rVcVmcPmm_rt_FCLvl; +CVC_DISP Float32 rVcVmcPmm_t_EngOff; + + +#ifdef SVmcPmm__HE512_Switch_AUX +CVC_DISP Float32 rVcVmcPmm_t_TrnC3OilPres; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_tc_HillGadient; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Float32 rVcVmcPmm_tc_HillGradient; +#endif + + +CVC_DISP UInt32 sVcVmcPmm_D_EngRunReqLogg; +CVC_DISP Float32 sVcVmcPmm_Z_HillGradientDeg; + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_12VStrtCnt; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_CluStrtCnt; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_EfadModReq; +#endif + + +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqBrake = 0; +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqChas; +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqDrLeave = 0; +CVC_DISP UInt8 rVcVmcPmm_D_EngRunReqFCAdapt = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_D_IsgStrtCnt; +#endif + + +CVC_DISP UInt8 rVcVmcPmm_D_StallAbortNum; +CVC_DISP UInt8 rVcVmcPmm_D_TransModeReq = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 rVcVmcPmm_Z_BrkRoadIncline; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP UInt8 sVcVmcPmm_D_EfadPathReq; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqBrkVac; +#endif + + +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqClim; +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqEmLv; + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP UInt8 sVcVmcPmm_D_EngRunReqHG; +#endif + + +CVC_DISP UInt8 sVcVmcPmm_D_EngagementMode; +CVC_DISP UInt8 sVcVmcPmm_D_IceStatus; + + +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +CVC_DISP UInt8 sVcVmcPmm_D_IsgModReq; +#endif + + +CVC_DISP UInt8 sVcVmcPmm_D_StartMode; +CVC_DISP UInt8 sVcVmcPmm_D_TransModeReq; + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Int8 sVcVmcPmm_D_WhlMotSysCluOperTypReq; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP UInt8 sVcVmcPmm_D_WhlMotSysModReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtActrRdy; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtAllwd; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtBlk; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtOk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtPsbl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_12VStrtReq = 0; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_AbrtFrstStrtStall; +CVC_DISP Bool xVcVmcPmm_B_AbrtNtrlAdapt; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallAbortHard; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallEngClntL; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallGp; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallMicHev; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallRcShutOff; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallSeatBelt; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallSsRcfSet; +CVC_DISP Bool xVcVmcPmm_B_AbrtStallTime; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_AccPedOKIsgBrk; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_AmbPresLow; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_AmbTempH; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_AmbTempL; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkHGSkipPark; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkHGSkipParkPre; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_BrkHGStart; +#endif + + + + +#ifdef SVmcPmm__HE148_Switch_AUX +CVC_DISP Bool xVcVmcPmm_B_BrkHillGradStart = 0; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_BrkOKIsgBrk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_BrkRoadIncline; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkVacuumStart; +#endif + + + + +#if VcVmcPmm__HEP7_1140_Brake_1 +CVC_DISP Bool xVcVmcPmm_B_BrkVacuumVeh; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_CECBlock; +CVC_DISP Bool xVcVmcPmm_B_CECBlocked; +CVC_DISP Bool xVcVmcPmm_B_ChasBlocked; +CVC_DISP Bool xVcVmcPmm_B_ClimBlocked; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtActrRdy; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtAllwd; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtBlk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtPsbl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtTqRsvBlk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_CluStrtVehSpdOK; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_CrShPathDisabled; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_CrnkStallRecov; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Dly12VStrtVehPwrUp; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_DrDoorOpen; +CVC_DISP Bool xVcVmcPmm_B_DrLeaveKeepRun; +CVC_DISP Bool xVcVmcPmm_B_DrLeavePowerDownReq = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_DrvCycActvFirstStrt; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_DrvCycActvFirstStrtTiOut; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_DrvCycTiOut; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EMSBlock; +CVC_DISP Bool xVcVmcPmm_B_EMSBlocked; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IcePahReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IceReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IceReqRst; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2IceUnavl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2WhlPahReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Efad2WhlUnavl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EfadDisengdReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EfadUnavl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_ElecMotLowAvailTrq; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EmLvBlocked; + + +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +CVC_DISP Bool xVcVmcPmm_B_EmiStrt; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EngOnOff; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EngOnReqDly; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EngOnReqEng; +CVC_DISP Bool xVcVmcPmm_B_EngOnReqPre; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EngOnReqTiOut; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EngOnReqTrans = 0; + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_EngOnReqTransPre; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EngRunReqCEC; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqChas; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqDep; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqDrLeave; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqDriver; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqEm; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqEngClnt; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqFCAdapt; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqIceStall; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqIsg; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqIsgStop = 0; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqMaxTime; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqPcr; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqPsm; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqRemote; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqStabCtrl; +CVC_DISP Bool xVcVmcPmm_B_EngRunReqTotPre; +CVC_DISP Bool xVcVmcPmm_B_EngRunning; +CVC_DISP Bool xVcVmcPmm_B_EngRunningRpm; +CVC_DISP Bool xVcVmcPmm_B_EngRunningRpmDly; +CVC_DISP Bool xVcVmcPmm_B_EngStart; +CVC_DISP Bool xVcVmcPmm_B_EngStop; +CVC_DISP Bool xVcVmcPmm_B_EngStopFast; + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_EngStopReqAT; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_EngStopped; +CVC_DISP Bool xVcVmcPmm_B_EngmtModFast; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EpbActive; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool xVcVmcPmm_B_EradAllow; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool xVcVmcPmm_B_EradEngageReq; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool xVcVmcPmm_B_EradSpdCtrl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_EvenGearShiftAct; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_FCAdaptAct; +CVC_DISP Bool xVcVmcPmm_B_FanAfterrun; +CVC_DISP Bool xVcVmcPmm_B_FastEngmtIsgStrt; +CVC_DISP Bool xVcVmcPmm_B_FastEngmtPwrDemand; +CVC_DISP Bool xVcVmcPmm_B_FastEngmtTrqDemand; + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_DISP Bool xVcVmcPmm_B_FastStart; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_ForcedStallStart; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_GarageShiftEfadPahDiOK; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_GearLvrNotDRDetn; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_GradOutOfLim; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_HGSpdOK; +#endif + + + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_DISP Bool xVcVmcPmm_B_HeatUpEOP; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_IceStartRun; + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgActrTqRampDwn; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgChrgReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgChrgReqBrk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgChrgReqDrv; +#endif + + + + +#ifdef SVmcPmm__HE784__lOperator19_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgEnable; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStandStillBrkTqOK; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStandStillBslTqOK; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStandStillVehSpdOK; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_IsgStopCoast = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopPostRunReqStandstill; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopPwrDwn; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopRoadGradOK; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopRunReqCoast; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopRunReqStandstill; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStopStandstill; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_IsgStopStandstillPre = 0; +CVC_DISP Bool xVcVmcPmm_B_IsgStrtAbort; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtActrRdy; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtAllwd; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtBlk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDR; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDRAbort; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtGearLvrDRBraking; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtLimLoosen; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtLowAvailTrq; +#endif + + + + +#ifdef SVmcPmm__HE808__calOperator_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtOk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtPsbl; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_IsgStrtWhlTrqOK; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_NonSysStrt; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_PTDisengagedAT; + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool xVcVmcPmm_B_PwdPossible; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool xVcVmcPmm_B_PwdReset; +#endif + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool xVcVmcPmm_B_PwdTrig; +#endif + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_QfFault; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_QfFaultLongAcc; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_RunReqIceStall; + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SRSeatBeltAT; +#endif + + + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_DISP Bool xVcVmcPmm_B_SafeISG; +#endif + + + + +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +CVC_DISP Bool xVcVmcPmm_B_SafeISGPrio; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SsActDriverLeaving; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SsActSeatBeltAllow; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool xVcVmcPmm_B_SsActSeatBeltInhib; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_StallAbortNum; +CVC_DISP Bool xVcVmcPmm_B_StallIceStrt; +CVC_DISP Bool xVcVmcPmm_B_StallIceStrtActrFinishd; +CVC_DISP Bool xVcVmcPmm_B_StallIceStrtEmi; +CVC_DISP Bool xVcVmcPmm_B_StallRcvAT; +CVC_DISP Bool xVcVmcPmm_B_StallRcvAbortInSpd; +CVC_DISP Bool xVcVmcPmm_B_StallRcvCl; +CVC_DISP Bool xVcVmcPmm_B_StallRcvClNtrl; +CVC_DISP Bool xVcVmcPmm_B_StallRcvMT; +CVC_DISP Bool xVcVmcPmm_B_StallRecovery; +CVC_DISP Bool xVcVmcPmm_B_StallRunComInhbt; +CVC_DISP Bool xVcVmcPmm_B_StallRunUnintd; +CVC_DISP Bool xVcVmcPmm_B_StallRunning; +CVC_DISP Bool xVcVmcPmm_B_StallStrtM; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_StandStill; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_StartAllowedPath; +CVC_DISP Bool xVcVmcPmm_B_Started; +CVC_DISP Bool xVcVmcPmm_B_StartedDly; +CVC_DISP Bool xVcVmcPmm_B_StopAllowedDep; +CVC_DISP Bool xVcVmcPmm_B_StopAllowedPath; + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_StopInhibitDownHill; +#endif + + + + +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +CVC_DISP Bool xVcVmcPmm_B_StopInhibitUpHill; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_StrtAbrt; +CVC_DISP Bool xVcVmcPmm_B_StrtAbrtPre; +CVC_DISP Bool xVcVmcPmm_B_StrtActrsRdy = 0; +CVC_DISP Bool xVcVmcPmm_B_StrtMdeAcc; +CVC_DISP Bool xVcVmcPmm_B_StrtMdeRunning; +CVC_DISP Bool xVcVmcPmm_B_TmBlock; +CVC_DISP Bool xVcVmcPmm_B_TmBlocked; +CVC_DISP Bool xVcVmcPmm_B_TrailerPresent; +CVC_DISP Bool xVcVmcPmm_B_TransBlock; +CVC_DISP Bool xVcVmcPmm_B_TransBlocking; +CVC_DISP Bool xVcVmcPmm_B_TransEngOnBlock; + + +#ifdef SVmcPmm__HE171__lOperator35_AUX +CVC_DISP Bool xVcVmcPmm_B_TrnC3OilPres = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReq; +#endif + + + + +#ifdef SVmcPmm__HE477__lOperator18_AUX +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReqHybrid = 0; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReqIC; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool xVcVmcPmm_B_TrnEngageReqPre; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_TrnModOKIsgReq; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_VehSpdOKIsgBrk; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_VehSpdOKIsgDrv; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrt = 0; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtAccPedAct; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtDly; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtLowVehSpd; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtTiOut; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtWhlAccHigh; +#endif + + + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool xVcVmcPmm_B_Wait4CluStrtWhlTqLow; +#endif + + +CVC_DISP Bool xVcVmcPmm_B_Wait4Eng2Stop; +CVC_DISP Bool xVcVmcPmm_B_Wait4EngStrtTiOut; +CVC_DISP Bool yVcVmcPmm_B_12VStartEnable; +CVC_DISP Bool yVcVmcPmm_B_AutoParkReq; + + +#if Vc_Pvc_Hw_B_HVSystem == 0 +CVC_DISP Bool yVcVmcPmm_B_BlockPushStartHMI; +#endif + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool yVcVmcPmm_B_ClutchStartReq; +#endif + + +CVC_DISP Bool yVcVmcPmm_B_CrShPathEnable; + + +#ifdef SVmcPmm__HE1_VcVmcPmm_AUX +CVC_DISP Bool yVcVmcPmm_B_EfadActReq; +#endif + + +CVC_DISP Bool yVcVmcPmm_B_EfadPathEnable; +CVC_DISP Bool yVcVmcPmm_B_EngOnReq; +CVC_DISP Bool yVcVmcPmm_B_EngOnReqEng; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqBrake; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqClim; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqEmLv; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqEms; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqFanAfterrun; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqFuel; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqObd; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqRc; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqSapp; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqTm; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqTot; +CVC_DISP Bool yVcVmcPmm_B_EngRunReqTrans; + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool yVcVmcPmm_B_EradClutchReq; +#endif + + + + +#ifdef SVmcPmm__HE614__lOperator11_AUX +CVC_DISP Bool yVcVmcPmm_B_EradDrReq; +#endif + + +CVC_DISP Bool yVcVmcPmm_B_EradPathEnable; +CVC_DISP Bool yVcVmcPmm_B_FCAdaptReq; +CVC_DISP Bool yVcVmcPmm_B_FastIsgStopReq; +CVC_DISP Bool yVcVmcPmm_B_IceStall; + + +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +CVC_DISP Bool yVcVmcPmm_B_IsgActReq; +#endif + + +CVC_DISP Bool yVcVmcPmm_B_IsgPathEnable; +CVC_DISP Bool yVcVmcPmm_B_IsgStartReq; +CVC_DISP Bool yVcVmcPmm_B_IsgStrtPahReq; +CVC_DISP Bool yVcVmcPmm_B_PowerDownReq; +CVC_DISP Bool yVcVmcPmm_B_PwrUpIceStrtReq; + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_DISP Bool yVcVmcPmm_B_RunReqDriverHmi; +#endif + + + + +#if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 +CVC_DISP Bool yVcVmcPmm_B_RunReqSystemHmi; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActAbsHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActAmbHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActDoorOpenHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActDrMdHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActHoodHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActSeatBeltHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActTrailerHMI; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsActive; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsAltitudeFault; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsAmbFault; +#endif + + + + +#if Vc_Pvc_Sw_B_StopStart +CVC_DISP Bool yVcVmcPmm_B_SsRcfAct; +#endif + + +CVC_DISP Bool yVcVmcPmm_B_StallPwdReq; + + +#ifdef SVmcPmm__HE821__ransHeatReq_AUX +CVC_DISP Bool yVcVmcPmm_B_TransHeatReq; +#endif + + + + +#if Vc_Pvc_Hw_B_AT +CVC_DISP Bool yVcVmcPmm_B_TrnEngageReqHev; +#endif + + +CVC_DISP Bool yVcVmcPmm_B_UnintdStall; +#include "CVC_DISP_END.h" + + + + + + + +#include "CVC_CODE_START.h" +void RESTART_VcVmcPmm(void) +{ + rVcVmcPmm_D_EngRunReqBrake = 0; + rVcVmcPmm_D_EngRunReqDrLeave = 0; + rVcVmcPmm_D_EngRunReqFCAdapt = 0; + rVcVmcPmm_D_TransModeReq = 0; + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + xVcVmcPmm_B_12VStrtReq = 0; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + xVcVmcPmm_B_BrkHillGradStart = 0; + #endif + + + xVcVmcPmm_B_DrLeavePowerDownReq = 0; + xVcVmcPmm_B_EngOnReqTrans = 0; + xVcVmcPmm_B_EngRunReqIsgStop = 0; + xVcVmcPmm_B_IsgStopCoast = 0; + xVcVmcPmm_B_IsgStopStandstillPre = 0; + xVcVmcPmm_B_StrtActrsRdy = 0; + + + #if Vc_Pvc_Hw_B_AT + xVcVmcPmm_B_TrnC3OilPres = 0; + xVcVmcPmm_B_TrnEngageReqHybrid = 0; + #endif + + + xVcVmcPmm_B_Wait4CluStrt = 0; +} +#include "CVC_CODE_END.h" + + +#include "CVC_CODE_START.h" +void VcVmcPmm(void) +{ + + static Bool SVmcPmm__HE156_RSWE = 0; + static Bool SVmcPmm__HE157_RSWE = 0; + + if (VcVmcPmm__HEP7_1000_Hev_11 != 0) { + + static UInt8 CVmcPmm__HE1_D_IceStatus = 0; + + + static struct tag_SIBFS_1131_IceStatus_VmcPmm__HE_tp SIBFS_1131_IceStatus_VmcPmm__HE = { + 0, + 0, + 0, + 0 + }; + + + Float32 SVmcPmm__HE117_Switch; + + + #if VcVmcPmm__HEP7_1140_Brake_1 + Float32 SVmcPmm__HE130_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE142_MinMax; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE142_Prod1; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE143_MinMax; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE143_Prod1; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE144_MinMax; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE144_Prod1; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE147_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE152_MinMax; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE18_Product4; + #endif + + + Float32 SVmcPmm__HE228_Switch; + UInt32 SVmcPmm__HE265_Switch; + UInt32 SVmcPmm__HE266_Switch; + UInt32 SVmcPmm__HE267_Switch; + UInt32 SVmcPmm__HE269_Switch; + UInt32 SVmcPmm__HE270_Switch; + UInt32 SVmcPmm__HE271_Switch; + UInt32 SVmcPmm__HE272_Switch; + UInt32 SVmcPmm__HE273_Switch; + UInt32 SVmcPmm__HE274_Switch; + UInt32 SVmcPmm__HE275_Switch; + UInt32 SVmcPmm__HE276_Switch; + UInt32 SVmcPmm__HE277_Switch; + UInt32 SVmcPmm__HE278_Switch; + Float32 SVmcPmm__HE279_Switch; + UInt32 SVmcPmm__HE280_Switch; + UInt32 SVmcPmm__HE281_Switch; + UInt32 SVmcPmm__HE283_Switch; + UInt32 SVmcPmm__HE286_Switch; + UInt32 SVmcPmm__HE287_Switch; + UInt32 SVmcPmm__HE288_Switch; + UInt32 SVmcPmm__HE289_Switch; + UInt32 SVmcPmm__HE291_Switch; + UInt32 SVmcPmm__HE292_Switch; + UInt32 SVmcPmm__HE293_Switch; + UInt32 SVmcPmm__HE297_Switch; + UInt32 SVmcPmm__HE303_Switch; + UInt32 SVmcPmm__HE304_Switch; + + + #ifdef SVmcPmm__HE512_Switch_AUX + Float32 SVmcPmm__HE512_Switch; + #endif + + + Float32 SVmcPmm__HE561_Switch; + Float32 SVmcPmm__HE571_Switch; + + + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + Float32 SVmcPmm__HE821_Tq_TransHeatReq; + #endif + + + Float32 SVmcPmm__HE848_Switch; + + + Bool SVmcPmm__HE111_Switch; + Bool SVmcPmm__HE112_Switch; + Bool SVmcPmm__HE113_Switch; + Bool SVmcPmm__HE114_Switch; + + + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE125_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE127_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE128_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE129_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + Bool SVmcPmm__HE131_Switch; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + UInt8 SVmcPmm__HE132_Switch; + #endif + + + Bool SVmcPmm__HE170_LogicalOperator2; + Bool SVmcPmm__HE170_LogicalOperator6; + Bool SVmcPmm__HE170_LogicalOperator7; + Bool SVmcPmm__HE170__gicalOperator22; + Bool SVmcPmm__HE170__gicalOperator37; + Bool SVmcPmm__HE170__ionalOperator17; + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171_LogicalOperator3; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator10; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator18; + #endif + + + + + #ifdef SVmcPmm__HE171__lOperator35_AUX + Bool SVmcPmm__HE171__gicalOperator35; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator43; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE171__gicalOperator49; + #endif + + + Bool SVmcPmm__HE172_LogOp1; + Bool SVmcPmm__HE172_LogOp47; + Bool SVmcPmm__HE172_LogOp48; + Bool SVmcPmm__HE172__ionalOperator20; + Bool SVmcPmm__HE172__tionalOperator1; + Bool SVmcPmm__HE205_LogicalOperator1; + Bool SVmcPmm__HE205_LogicalOperator4; + Bool SVmcPmm__HE205__gicalOperator12; + Bool SVmcPmm__HE205__tionalOperator1; + Bool SVmcPmm__HE206_LogicalOperator1; + Bool SVmcPmm__HE206__gicalOperator12; + Bool SVmcPmm__HE207_LogicalOperator1; + Bool SVmcPmm__HE207__gicalOperator12; + Bool SVmcPmm__HE208_LogicalOperator1; + Bool SVmcPmm__HE208__gicalOperator12; + Bool SVmcPmm__HE210_LogicalOperator1; + Bool SVmcPmm__HE210__gicalOperator12; + Bool SVmcPmm__HE216_LogicalOperator1; + Bool SVmcPmm__HE216__gicalOperator12; + Bool SVmcPmm__HE219_LogicalOperator1; + Bool SVmcPmm__HE219__gicalOperator12; + Bool SVmcPmm__HE223__ionalOperator11; + Bool SVmcPmm__HE223__ionalOperator18; + Bool SVmcPmm__HE223__tionalOperator1; + Bool SVmcPmm__HE226_LogicalOperator3; + Bool SVmcPmm__HE226_LogicalOperator6; + Bool SVmcPmm__HE227_switch; + Bool SVmcPmm__HE230_Logic1; + UInt8 SVmcPmm__HE236_Switch; + UInt8 SVmcPmm__HE237_Switch; + UInt8 SVmcPmm__HE239_Switch; + UInt8 SVmcPmm__HE242_Switch; + UInt8 SVmcPmm__HE250_Switch; + Bool SVmcPmm__HE252_Switch; + UInt8 SVmcPmm__HE253_Switch; + UInt8 SVmcPmm__HE254_Switch; + UInt8 SVmcPmm__HE255_Switch; + UInt8 SVmcPmm__HE256_Switch; + UInt8 SVmcPmm__HE257_Switch; + UInt8 SVmcPmm__HE258_Switch; + Bool SVmcPmm__HE261_Switch; + UInt8 SVmcPmm__HE262_Switch; + UInt8 SVmcPmm__HE268_Switch; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE26_LogicalOperator15; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE26_LogicalOperator23; + #endif + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE27_LogicalOperator25; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE27___tionalOperator1; + #endif + + + UInt8 SVmcPmm__HE284_Switch; + UInt8 SVmcPmm__HE285_Switch; + UInt8 SVmcPmm__HE290_Switch; + UInt8 SVmcPmm__HE295_Switch; + UInt8 SVmcPmm__HE296_Switch; + Bool SVmcPmm__HE298_Switch; + UInt8 SVmcPmm__HE299_Switch; + Bool SVmcPmm__HE300_Switch; + UInt8 SVmcPmm__HE301_Switch; + UInt8 SVmcPmm__HE307_Switch; + UInt8 SVmcPmm__HE308_Switch; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE32_Switch; + #endif + Bool SVmcPmm__HE334_Rel; + Bool SVmcPmm__HE334_Rel1; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE33_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE34_Switch; + #endif + Bool SVmcPmm__HE352_Switch; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE35_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE36_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE37_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE38_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE39_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE40_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE41_Switch; + #endif + Bool SVmcPmm__HE428_Switch; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE42_Switch; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE44_Switch; + #endif + Bool SVmcPmm__HE458_Switch; + + + #ifdef SVmcPmm__HE477_MinMax_AUX + UInt8 SVmcPmm__HE477_MinMax; + #endif + + + + + #ifdef SVmcPmm__HE477__lOperator18_AUX + Bool SVmcPmm__HE482_Switch; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE484_Switch; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE486_Switch; + #endif + + + + + #ifdef SVmcPmm__HE512_Switch_AUX + Bool SVmcPmm__HE513_Logic1; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE523_Rel; + #endif + + + Bool SVmcPmm__HE527_LogicalOperator; + Bool SVmcPmm__HE532_Switch; + Bool SVmcPmm__HE533_Switch; + Bool SVmcPmm__HE544_Switch; + Bool SVmcPmm__HE547_Switch; + Bool SVmcPmm__HE548_Switch; + Bool SVmcPmm__HE549_Switch; + Bool SVmcPmm__HE550_Switch; + Bool SVmcPmm__HE551_Switch; + Bool SVmcPmm__HE552_Switch; + Bool SVmcPmm__HE553_Switch; + Bool SVmcPmm__HE557_Switch; + Bool SVmcPmm__HE560_Switch; + Bool SVmcPmm__HE562_Switch; + Bool SVmcPmm__HE563_Switch; + Bool SVmcPmm__HE564_Switch; + Bool SVmcPmm__HE576_Switch; + Bool SVmcPmm__HE578_Switch; + Bool SVmcPmm__HE584__tionalOperator1; + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE60_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE62_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE66_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE73_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE74_Switch; + #endif + + + Bool SVmcPmm__HE827_Switch; + Bool SVmcPmm__HE829_Switch; + UInt8 SVmcPmm__HE843_Switch; + UInt8 SVmcPmm__HE845_Switch; + UInt8 SVmcPmm__HE846_Switch; + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE90_Rel; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE90_Rel1; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE91_Rel; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE91_Rel1; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE92_Rel; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE92_Rel1; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE98_Switch; + #endif + + + + + UInt32 Aux_U32; + + + static Float32 SVmcPmm__HE153__HillGradAcc2deg = 0.F; + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 SVmcPmm__HE153__llGradAcc2deg_x[2] = + { + 0.F, 0.F + + }; + #endif + + + + + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + static Float32 SVmcPmm__HE821___TransHeatReq_x[2] = + { + 0.F, 0.F + + }; + #endif + + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + static UInt8 SVmcPmm__HE138_p_BrVacuumVeh_x[2] = + { + 0, 0 + + }; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static UInt8 SVmcPmm__HE154___HillGradient_c[2] = + { + 0, 0 + + }; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static UInt8 SVmcPmm__HE154___HillGradient_r[2] = + { + 0, 0 + + }; + #endif + + + static Bool SVmcPmm__HE159_LogOp3 = 0; + + + #ifdef SVmcPmm__HE173_Merge_AUX + static UInt8 SVmcPmm__HE173_Merge = 0; + #endif + + + + + #ifdef SVmcPmm__HE173_Merge1_AUX + static Bool SVmcPmm__HE173_Merge1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE173_Merge1_AUX + static Bool SVmcPmm__HE173_Merge3 = 0; + #endif + + + static Bool SVmcPmm__HE222_Rescaler = 0; + static Bool SVmcPmm__HE30_Switch = 0; + static Bool SVmcPmm__HE389__gicalOperator52 = 0; + static UInt8 SVmcPmm__HE398_Switch = 0; + static Bool SVmcPmm__HE403__gicalOperator52 = 0; + static UInt8 SVmcPmm__HE416_Switch = 0; + + + #ifdef SVmcPmm__HE477__lOperator18_AUX + static Bool SVmcPmm__HE477__gicalOperator18 = 0; + #endif + + + static Bool SVmcPmm__HE489_Switch = 0; + static Bool SVmcPmm__HE6_Merge3 = 0; + + + static Float32 X_SVmcPmm__HE118_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE119_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE120_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE121_UnitDelay = 0.F; + + + #if VcVmcPmm__HEP7_1140_Brake_1 + static Float32 X_SVmcPmm__HE133_UnitDelay = 1e+30F; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + static Float32 X_SVmcPmm__HE134_UnitDelay = 1e+30F; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + static Float32 X_SVmcPmm__HE137_UnitDelay = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE141_Del = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE141_Del1 = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE142_Del1 = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE143_Del1 = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE144_Del1 = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Float32 X_SVmcPmm__HE149_UnitDelay = 0.F; + #endif + + + static Float32 X_SVmcPmm__HE228_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE309_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE310_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE311_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE312_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE313_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE314_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE340_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE341_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE342_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE354_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE355_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE359_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE363_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE367_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE372_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE381_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE387_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE434_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE435_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE436_UnitDelay = 0.F; + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE445_UnitDelay = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE446_UnitDelay = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE447_UnitDelay = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE448_UnitDelay = 0.F; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Float32 X_SVmcPmm__HE449_UnitDelay = 0.F; + #endif + + + static Float32 X_SVmcPmm__HE455_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE456_Del = 0.F; + static Float32 X_SVmcPmm__HE456_Del1 = 0.F; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE45_UnitDelay = 1e+30F; + #endif + static Float32 X_SVmcPmm__HE461_UnitDelay = 0.F; + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE46_UnitDelay = 0.F; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE47_UnitDelay = 0.F; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE48_UnitDelay = 0.F; + #endif + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Float32 X_SVmcPmm__HE49_UnitDelay = 0.F; + #endif + + + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE507_UnitDelay = 0.F; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE508_UnitDelay = 0.F; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE509_UnitDelay = 0.F; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE510_UnitDelay = 1e+30F; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE511_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE512_Switch_AUX + static Float32 X_SVmcPmm__HE512_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE477_MinMax_AUX + static Float32 X_SVmcPmm__HE515_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE477_MinMax_AUX + static Float32 X_SVmcPmm__HE516_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE477_MinMax_AUX + static Float32 X_SVmcPmm__HE517_UnitDelay = 1e+30F; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Float32 X_SVmcPmm__HE523_UnitDelay = 0.F; + #endif + + + static Float32 X_SVmcPmm__HE579_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE580_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE581_UnitDelay = 1e+30F; + static Float32 X_SVmcPmm__HE582_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE583_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE584_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE585_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE586_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE587_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE588_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE593_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE594_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE595_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE596_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE597_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE598_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE599_UnitDelay = 0.F; + static Float32 X_SVmcPmm__HE600_UnitDelay = 0.F; + + + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE76_UnitDelay = 1e+30F; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE77_UnitDelay = 1e+30F; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE78_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + static Float32 X_SVmcPmm__HE819_UnitDelay = 0.F; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Float32 X_SVmcPmm__HE96_UnitDelay = 0.F; + #endif + + + + + static Bool X_SVmcPmm__HE110_UnitDelay1 = 0; + + + #if VcVmcPmm__HEP7_1140_Brake_1 + static Bool X_SVmcPmm__HE135_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_1140_Brake_1 + static Bool X_SVmcPmm__HE136_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Bool X_SVmcPmm__HE141_Del2 = 1; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Bool X_SVmcPmm__HE150_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + static Bool X_SVmcPmm__HE151_UnitDelay1 = 0; + #endif + + + static UInt8 X_SVmcPmm__HE170_UnitDelay3 = 0; + static Bool X_SVmcPmm__HE172_UnitDelay1 = 0; + static UInt8 X_SVmcPmm__HE172_UnitDelay3 = 0; + static Bool X_SVmcPmm__HE172_UnitDelay8 = 0; + static Bool X_SVmcPmm__HE223_UnitDelay8 = 0; + static Bool X_SVmcPmm__HE230_Delay = 0; + static Bool X_SVmcPmm__HE231_Delay = 0; + static Bool X_SVmcPmm__HE232_Delay = 0; + static Bool X_SVmcPmm__HE233_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE334_UnitDelay = 0; + static Bool X_SVmcPmm__HE335_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE336_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE337_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE338_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE339_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE349_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE350_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE351_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE356_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE360_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE364_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE369_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE378_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE384_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE3_UnitDelay10 = 0; + static UInt8 X_SVmcPmm__HE3_UnitDelay2 = 0; + static Bool X_SVmcPmm__HE432_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE433_UnitDelay1 = 0; + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE437_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE438_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE439_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE442_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE443_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + static Bool X_SVmcPmm__HE444_UnitDelay1 = 0; + #endif + + + static Bool X_SVmcPmm__HE452_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE454_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE456_Del2 = 1; + static Bool X_SVmcPmm__HE457_Delay = 0; + static Bool X_SVmcPmm__HE460_UnitDelay1 = 0; + + + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE480_Delay = 0; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE502_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE503_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE504_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE505_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Hw_B_AT + static Bool X_SVmcPmm__HE506_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + static Bool X_SVmcPmm__HE50_UnitDelay1 = 0; + #endif + + + #ifdef SVmcPmm__HE512_Switch_AUX + static Bool X_SVmcPmm__HE513_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE512_Switch_AUX + static Bool X_SVmcPmm__HE514_UnitDelay1 = 0; + #endif + + + static Bool X_SVmcPmm__HE525_Delay = 0; + static Bool X_SVmcPmm__HE526_Delay = 0; + static Bool X_SVmcPmm__HE527_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE528_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE529_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE530_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE589_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE590_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE591_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE592_UnitDelay1 = 0; + static UInt8 X_SVmcPmm__HE6_UnitDelay = 0; + static UInt8 X_SVmcPmm__HE6_UnitDelay1 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay10 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay11 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay12 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay13 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay14 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay15 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay2 = 0; + static UInt8 X_SVmcPmm__HE6_UnitDelay3 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay4 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay5 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay6 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay7 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay8 = 0; + static Bool X_SVmcPmm__HE6_UnitDelay9 = 0; + + + #ifdef SVmcPmm__HE821__ransHeatReq_AUX + static Bool X_SVmcPmm__HE820_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE90_UnitDelay = 0; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE91_UnitDelay = 0; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE92_UnitDelay = 0; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE93_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE94_UnitDelay1 = 0; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + static Bool X_SVmcPmm__HE97_UnitDelay1 = 0; + #endif + + + + + if (X_SVmcPmm__HE6_UnitDelay14) { + + X_SVmcPmm__HE313_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE313_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE313_UnitDelay; + } + + + xVcVmcPmm_B_PTDisengagedAT = (sVcDtcAtr_D_TransMode == 4) || (sVcDtcAtr_D_TransMode == 5) || + ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) && cVcVmcPmm_B_PTDGearLevAT) || + ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && cVcVmcPmm_B_PTDGearLevAT); + + + if (yVcDtcAtr_B_AT) { + + SVmcPmm__HE827_Switch = xVcVmcPmm_B_PTDisengagedAT; + } + else { + + SVmcPmm__HE827_Switch = yVcScIn_B_PowertrainDisengaged; + } + + + if (yVcVdm_B_AbsCtrlActv) { + + X_SVmcPmm__HE312_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE312_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE312_UnitDelay; + } + + + if (sVcVdm_D_EngRunngReqByBrk == 1) { + + X_SVmcPmm__HE314_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE314_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE314_UnitDelay; + } + + + if (cVcVmcPmm_B_UseStartAllowedPath) { + + Bool SVmcPmm__HE238_Switch; + Bool SVmcPmm__HE244_Switch; + Bool SVmcPmm__HE251_Switch; + Bool SVmcPmm__HE263_Switch; + + + if (cVcVmcPmm_B_LosStrt) { + + SVmcPmm__HE251_Switch = !(yVcDsePcr_B_EngStartInhibtRq); + } + else { + + SVmcPmm__HE251_Switch = 1; + } + + + if (cVcVmcPmm_B_AbsStrt) { + + SVmcPmm__HE263_Switch = X_SVmcPmm__HE312_UnitDelay > cVcVmcPmm_t_AbsStrt; + } + else { + + SVmcPmm__HE263_Switch = 1; + } + + + if (cVcVmcPmm_B_BrkStrt) { + + SVmcPmm__HE238_Switch = X_SVmcPmm__HE314_UnitDelay > cVcVmcPmm_t_BrkStrt; + } + else { + + SVmcPmm__HE238_Switch = 1; + } + + + if (cVcVmcPmm_B_DepStrt) { + + Bool SVmcPmm__HE826_Switch; + + + if (cVcVmcPmm_B_UseOldEngStrtAllwd) { + + SVmcPmm__HE826_Switch = yVcDepSs_B_StartAllowed; + } + else { + + SVmcPmm__HE826_Switch = yVcDepSs_B_EngStartAllowed; + } + + + if ((Vc_Pvc_Hw_B_Isg_CN != 0) || (Vc_Pvc_Hw_B_Efad_CN != 0)) { + + SVmcPmm__HE244_Switch = yVcDepTre_B_ISGTqAllw || SVmcPmm__HE826_Switch; + } + else { + + SVmcPmm__HE244_Switch = SVmcPmm__HE826_Switch; + } + } + else { + + SVmcPmm__HE244_Switch = 1; + } + + + xVcVmcPmm_B_StartAllowedPath = ((cVcVmcPmm_B_ATComStrt && yVcDtcAtr_B_AT && + (X_SVmcPmm__HE313_UnitDelay <= cVcVmcPmm_t_ATComStrt)) || yVcPpmPsm_B_ForcedStart || + yVcPpmPsm_B_DrReady || SVmcPmm__HE827_Switch || cVcVmcPmm_B_PTDStrt) && + SVmcPmm__HE251_Switch && SVmcPmm__HE263_Switch && SVmcPmm__HE238_Switch && + SVmcPmm__HE244_Switch; + } + else { + + xVcVmcPmm_B_StartAllowedPath = 1; + } + + + if (cVcVmcPmm_B_UseDriver) { + + SVmcPmm__HE257_Switch = sVcDeDmm_D_EngRunReqDriver; + } + else { + + SVmcPmm__HE257_Switch = 0; + } + + + if (Vc_Pvc_Hw_B_Isg_CN >= 1 ) { + + SVmcPmm__HE111_Switch = X_SVmcPmm__HE3_UnitDelay2 <= cVcVmcPmm_D_StrtModLongIceStsDetn; + } + else { + + SVmcPmm__HE111_Switch = yVcEc_B_StartMotor; + } + + + xVcVmcPmm_B_EngRunningRpm = sVcEc_n_Eng > cVcVmcPmm_n_EngRunning; + + + if (xVcVmcPmm_B_EngRunningRpm) { + + X_SVmcPmm__HE121_UnitDelay = X_SVmcPmm__HE121_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE121_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EngRunningRpmDly = X_SVmcPmm__HE121_UnitDelay > cVcVmcPmm_t_Running; + + + xVcVmcPmm_B_Started = sVcEc_n_Eng > cVcVmcPmm_n_EngStarted; + + + if (xVcVmcPmm_B_Started) { + + X_SVmcPmm__HE119_UnitDelay = X_SVmcPmm__HE119_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE119_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_StartedDly = X_SVmcPmm__HE119_UnitDelay > cVcVmcPmm_t_Started; + + + if (SVmcPmm__HE111_Switch) { + + SVmcPmm__HE114_Switch = xVcVmcPmm_B_EngRunningRpmDly; + } + else { + + SVmcPmm__HE114_Switch = xVcVmcPmm_B_EngRunningRpmDly || xVcVmcPmm_B_StartedDly; + } + + + if (cVcVmcPmm_B_UseIscActvnEMS) { + + if (cVcVmcPmm_B_UseTqSPM) { + + SVmcPmm__HE112_Switch = !(yVcCmnSta_B_StaExeTx); + } + else { + + SVmcPmm__HE112_Switch = yVcEc_B_IscActvnEMS; + } + } + else { + + SVmcPmm__HE112_Switch = 1; + } + + + if (cVcVmcPmm_B_UseTqSPM) { + + rVcVmcPmm_rt_FCLvl = sVcInjFuCut_rt_Lvl; + } + else { + + rVcVmcPmm_rt_FCLvl = sVcEc_Ps_FCLvl; + } + + + xVcVmcPmm_B_EngRunning = SVmcPmm__HE114_Switch && SVmcPmm__HE112_Switch && (rVcVmcPmm_rt_FCLvl + <= cVcVmcPmm_rt_FCLvlRunning); + + + if (cVcVmcPmm_B_EngStoppedUseHiRes) { + if (sVcEc_n_EngHiRes < sVcEc_n_Eng) { + + SVmcPmm__HE117_Switch = sVcEc_n_EngHiRes; + } + else { + + SVmcPmm__HE117_Switch = sVcEc_n_Eng; + } + } + else { + + SVmcPmm__HE117_Switch = sVcEc_n_Eng; + } + + + if (SVmcPmm__HE117_Switch < cVcVmcPmm_n_EngStopped) { + + X_SVmcPmm__HE120_UnitDelay = X_SVmcPmm__HE120_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE120_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EngStopped = X_SVmcPmm__HE120_UnitDelay > cVcVmcPmm_t_MinStopTime; + + + if (yVcPpmRc_B_ChangeOfMindInhibit && (!(X_SVmcPmm__HE110_UnitDelay1))) { + + X_SVmcPmm__HE118_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE118_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE118_UnitDelay; + } + + + X_SVmcPmm__HE110_UnitDelay1 = yVcPpmRc_B_ChangeOfMindInhibit; + + + if (cVcVmcPmm_B_UseComInhbtIceStatus) { + + SVmcPmm__HE113_Switch = yVcEc_B_StartMotor || (((!(yVcPpmRc_B_ChangeOfMindInhibit)) || + (X_SVmcPmm__HE118_UnitDelay > cVcVmcPmm_t_ComInhbtIceStatus)) && + X_SVmcPmm__HE3_UnitDelay10); + } + else { + + SVmcPmm__HE113_Switch = X_SVmcPmm__HE3_UnitDelay10; + } + + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping) { + + + + if (xVcVmcPmm_B_EngStopped) { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped = 1; + CVmcPmm__HE1_D_IceStatus = 0; + } + else { + + if (SVmcPmm__HE113_Switch) { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 1; + CVmcPmm__HE1_D_IceStatus = 1; + } + } + + } + else { + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped) { + + + + if (SVmcPmm__HE113_Switch) { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 1; + CVmcPmm__HE1_D_IceStatus = 1; + } + + } + else { + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE4_Running) { + + + + if (!(SVmcPmm__HE113_Switch)) { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE4_Running = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 1; + CVmcPmm__HE1_D_IceStatus = 3; + } + + } + else { + if (SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting) { + + + + if (xVcVmcPmm_B_EngRunning) { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE4_Running = 1; + CVmcPmm__HE1_D_IceStatus = 2; + } + else { + + if (!(SVmcPmm__HE113_Switch)) { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE5_Starting = 0; + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE2_Stopping = 1; + CVmcPmm__HE1_D_IceStatus = 3; + } + } + + } + else { + + SIBFS_1131_IceStatus_VmcPmm__HE.CVmcPmm__HE3_Stopped = 1; + CVmcPmm__HE1_D_IceStatus = 0; + } + } + } + } + + + + xVcVmcPmm_B_IceStartRun = (CVmcPmm__HE1_D_IceStatus == 1) || (CVmcPmm__HE1_D_IceStatus == 2); + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqDriver = SVmcPmm__HE257_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqDriver = SVmcPmm__HE257_Switch == 2; + } + + + if (cVcVmcPmm_B_UsePsm) { + + SVmcPmm__HE242_Switch = sVcPpmPsm_D_EngRunReqPsm; + } + else { + + SVmcPmm__HE242_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqPsm = SVmcPmm__HE242_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqPsm = SVmcPmm__HE242_Switch == 2; + } + + + if (cVcVmcPmm_B_UseEm) { + + SVmcPmm__HE301_Switch = sVcVmcEm_D_EngRunReqEm; + } + else { + + SVmcPmm__HE301_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqEm = SVmcPmm__HE301_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqEm = SVmcPmm__HE301_Switch == 2; + } + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + + if (ts_VcVmcPmm__HEP7 > cVcVmcPmm_tc_BcmLongAccFilt) { + + SVmcPmm__HE144_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE144_MinMax = cVcVmcPmm_tc_BcmLongAccFilt; + } + if (1e-06F > SVmcPmm__HE144_MinMax) { + SVmcPmm__HE144_MinMax = 1e-06F; + } + + + if (SVmcPmm__HE144_MinMax != 0.F) { + + SVmcPmm__HE144_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE144_MinMax; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE144_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE144_Prod1 = 3.402823466e+38F; + } + } + + + rVcVmcPmm_a_BcmLongAccFilt = X_SVmcPmm__HE144_Del1 + ((sVcVdm_a_ALgt - + X_SVmcPmm__HE144_Del1) * SVmcPmm__HE144_Prod1); + + + X_SVmcPmm__HE144_Del1 = rVcVmcPmm_a_BcmLongAccFilt; + + + SVmcPmm__HE18_Product4 = sVcScIn_v_VehSpdLgt / 3.6F; + + + if (X_SVmcPmm__HE141_Del2) { + + rVcVmcPmm_a_VehAccFilt = 0.F; + } + else { + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_MinMax; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_MinMax1; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_Prod; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_Prod1; + #endif + + + + + #if VcVmcPmm__HEP7_1150_Gradient_estimation_2 + Float32 SVmcPmm__HE141_Sum; + #endif + + + + + SVmcPmm__HE141_Sum = SVmcPmm__HE18_Product4 - X_SVmcPmm__HE141_Del; + + + if (ts_VcVmcPmm__HEP7 > 1e-06F) { + + SVmcPmm__HE141_MinMax1 = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE141_MinMax1 = 1e-06F; + } + + + if (SVmcPmm__HE141_MinMax1 != 0.F) { + SVmcPmm__HE141_Prod = SVmcPmm__HE141_Sum / SVmcPmm__HE141_MinMax1; + } + else { + if (SVmcPmm__HE141_Sum < 0.F) { + SVmcPmm__HE141_Prod = -3.402823466e+38F; + } + else { + SVmcPmm__HE141_Prod = 3.402823466e+38F; + } + } + + + if (ts_VcVmcPmm__HEP7 > cVcVmcPmm_tc_VehAccFilt) { + + SVmcPmm__HE141_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE141_MinMax = cVcVmcPmm_tc_VehAccFilt; + } + if (1e-06F > SVmcPmm__HE141_MinMax) { + SVmcPmm__HE141_MinMax = 1e-06F; + } + + + if (SVmcPmm__HE141_MinMax != 0.F) { + + SVmcPmm__HE141_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE141_MinMax; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE141_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE141_Prod1 = 3.402823466e+38F; + } + } + + + rVcVmcPmm_a_VehAccFilt = X_SVmcPmm__HE141_Del1 + ((SVmcPmm__HE141_Prod - + X_SVmcPmm__HE141_Del1) * SVmcPmm__HE141_Prod1); + } + + + X_SVmcPmm__HE141_Del = SVmcPmm__HE18_Product4; + + + X_SVmcPmm__HE141_Del1 = rVcVmcPmm_a_VehAccFilt; + + + X_SVmcPmm__HE141_Del2 = 0; + + + if (yVcScIn_B_VehSpdDirRvs && cVcVmcPmm_B_UseWhlSpdDirection) { + + rVcVmcPmm_a_SignedHGVehFilt = -1.F * rVcVmcPmm_a_VehAccFilt; + } + else { + + rVcVmcPmm_a_SignedHGVehFilt = rVcVmcPmm_a_VehAccFilt; + } + + + rVcVmcPmm_a_MergedAcc = rVcVmcPmm_a_BcmLongAccFilt - rVcVmcPmm_a_SignedHGVehFilt; + if (cVcVmcPmm_a_HillGradientMax < rVcVmcPmm_a_MergedAcc) { + SVmcPmm__HE152_MinMax = cVcVmcPmm_a_HillGradientMax; + } + else { + SVmcPmm__HE152_MinMax = rVcVmcPmm_a_MergedAcc; + } + if (SVmcPmm__HE152_MinMax > cVcVmcPmm_a_HillGradientMin) { + rVcVmcPmm_a_MergedAccSaturated = SVmcPmm__HE152_MinMax; + } + else { + rVcVmcPmm_a_MergedAccSaturated = cVcVmcPmm_a_HillGradientMin; + } + + + if ((sVcVmm_D_CarModSts1 == 5) && cVcVmcPmm_B_UseDefHGDynoMd) { + + SVmcPmm__HE147_Switch = cVcVmcPmm_a_HillGradientFault; + } + else { + + SVmcPmm__HE147_Switch = rVcVmcPmm_a_MergedAccSaturated; + } + + + xVcVmcPmm_B_StandStill = sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_StandStillLoLim; + + + if (xVcVmcPmm_B_StandStill) { + + X_SVmcPmm__HE149_UnitDelay = X_SVmcPmm__HE149_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE149_UnitDelay = 0.F; + } + + + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_tc_HillGradient_r[0]), 6, sVcScIn_v_VehSpdLgt, + SVmcPmm__HE154___HillGradient_r); + + + if (ts_VcVmcPmm__HEP7 > cVcVmcPmm_tc_BrkTrqFilt) { + + SVmcPmm__HE142_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE142_MinMax = cVcVmcPmm_tc_BrkTrqFilt; + } + if (1e-06F > SVmcPmm__HE142_MinMax) { + SVmcPmm__HE142_MinMax = 1e-06F; + } + + + if (SVmcPmm__HE142_MinMax != 0.F) { + + SVmcPmm__HE142_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE142_MinMax; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE142_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE142_Prod1 = 3.402823466e+38F; + } + } + + + rVcVmcPmm_Tq_BrkTrqFilt = X_SVmcPmm__HE142_Del1 + ((sVcDseWt_Tq_BrkFricTqAtWhl - + X_SVmcPmm__HE142_Del1) * SVmcPmm__HE142_Prod1); + + + X_SVmcPmm__HE142_Del1 = rVcVmcPmm_Tq_BrkTrqFilt; + + + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_tc_HillGradient_c[0]), 4, + rVcVmcPmm_Tq_BrkTrqFilt, SVmcPmm__HE154___HillGradient_c); + + + rVcVmcPmm_tc_HillGradient = Tab2DIntpI1T6((const Float32 *) + &(mVcVmcPmm_tc_HillGradient[0][0]), 4, &(SVmcPmm__HE154___HillGradient_r[0]), + &(SVmcPmm__HE154___HillGradient_c[0])); + + + if (X_SVmcPmm__HE149_UnitDelay > cVcVmcPmm_t_StandStill) { + + rVcVmcPmm_tc_HillGadient = cVcVmcPmm_tc_StandStill; + } + else { + + rVcVmcPmm_tc_HillGadient = rVcVmcPmm_tc_HillGradient; + } + + + if (ts_VcVmcPmm__HEP7 > rVcVmcPmm_tc_HillGadient) { + + SVmcPmm__HE143_MinMax = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE143_MinMax = rVcVmcPmm_tc_HillGadient; + } + if (1e-06F > SVmcPmm__HE143_MinMax) { + SVmcPmm__HE143_MinMax = 1e-06F; + } + + + if (SVmcPmm__HE143_MinMax != 0.F) { + + SVmcPmm__HE143_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE143_MinMax; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE143_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE143_Prod1 = 3.402823466e+38F; + } + } + + + rVcVmcPmm_a_MergedAccFilt = X_SVmcPmm__HE143_Del1 + ((SVmcPmm__HE147_Switch - + X_SVmcPmm__HE143_Del1) * SVmcPmm__HE143_Prod1); + + + X_SVmcPmm__HE143_Del1 = rVcVmcPmm_a_MergedAccFilt; + + + TabIdxS18T390((const Float32 *) &(tVcVmcPmm_Z_HillGradAcc2deg_x[0]), 5, + rVcVmcPmm_a_MergedAccFilt, SVmcPmm__HE153__llGradAcc2deg_x); + + + SVmcPmm__HE153__HillGradAcc2deg = Tab1DIntpI1T54((const Float32 *) + &(tVcVmcPmm_Z_HillGradAcc2deg[0]), &(SVmcPmm__HE153__llGradAcc2deg_x[0])); + + + xVcVmcPmm_B_QfFaultLongAcc = (sVcVdm_Qf_ALgtQf != cVcVmcPmm_D_QfEpbLongAccOK) && + (sVcVdm_Qf_ALgtQf != cVcVmcPmm_D_QfEpbLongAccInit); + + + xVcVmcPmm_B_QfFault = xVcVmcPmm_B_QfFaultLongAcc || (!(yVcScIn_B_VehSpdLgtOk)); + + + xVcVmcPmm_B_StopInhibitUpHill = (SVmcPmm__HE153__HillGradAcc2deg >= + cVcVmcPmm_Z_SetLimUpHill) || ((SVmcPmm__HE153__HillGradAcc2deg > + cVcVmcPmm_Z_ResetLimUpHill) && X_SVmcPmm__HE150_UnitDelay1); + + + X_SVmcPmm__HE150_UnitDelay1 = xVcVmcPmm_B_StopInhibitUpHill; + + + xVcVmcPmm_B_StopInhibitDownHill = (SVmcPmm__HE153__HillGradAcc2deg <= + cVcVmcPmm_Z_SetLimDownHill) || ((SVmcPmm__HE153__HillGradAcc2deg < + cVcVmcPmm_Z_ResetLimDownHill) && X_SVmcPmm__HE151_UnitDelay1); + + + X_SVmcPmm__HE151_UnitDelay1 = xVcVmcPmm_B_StopInhibitDownHill; + + + xVcVmcPmm_B_GradOutOfLim = xVcVmcPmm_B_StopInhibitUpHill || + xVcVmcPmm_B_StopInhibitDownHill; + + + xVcVmcPmm_B_HGSpdOK = sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_SpeedLimitHG; + + + xVcVmcPmm_B_BrkHGStart = xVcVmcPmm_B_GradOutOfLim && xVcVmcPmm_B_HGSpdOK; + + + if (xVcVmcPmm_B_QfFault) { + + xVcVmcPmm_B_BrkHillGradStart = cVcVmcPmm_B_BrkHillGradStart; + } + else { + + xVcVmcPmm_B_BrkHillGradStart = xVcVmcPmm_B_BrkHGStart; + } + #endif + #if VcVmcPmm__HEP7_1140_Brake_1 + + if (cVcVmcPmm_B_BrkEngRunReq) { + + SVmcPmm__HE128_Switch = sVcVdm_D_EngRunngReqByBrk; + } + else { + + SVmcPmm__HE128_Switch = 0; + } + + + if (!(yVcEc_B_BCMNodeAlive)) { + + X_SVmcPmm__HE137_UnitDelay = X_SVmcPmm__HE137_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE137_UnitDelay = 0.F; + } + + + if ((X_SVmcPmm__HE137_UnitDelay > cVcVmcPmm_t_BrkEngRunReqAlive) && + cVcVmcPmm_B_BrkEngRunReqAlive) { + + SVmcPmm__HE132_Switch = 2; + } + else { + + SVmcPmm__HE132_Switch = 0; + } + + + if (cVcVmcPmm_B_BrkUseNegVacuum) { + + SVmcPmm__HE130_Switch = -1.F * sVcVdm_p_PVac; + } + else { + + SVmcPmm__HE130_Switch = sVcVdm_p_PVac; + } + + + xVcVmcPmm_B_BrkVacuumStart = SVmcPmm__HE130_Switch > cVcVmcPmm_p_BrVacuum; + + + if (xVcVmcPmm_B_BrkVacuumStart && cVcVmcPmm_B_BrkVacuum) { + + SVmcPmm__HE125_Switch = 2; + } + else { + + SVmcPmm__HE125_Switch = 0; + } + + + TabIdxS18T6((const Float32 *) &(tVcVmcPmm_p_BrVacuumVeh_x[0]), 7, sVcScIn_v_VehSpdLgt, + SVmcPmm__HE138_p_BrVacuumVeh_x); + + + rVcVmcPmm_p_BrVacuumVeh = Tab1DIntpI1T6((const Float32 *) &(tVcVmcPmm_p_BrVacuumVeh[0]), + &(SVmcPmm__HE138_p_BrVacuumVeh_x[0])); + + + xVcVmcPmm_B_BrkVacuumVeh = SVmcPmm__HE130_Switch > rVcVmcPmm_p_BrVacuumVeh; + + + if (xVcVmcPmm_B_BrkVacuumVeh && cVcVmcPmm_B_BrkVacuumVeh) { + + SVmcPmm__HE129_Switch = 2; + } + else { + + SVmcPmm__HE129_Switch = 0; + } + + + if (SVmcPmm__HE125_Switch > SVmcPmm__HE129_Switch) { + + sVcVmcPmm_D_EngRunReqBrkVac = SVmcPmm__HE125_Switch; + } + else { + + sVcVmcPmm_D_EngRunReqBrkVac = SVmcPmm__HE129_Switch; + } + + + if (yVcVdm_B_AbsCtrlActv) { + + X_SVmcPmm__HE134_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE134_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE134_UnitDelay; + } + + + if ((X_SVmcPmm__HE134_UnitDelay <= cVcVmcPmm_t_BrkAbs) && cVcVmcPmm_B_BrkAbs) { + + SVmcPmm__HE127_Switch = 2; + } + else { + + SVmcPmm__HE127_Switch = 0; + } + + + X_SVmcPmm__HE135_UnitDelay1 = (SVmcPmm__HE153__HillGradAcc2deg >= + cVcVmcPmm_Z_BrkHGSkipParkDownL) || ((SVmcPmm__HE153__HillGradAcc2deg > + cVcVmcPmm_Z_BrkHGSkipParkDownH) && X_SVmcPmm__HE135_UnitDelay1); + + + X_SVmcPmm__HE136_UnitDelay1 = (SVmcPmm__HE153__HillGradAcc2deg <= + cVcVmcPmm_Z_BrkHGSkipParkUpL) || ((SVmcPmm__HE153__HillGradAcc2deg < + cVcVmcPmm_Z_BrkHGSkipParkUpH) && X_SVmcPmm__HE136_UnitDelay1); + + + xVcVmcPmm_B_BrkHGSkipParkPre = yVcDtcAtr_B_AT && X_SVmcPmm__HE135_UnitDelay1 && + X_SVmcPmm__HE136_UnitDelay1; + + + xVcVmcPmm_B_BrkHGSkipPark = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && + xVcVmcPmm_B_BrkHGSkipParkPre && cVcVmcPmm_B_BrkHGSkipPark; + + + if (xVcVmcPmm_B_BrkHillGradStart) { + + X_SVmcPmm__HE133_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE133_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE133_UnitDelay; + } + + + if (xVcVmcPmm_B_BrkHGSkipPark) { + + SVmcPmm__HE131_Switch = 0; + } + else { + + SVmcPmm__HE131_Switch = X_SVmcPmm__HE133_UnitDelay <= cVcVmcPmm_t_BrkHillGrad; + } + + + if (SVmcPmm__HE131_Switch && cVcVmcPmm_B_BrkHillGrad) { + + sVcVmcPmm_D_EngRunReqHG = cVcVmcPmm_D_BrkHillVal; + } + else { + + sVcVmcPmm_D_EngRunReqHG = 0; + } + + + rVcVmcPmm_D_EngRunReqBrake = 0; + if (SVmcPmm__HE128_Switch > rVcVmcPmm_D_EngRunReqBrake) { + rVcVmcPmm_D_EngRunReqBrake = SVmcPmm__HE128_Switch; + } + if (SVmcPmm__HE132_Switch > rVcVmcPmm_D_EngRunReqBrake) { + rVcVmcPmm_D_EngRunReqBrake = SVmcPmm__HE132_Switch; + } + + + if (sVcVmcPmm_D_EngRunReqBrkVac > rVcVmcPmm_D_EngRunReqBrake) { + + rVcVmcPmm_D_EngRunReqBrake = sVcVmcPmm_D_EngRunReqBrkVac; + } + + + if (SVmcPmm__HE127_Switch > rVcVmcPmm_D_EngRunReqBrake) { + rVcVmcPmm_D_EngRunReqBrake = SVmcPmm__HE127_Switch; + } + + + if (sVcVmcPmm_D_EngRunReqHG > rVcVmcPmm_D_EngRunReqBrake) { + + rVcVmcPmm_D_EngRunReqBrake = sVcVmcPmm_D_EngRunReqHG; + } + #endif + + + if (cVcVmcPmm_B_UseBrake) { + + SVmcPmm__HE268_Switch = rVcVmcPmm_D_EngRunReqBrake; + } + else { + + SVmcPmm__HE268_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + yVcVmcPmm_B_EngRunReqBrake = SVmcPmm__HE268_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqBrake = SVmcPmm__HE268_Switch == 2; + } + + + if (cVcVmcPmm_B_UseSapp) { + + SVmcPmm__HE290_Switch = sVcAsy_D_EngRunngReqByParkAssi; + } + else { + + SVmcPmm__HE290_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + yVcVmcPmm_B_EngRunReqSapp = SVmcPmm__HE290_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqSapp = SVmcPmm__HE290_Switch == 2; + } + + + if (cVcVmcPmm_B_UseTrans) { + + SVmcPmm__HE307_Switch = sVcDseGb_D_TrsmEngRunReq; + } + else { + + SVmcPmm__HE307_Switch = 0; + } + + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + SVmcPmm__HE352_Switch = SVmcPmm__HE307_Switch >= 1; + } + else { + + SVmcPmm__HE352_Switch = SVmcPmm__HE307_Switch == 2; + } + + + SVmcPmm__HE205__tionalOperator1 = CVmcPmm__HE1_D_IceStatus == 0; + + + SVmcPmm__HE205_LogicalOperator1 = SVmcPmm__HE352_Switch && (!(X_SVmcPmm__HE350_UnitDelay1)) && + SVmcPmm__HE205__tionalOperator1 && cVcVmcPmm_B_GlitchEngOnTrans; + + + X_SVmcPmm__HE350_UnitDelay1 = SVmcPmm__HE352_Switch; + + + if (SVmcPmm__HE205_LogicalOperator1 && (!(X_SVmcPmm__HE349_UnitDelay1))) { + + X_SVmcPmm__HE354_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE354_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE354_UnitDelay; + } + + + X_SVmcPmm__HE349_UnitDelay1 = SVmcPmm__HE205_LogicalOperator1; + + + xVcVmcPmm_B_TransEngOnBlock = X_SVmcPmm__HE354_UnitDelay <= cVcVmcPmm_t_GlitchEngOnTrans; + + + SVmcPmm__HE205_LogicalOperator4 = SVmcPmm__HE205__tionalOperator1 || (CVmcPmm__HE1_D_IceStatus + == 3); + + + SVmcPmm__HE205__gicalOperator12 = SVmcPmm__HE205_LogicalOperator4 && (SVmcPmm__HE307_Switch == + 0) && cVcVmcPmm_B_MinStopTrans; + + + if (SVmcPmm__HE205__gicalOperator12 && (!(X_SVmcPmm__HE351_UnitDelay1))) { + + X_SVmcPmm__HE355_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE355_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE355_UnitDelay; + } + + + X_SVmcPmm__HE351_UnitDelay1 = SVmcPmm__HE205__gicalOperator12; + + + xVcVmcPmm_B_TransBlocking = X_SVmcPmm__HE355_UnitDelay <= cVcVmcPmm_t_MinStopTrans; + + + xVcVmcPmm_B_TransBlock = SVmcPmm__HE205_LogicalOperator4 && xVcVmcPmm_B_TransBlocking; + + + if (xVcVmcPmm_B_TransEngOnBlock || xVcVmcPmm_B_TransBlock) { + + yVcVmcPmm_B_EngRunReqTrans = 0; + } + else { + + yVcVmcPmm_B_EngRunReqTrans = SVmcPmm__HE352_Switch; + } + + + SVmcPmm__HE206_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + + if (cVcVmcPmm_B_UseEMS) { + + SVmcPmm__HE308_Switch = sVcEc_D_EngRunReqEMS; + } + else { + + SVmcPmm__HE308_Switch = 0; + } + + + SVmcPmm__HE206__gicalOperator12 = SVmcPmm__HE206_LogicalOperator1 && (SVmcPmm__HE308_Switch == + 0) && cVcVmcPmm_B_MinStopEMS; + + + if (SVmcPmm__HE206__gicalOperator12 && (!(X_SVmcPmm__HE356_UnitDelay1))) { + + X_SVmcPmm__HE359_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE359_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE359_UnitDelay; + } + + + X_SVmcPmm__HE356_UnitDelay1 = SVmcPmm__HE206__gicalOperator12; + + + xVcVmcPmm_B_EMSBlocked = X_SVmcPmm__HE359_UnitDelay <= cVcVmcPmm_t_MinStopEMS; + + + xVcVmcPmm_B_EMSBlock = SVmcPmm__HE206_LogicalOperator1 && xVcVmcPmm_B_EMSBlocked; + + + if (xVcVmcPmm_B_EMSBlock) { + + yVcVmcPmm_B_EngRunReqEms = 0; + } + else { + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + yVcVmcPmm_B_EngRunReqEms = SVmcPmm__HE308_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqEms = SVmcPmm__HE308_Switch == 2; + } + } + + + SVmcPmm__HE207_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + + if (yVcCem_B_StopStrtReq1WdReq) { + + SVmcPmm__HE843_Switch = 2; + } + else { + + if (yVcCem_B_StrtInhbReq1WdReq) { + + SVmcPmm__HE843_Switch = 1; + } + else { + + SVmcPmm__HE843_Switch = 0; + } + } + + + if (yVcCem_B_EngRunngReqByVehModMgrElectricalSystem) { + + SVmcPmm__HE845_Switch = 2; + } + else { + + SVmcPmm__HE845_Switch = 0; + } + + + if (SVmcPmm__HE843_Switch > SVmcPmm__HE845_Switch) { + + sVcVmcPmm_D_EngRunReqEmLv = SVmcPmm__HE843_Switch; + } + else { + + sVcVmcPmm_D_EngRunReqEmLv = SVmcPmm__HE845_Switch; + } + + + if (cVcVmcPmm_B_UseEmLv) { + + SVmcPmm__HE237_Switch = sVcVmcPmm_D_EngRunReqEmLv; + } + else { + + SVmcPmm__HE237_Switch = 0; + } + + + SVmcPmm__HE207__gicalOperator12 = SVmcPmm__HE207_LogicalOperator1 && (SVmcPmm__HE237_Switch == + 0) && cVcVmcPmm_B_MinStopEmLv; + + + if (SVmcPmm__HE207__gicalOperator12 && (!(X_SVmcPmm__HE360_UnitDelay1))) { + + X_SVmcPmm__HE363_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE363_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE363_UnitDelay; + } + + + X_SVmcPmm__HE360_UnitDelay1 = SVmcPmm__HE207__gicalOperator12; + + + xVcVmcPmm_B_EmLvBlocked = X_SVmcPmm__HE363_UnitDelay <= cVcVmcPmm_t_MinStopEmLv; + + + if (SVmcPmm__HE207_LogicalOperator1 && xVcVmcPmm_B_EmLvBlocked) { + + yVcVmcPmm_B_EngRunReqEmLv = 0; + } + else { + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + yVcVmcPmm_B_EngRunReqEmLv = SVmcPmm__HE237_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqEmLv = SVmcPmm__HE237_Switch == 2; + } + } + + + SVmcPmm__HE208_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + + if (yVcCem_B_EngRunngReqByVehModMgrClimate) { + + SVmcPmm__HE846_Switch = 2; + } + else { + + SVmcPmm__HE846_Switch = 0; + } + + + if (sVcCcm_D_EngRunngReqByClima > SVmcPmm__HE846_Switch) { + + sVcVmcPmm_D_EngRunReqClim = sVcCcm_D_EngRunngReqByClima; + } + else { + + sVcVmcPmm_D_EngRunReqClim = SVmcPmm__HE846_Switch; + } + + + if (cVcVmcPmm_B_UseClim) { + + SVmcPmm__HE236_Switch = sVcVmcPmm_D_EngRunReqClim; + } + else { + + SVmcPmm__HE236_Switch = 0; + } + + + SVmcPmm__HE208__gicalOperator12 = SVmcPmm__HE208_LogicalOperator1 && (SVmcPmm__HE236_Switch == + 0) && cVcVmcPmm_B_MinStopClim; + + + if (SVmcPmm__HE208__gicalOperator12 && (!(X_SVmcPmm__HE364_UnitDelay1))) { + + X_SVmcPmm__HE367_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE367_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE367_UnitDelay; + } + + + X_SVmcPmm__HE364_UnitDelay1 = SVmcPmm__HE208__gicalOperator12; + + + xVcVmcPmm_B_ClimBlocked = X_SVmcPmm__HE367_UnitDelay <= cVcVmcPmm_t_MinStopClim; + + + if (SVmcPmm__HE208_LogicalOperator1 && xVcVmcPmm_B_ClimBlocked) { + + yVcVmcPmm_B_EngRunReqClim = 0; + } + else { + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + yVcVmcPmm_B_EngRunReqClim = SVmcPmm__HE236_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqClim = SVmcPmm__HE236_Switch == 2; + } + } + + + if (cVcVmcPmm_B_UseLOS) { + + SVmcPmm__HE239_Switch = sVcDsePcr_D_EngRunRq; + } + else { + + SVmcPmm__HE239_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqPcr = SVmcPmm__HE239_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqPcr = SVmcPmm__HE239_Switch == 2; + } + + + if (cVcVmcPmm_B_EngineArchitecture) { + + SVmcPmm__HE848_Switch = sVcEc_Te_EngClnt; + } + else { + + SVmcPmm__HE848_Switch = sVcEc_Te_EngCooltT; + } + if (Vc_Pvc_Hw_B_HVSystem_CN != 0) { + + if (cVcVmcPmm_B_DrLeaveEnable) { + + Bool SVmcPmm__HE157_LogOp3; + + if (!(SVmcPmm__HE157_RSWE)) { + + INIT_SVmcPmm____verLeaveVehicle(); + + + SVmcPmm__HE157_RSWE = 1; + } + + if (yVcPpmPsm_B_DriveCycleActive) { + + X_SVmcPmm__HE163_UnitDelay = X_SVmcPmm__HE163_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE163_UnitDelay = 0.F; + } + + + SVmcPmm__HE157_LogOp3 = (!(yVcScDep_B_DrvrPrsnt)) && (X_SVmcPmm__HE163_UnitDelay > + cVcVmcPmm_t_DrLeaveDCADly) && (sVcScIn_v_VehSpdLgtMax < cVcVmcPmm_v_DrLeaveLim); + + + if (SVmcPmm__HE157_LogOp3 && cVcVmcPmm_B_DrLeavePowerDown) { + + X_SVmcPmm__HE164_UnitDelay = X_SVmcPmm__HE164_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE164_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_DrLeavePowerDownReq = X_SVmcPmm__HE164_UnitDelay > + cVcVmcPmm_t_DrLeavePwrDwnDly; + + + xVcVmcPmm_B_DrLeaveKeepRun = SVmcPmm__HE157_LogOp3 && cVcVmcPmm_B_DrLeaveKeepRunReq; + + + if (xVcVmcPmm_B_DrLeaveKeepRun) { + + rVcVmcPmm_D_EngRunReqDrLeave = 1; + } + else { + + rVcVmcPmm_D_EngRunReqDrLeave = 0; + } + + + if (SVmcPmm__HE157_LogOp3 && (CVmcPmm__HE1_D_IceStatus != 2) && + yVcDseEm_B_EngRunReqSocMin) { + + X_SVmcPmm__HE165_UnitDelay = X_SVmcPmm__HE165_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE165_UnitDelay = 0.F; + } + + + yVcVmcPmm_B_AutoParkReq = X_SVmcPmm__HE165_UnitDelay > cVcVmcPmm_t_DrLeaveAutoParkReq; + } + else { + + SVmcPmm__HE157_RSWE = 0; + } + + + if (cVcVmcPmm_B_FCAdaptEnable) { + + Bool SVmcPmm__HE156_LogicalOperator2; + Bool SVmcPmm__HE156_LogicalOperator3; + Bool SVmcPmm__HE156_LogicalOperator5; + Bool SVmcPmm__HE156__gicalOperator18; + + if (!(SVmcPmm__HE156_RSWE)) { + + INIT_SVmcPmm_____FuelCutRequest(); + + + SVmcPmm__HE156_RSWE = 1; + } + + SVmcPmm__HE156_LogicalOperator2 = (cVcVmcPmm_B_UseEmiGpfFC && + yVcEmiGpf_B_FuelCutReqHybrid) || yVcObdSch_B_FuelCutReq; + + + SVmcPmm__HE156__gicalOperator18 = (!(SVmcPmm__HE156_LogicalOperator2)) || + (sVcDtcAtr_D_LockUp < cVcVmcPmm_D_FCAdaptLockUpRst) || (sVcDtcAtr_D_TrgGear < + cVcVmcPmm_D_FCAdaptGearRst) || (sVcEc_n_Eng < cVcVmcPmm_n_FCAdaptEngRst) || + (sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_FCAdaptVehRst) || (SVmcPmm__HE848_Switch < + cVcVmcPmm_Te_FCAdaptEngClntRst) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral)); + + + SVmcPmm__HE156_LogicalOperator3 = SVmcPmm__HE156_LogicalOperator2 && (sVcDtcAtr_D_LockUp + >= cVcVmcPmm_D_FCAdaptLockUpSet) && (sVcDtcAtr_D_TrgGear >= + cVcVmcPmm_D_FCAdaptGearSet) && (sVcEc_n_Eng >= cVcVmcPmm_n_FCAdaptEngSet) && + (sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_FCAdaptVehSet) && (SVmcPmm__HE848_Switch >= + cVcVmcPmm_Te_FCAdaptEngClntSet) && (!(SVmcPmm__HE156__gicalOperator18)); + + + SVmcPmm__HE159_LogOp3 = SVmcPmm__HE156_LogicalOperator3 || + ((!(SVmcPmm__HE156__gicalOperator18)) && X_SVmcPmm__HE159_UnitDelay1); + + + X_SVmcPmm__HE159_UnitDelay1 = SVmcPmm__HE159_LogOp3; + + + SVmcPmm__HE156_LogicalOperator5 = yVcDtcTc_B_FcReq || cVcVmcPmm_B_FCAdaptIdle; + + + if (!(SVmcPmm__HE156_LogicalOperator5)) { + + X_SVmcPmm__HE161_UnitDelay = X_SVmcPmm__HE161_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE161_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_FCAdaptAct = (SVmcPmm__HE156_LogicalOperator3 && + SVmcPmm__HE156_LogicalOperator5) || ((X_SVmcPmm__HE161_UnitDelay <= + cVcVmcPmm_t_FCAdaptIdleDelayOff) && (!(SVmcPmm__HE156__gicalOperator18)) && + X_SVmcPmm__HE160_UnitDelay1); + + + X_SVmcPmm__HE160_UnitDelay1 = xVcVmcPmm_B_FCAdaptAct; + + + if (xVcVmcPmm_B_FCAdaptAct) { + + rVcVmcPmm_D_EngRunReqFCAdapt = 1; + } + else { + + rVcVmcPmm_D_EngRunReqFCAdapt = 0; + } + } + else { + + SVmcPmm__HE156_RSWE = 0; + } + } + else { + + SVmcPmm__HE156_RSWE = 0; + + + SVmcPmm__HE157_RSWE = 0; + } + + + if (cVcVmcPmm_B_UseFCAdapt) { + + SVmcPmm__HE250_Switch = rVcVmcPmm_D_EngRunReqFCAdapt; + } + else { + + SVmcPmm__HE250_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqFCAdapt = SVmcPmm__HE250_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqFCAdapt = SVmcPmm__HE250_Switch == 2; + } + + + SVmcPmm__HE210_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + + if (cVcVmcPmm_B_UseTm) { + + SVmcPmm__HE253_Switch = sVcTmStrt_D_EngRunReqTm; + } + else { + + SVmcPmm__HE253_Switch = 0; + } + + + SVmcPmm__HE210__gicalOperator12 = SVmcPmm__HE210_LogicalOperator1 && (SVmcPmm__HE253_Switch == + 0) && cVcVmcPmm_B_MinStopTm; + + + if (SVmcPmm__HE210__gicalOperator12 && (!(X_SVmcPmm__HE369_UnitDelay1))) { + + X_SVmcPmm__HE372_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE372_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE372_UnitDelay; + } + + + X_SVmcPmm__HE369_UnitDelay1 = SVmcPmm__HE210__gicalOperator12; + + + xVcVmcPmm_B_TmBlocked = X_SVmcPmm__HE372_UnitDelay <= cVcVmcPmm_t_MinStopTm; + + + xVcVmcPmm_B_TmBlock = SVmcPmm__HE210_LogicalOperator1 && xVcVmcPmm_B_TmBlocked; + + + if (xVcVmcPmm_B_TmBlock) { + + yVcVmcPmm_B_EngRunReqTm = 0; + } + else { + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + yVcVmcPmm_B_EngRunReqTm = SVmcPmm__HE253_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqTm = SVmcPmm__HE253_Switch == 2; + } + } + + + if (cVcVmcPmm_B_UseAgedFuel) { + + SVmcPmm__HE254_Switch = sVcFsdPc_D_EngRunReqFuel; + } + else { + + SVmcPmm__HE254_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + yVcVmcPmm_B_EngRunReqFuel = SVmcPmm__HE254_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqFuel = SVmcPmm__HE254_Switch == 2; + } + + + if (cVcVmcPmm_B_UseIsg) { + + SVmcPmm__HE255_Switch = X_SVmcPmm__HE6_UnitDelay3; + } + else { + + SVmcPmm__HE255_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqIsg = SVmcPmm__HE255_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqIsg = SVmcPmm__HE255_Switch == 2; + } + + + if (cVcVmcPmm_B_UseRemoteStart) { + + SVmcPmm__HE256_Switch = sVcPpmPsm_D_EngRunReqRemote; + } + else { + + SVmcPmm__HE256_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqRemote = SVmcPmm__HE256_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqRemote = SVmcPmm__HE256_Switch == 2; + } + + + if (cVcVmcPmm_B_UseStabCtrl) { + + SVmcPmm__HE258_Switch = sVcVmcAwd_D_EngRunReqStabCtrl; + } + else { + + SVmcPmm__HE258_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqStabCtrl = SVmcPmm__HE258_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqStabCtrl = SVmcPmm__HE258_Switch == 2; + } + + + if (cVcVmcPmm_B_UseDrLeave) { + + SVmcPmm__HE284_Switch = rVcVmcPmm_D_EngRunReqDrLeave; + } + else { + + SVmcPmm__HE284_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqDrLeave = SVmcPmm__HE284_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqDrLeave = SVmcPmm__HE284_Switch == 2; + } + + + SVmcPmm__HE216_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + + if (yVcCem_B_EngRunngReqByVehModMgrChassie) { + + rVcVmcPmm_D_EngRunReqChas = 2; + } + else { + + rVcVmcPmm_D_EngRunReqChas = 0; + } + + + if (cVcVmcPmm_B_UseChas) { + + SVmcPmm__HE285_Switch = rVcVmcPmm_D_EngRunReqChas; + } + else { + + SVmcPmm__HE285_Switch = 0; + } + + + SVmcPmm__HE216__gicalOperator12 = SVmcPmm__HE216_LogicalOperator1 && (SVmcPmm__HE285_Switch == + 0) && cVcVmcPmm_B_MinStopChas; + + + if (SVmcPmm__HE216__gicalOperator12 && (!(X_SVmcPmm__HE378_UnitDelay1))) { + + X_SVmcPmm__HE381_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE381_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE381_UnitDelay; + } + + + X_SVmcPmm__HE378_UnitDelay1 = SVmcPmm__HE216__gicalOperator12; + + + xVcVmcPmm_B_ChasBlocked = X_SVmcPmm__HE381_UnitDelay <= cVcVmcPmm_t_MinStopChas; + + + if (SVmcPmm__HE216_LogicalOperator1 && xVcVmcPmm_B_ChasBlocked) { + + xVcVmcPmm_B_EngRunReqChas = 0; + } + else { + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + xVcVmcPmm_B_EngRunReqChas = SVmcPmm__HE285_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqChas = SVmcPmm__HE285_Switch == 2; + } + } + + + if (cVcVmcPmm_B_UseObd) { + + SVmcPmm__HE295_Switch = sVcObdSch_D_EngRunReqObd; + } + else { + + SVmcPmm__HE295_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + yVcVmcPmm_B_EngRunReqObd = SVmcPmm__HE295_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqObd = SVmcPmm__HE295_Switch == 2; + } + + + if (cVcVmcPmm_B_UseDep) { + + SVmcPmm__HE299_Switch = sVcScIn_D_EngRunReqDepTrq; + } + else { + + SVmcPmm__HE299_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + xVcVmcPmm_B_EngRunReqDep = SVmcPmm__HE299_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqDep = SVmcPmm__HE299_Switch == 2; + } + + + SVmcPmm__HE219_LogicalOperator1 = (CVmcPmm__HE1_D_IceStatus == 0) || (CVmcPmm__HE1_D_IceStatus + == 3); + + + if (cVcVmcPmm_B_UseCEC) { + + SVmcPmm__HE296_Switch = sVcCmnEngRunReqCEC_D_Req; + } + else { + + SVmcPmm__HE296_Switch = 0; + } + + + SVmcPmm__HE219__gicalOperator12 = SVmcPmm__HE219_LogicalOperator1 && (SVmcPmm__HE296_Switch == + 0) && cVcVmcPmm_B_MinStopCEC; + + + if (SVmcPmm__HE219__gicalOperator12 && (!(X_SVmcPmm__HE384_UnitDelay1))) { + + X_SVmcPmm__HE387_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE387_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE387_UnitDelay; + } + + + X_SVmcPmm__HE384_UnitDelay1 = SVmcPmm__HE219__gicalOperator12; + + + xVcVmcPmm_B_CECBlocked = X_SVmcPmm__HE387_UnitDelay <= cVcVmcPmm_t_MinStopCEC; + + + xVcVmcPmm_B_CECBlock = SVmcPmm__HE219_LogicalOperator1 && xVcVmcPmm_B_CECBlocked; + + + if (xVcVmcPmm_B_CECBlock) { + + xVcVmcPmm_B_EngRunReqCEC = 0; + } + else { + + if ((CVmcPmm__HE1_D_IceStatus == 2) || (CVmcPmm__HE1_D_IceStatus == 1)) { + + xVcVmcPmm_B_EngRunReqCEC = SVmcPmm__HE296_Switch >= 1; + } + else { + + xVcVmcPmm_B_EngRunReqCEC = SVmcPmm__HE296_Switch == 2; + } + } + + + if (cVcVmcPmm_B_UseRc) { + + SVmcPmm__HE262_Switch = sVcPpmRc_D_EngRunReqRc; + } + else { + + SVmcPmm__HE262_Switch = 0; + } + + + if (xVcVmcPmm_B_IceStartRun) { + + yVcVmcPmm_B_EngRunReqRc = SVmcPmm__HE262_Switch >= 1; + } + else { + + yVcVmcPmm_B_EngRunReqRc = SVmcPmm__HE262_Switch == 2; + } + + + if (cVcVmcPmm_B_StallRunHiRes) { + + SVmcPmm__HE561_Switch = sVcEc_n_EngHiRes; + } + else { + + SVmcPmm__HE561_Switch = sVcEc_n_Eng; + } + + + if (cVcVmcPmm_B_StallRunStartM) { + + SVmcPmm__HE562_Switch = !(yVcEc_B_StartMotor); + } + else { + + SVmcPmm__HE562_Switch = 1; + } + + + if (yVcPpmRc_B_ChangeOfMindInhibit && (!(X_SVmcPmm__HE529_UnitDelay1))) { + + X_SVmcPmm__HE579_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE579_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE579_UnitDelay; + } + + + X_SVmcPmm__HE529_UnitDelay1 = yVcPpmRc_B_ChangeOfMindInhibit; + + + if (cVcVmcPmm_B_StallRunComInhbt) { + + xVcVmcPmm_B_StallRunComInhbt = (!(yVcPpmRc_B_ChangeOfMindInhibit)) || + (X_SVmcPmm__HE579_UnitDelay > cVcVmcPmm_t_StallRunComInhbt); + } + else { + + xVcVmcPmm_B_StallRunComInhbt = 1; + } + + + SVmcPmm__HE172_LogOp1 = (SVmcPmm__HE561_Switch < cVcVmcPmm_n_EngStalled) && + X_SVmcPmm__HE6_UnitDelay14 && (CVmcPmm__HE1_D_IceStatus == 2) && SVmcPmm__HE562_Switch && + xVcVmcPmm_B_StallRunComInhbt; + + + if (SVmcPmm__HE172_LogOp1) { + + X_SVmcPmm__HE582_UnitDelay = X_SVmcPmm__HE582_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE582_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StallRun) { + + xVcVmcPmm_B_StallRunning = X_SVmcPmm__HE582_UnitDelay > cVcVmcPmm_t_StallRun; + } + else { + + xVcVmcPmm_B_StallRunning = 0; + } + + + if ((!(yVcPpmPsm_B_DrReady)) && yVcEc_B_StartMotor) { + + X_SVmcPmm__HE583_UnitDelay = X_SVmcPmm__HE583_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE583_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StallStartM) { + + xVcVmcPmm_B_StallStrtM = X_SVmcPmm__HE583_UnitDelay > cVcVmcPmm_t_StallStrtM; + } + else { + + xVcVmcPmm_B_StallStrtM = 0; + } + + + if ((!(yVcPpmPsm_B_DrReady)) && (CVmcPmm__HE1_D_IceStatus == 1) && (X_SVmcPmm__HE6_UnitDelay1 + != 0)) { + + X_SVmcPmm__HE594_UnitDelay = X_SVmcPmm__HE594_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE594_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StallIceStrt) { + + Float32 SVmcPmm__HE570_Switch; + + + if (cVcVmcPmm_B_Use7DCT && X_SVmcPmm__HE6_UnitDelay10 && ((sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse))) { + + SVmcPmm__HE570_Switch = cVcVmcPmm_t_StallIceStrtIsgDrv; + } + else { + + SVmcPmm__HE570_Switch = cVcVmcPmm_t_StallIceStrt; + } + + + xVcVmcPmm_B_StallIceStrt = X_SVmcPmm__HE594_UnitDelay > SVmcPmm__HE570_Switch; + } + else { + + xVcVmcPmm_B_StallIceStrt = 0; + } + + + SVmcPmm__HE172_LogOp47 = (!(yVcPpmPsm_B_DrReady)) && (CVmcPmm__HE1_D_IceStatus == 1) && + (X_SVmcPmm__HE6_UnitDelay1 == 0); + + + if (SVmcPmm__HE172_LogOp47) { + + X_SVmcPmm__HE599_UnitDelay = X_SVmcPmm__HE599_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE599_UnitDelay = 0.F; + } + + + if (sVcEc_n_Eng < cVcVmcPmm_n_StallEmiMinEngSpd) { + + X_SVmcPmm__HE597_UnitDelay = X_SVmcPmm__HE597_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE597_UnitDelay = 0.F; + } + + + if (SVmcPmm__HE172_LogOp47 && (X_SVmcPmm__HE597_UnitDelay > cVcVmcPmm_t_StallEmiMinEngSpd) && + cVcVmcPmm_B_StallEmiExtraCond) { + + X_SVmcPmm__HE598_UnitDelay = X_SVmcPmm__HE598_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE598_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StallIceStrtEmi) { + + xVcVmcPmm_B_StallIceStrtEmi = (X_SVmcPmm__HE599_UnitDelay > cVcVmcPmm_t_StallIceStrtEmi) || + (X_SVmcPmm__HE598_UnitDelay > cVcVmcPmm_t_StallIceStrtEmiExtra); + } + else { + + xVcVmcPmm_B_StallIceStrtEmi = 0; + } + + + SVmcPmm__HE172_LogOp48 = yVcEc_B_StartMotor || yVcDtcSt_B_StrtAct || yVcDtcSt_B_CluStrtAct; + + + if (cVcVmcPmm_B_UseIceEnable) { + + SVmcPmm__HE829_Switch = yVcPpmPsm_B_IceEnabled; + } + else { + + SVmcPmm__HE829_Switch = yVcPpmPsm_B_DriveCycleActive; + } + + + X_SVmcPmm__HE592_UnitDelay1 = ((!(yVcPpmPsm_B_DrReady)) && (CVmcPmm__HE1_D_IceStatus == 1) && + ((!(SVmcPmm__HE172_LogOp48)) && X_SVmcPmm__HE525_Delay)) || (SVmcPmm__HE829_Switch && + (CVmcPmm__HE1_D_IceStatus != 2) && (CVmcPmm__HE1_D_IceStatus != 3) && + X_SVmcPmm__HE592_UnitDelay1); + + + X_SVmcPmm__HE525_Delay = SVmcPmm__HE172_LogOp48; + + + if (X_SVmcPmm__HE592_UnitDelay1) { + + X_SVmcPmm__HE600_UnitDelay = X_SVmcPmm__HE600_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE600_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StallIceStrtActrFinishd) { + + xVcVmcPmm_B_StallIceStrtActrFinishd = X_SVmcPmm__HE600_UnitDelay > + cVcVmcPmm_t_StallIceStrtActrFinishd; + } + else { + + xVcVmcPmm_B_StallIceStrtActrFinishd = 0; + } + + + if (cVcVmcPmm_B_StrtAbortSoft) { + + SVmcPmm__HE544_Switch = yVcPpmRc_B_StrtAbortSoft; + } + else { + + SVmcPmm__HE544_Switch = 0; + } + + + if (cVcVmcPmm_B_StrtAbortHard) { + + SVmcPmm__HE533_Switch = yVcPpmRc_B_StrtAbortHard; + } + else { + + SVmcPmm__HE533_Switch = 0; + } + + + if (cVcVmcPmm_B_StallRcShutOff) { + + SVmcPmm__HE563_Switch = yVcPpmRc_B_ShutOffReq; + } + else { + + SVmcPmm__HE563_Switch = 0; + } + + + if ((!(X_SVmcPmm__HE6_UnitDelay10)) && X_SVmcPmm__HE6_UnitDelay6) { + + X_SVmcPmm__HE595_UnitDelay = X_SVmcPmm__HE595_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE595_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_IsgStrtAbort = (X_SVmcPmm__HE595_UnitDelay > cVcVmcPmm_t_IsgStrtPahReqTiOut) || + yVcDtcSt_B_IsgStrtAbort; + + + if (cVcVmcPmm_B_StrtAbortIsg) { + + SVmcPmm__HE578_Switch = xVcVmcPmm_B_IsgStrtAbort; + } + else { + + SVmcPmm__HE578_Switch = 0; + } + + + if (cVcVmcPmm_B_StrtAbortClu) { + + SVmcPmm__HE560_Switch = yVcDtcSt_B_CluStrtAbort; + } + else { + + SVmcPmm__HE560_Switch = 0; + } + + + if (cVcVmcPmm_B_StrtAbrtCl) { + + Float32 SVmcPmm__HE572_Switch; + + + if (cVcVmcPmm_B_UseClPedAdaptStrtAbrt) { + + SVmcPmm__HE572_Switch = sVcDtcAtr_X_ClPedAdapt; + } + else { + + SVmcPmm__HE572_Switch = sVcScDep_X_ClutchPedalPos; + } + + + SVmcPmm__HE550_Switch = SVmcPmm__HE572_Switch < cVcVmcPmm_X_StrtAbrtCl; + } + else { + + SVmcPmm__HE550_Switch = 1; + } + + + if (cVcVmcPmm_B_StrtAbrtIce) { + + SVmcPmm__HE548_Switch = CVmcPmm__HE1_D_IceStatus == 1; + } + else { + + SVmcPmm__HE548_Switch = 1; + } + + + if (cVcVmcPmm_B_StrtAbrtRpm) { + + SVmcPmm__HE549_Switch = sVcEc_n_Eng < cVcVmcPmm_n_StrtAbrtRpm; + } + else { + + SVmcPmm__HE549_Switch = 1; + } + + + if (cVcVmcPmm_B_StrtAbrtStrtM) { + + SVmcPmm__HE547_Switch = yVcEc_B_StartMotor; + } + else { + + SVmcPmm__HE547_Switch = 1; + } + + + if (cVcVmcPmm_B_StrtAbrtAcc) { + + SVmcPmm__HE551_Switch = sVcScIn_X_AccPedalPos < cVcVmcPmm_X_StrtAbrtAcc; + } + else { + + SVmcPmm__HE551_Switch = 1; + } + + + if (cVcVmcPmm_B_StrtAbrtDrReady) { + + SVmcPmm__HE564_Switch = !(yVcPpmPsm_B_DrReady); + } + else { + + SVmcPmm__HE564_Switch = 1; + } + + + if (cVcVmcPmm_B_StrtAbrtNtrl) { + + Bool SVmcPmm__HE555_Switch; + + + if (cVcVmcPmm_B_StrtAbrtNtrlValid) { + + SVmcPmm__HE555_Switch = yVcScDep_B_NeutralMTValid; + } + else { + + SVmcPmm__HE555_Switch = 1; + } + + + SVmcPmm__HE552_Switch = (!(yVcScIn_B_NeutralMT)) && SVmcPmm__HE555_Switch; + } + else { + + SVmcPmm__HE552_Switch = 1; + } + + + xVcVmcPmm_B_StrtAbrtPre = SVmcPmm__HE550_Switch && SVmcPmm__HE548_Switch && + SVmcPmm__HE549_Switch && SVmcPmm__HE547_Switch && SVmcPmm__HE551_Switch && + SVmcPmm__HE564_Switch && SVmcPmm__HE552_Switch; + + + if (xVcVmcPmm_B_StrtAbrtPre) { + + X_SVmcPmm__HE586_UnitDelay = X_SVmcPmm__HE586_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE586_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StrtAbrt) { + + xVcVmcPmm_B_StrtAbrt = X_SVmcPmm__HE586_UnitDelay > cVcVmcPmm_t_StrtAbrt; + } + else { + + xVcVmcPmm_B_StrtAbrt = 0; + } + + + if (cVcVmcPmm_B_UseDesDrvDir) { + + SVmcPmm__HE557_Switch = sVcDtcAtr_v_VehDrDirectionRaw >= cVcVmcPmm_v_StallReset; + } + else { + + SVmcPmm__HE557_Switch = 1; + } + + + if (cVcVmcPmm_B_StallRcvCrnk) { + + xVcVmcPmm_B_CrnkStallRecov = yVcPpmPsm_B_DrReady; + } + else { + + xVcVmcPmm_B_CrnkStallRecov = 0; + } + + + if (cVcVmcPmm_B_StallRcvAT) { + + Bool SVmcPmm__HE567_Switch; + + + if (cVcVmcPmm_B_Use7DCT) { + + SVmcPmm__HE567_Switch = X_SVmcPmm__HE6_UnitDelay2; + } + else { + + SVmcPmm__HE567_Switch = 1; + } + + + xVcVmcPmm_B_StallRcvAT = (SVmcPmm__HE567_Switch && (sVcEc_n_Eng < cVcVmcPmm_n_StallRcv) && + (!(X_SVmcPmm__HE172_UnitDelay8)) && (SVmcPmm__HE827_Switch || (yVcScDep_B_AccFtOnPed && + cVcVmcPmm_B_StallRcvAccFtOnPed) || (yVcScIn_B_DrvrBrkgASILB && + cVcVmcPmm_B_StallRcvFootOnBrPed))) || xVcVmcPmm_B_CrnkStallRecov; + } + else { + + xVcVmcPmm_B_StallRcvAT = 0; + } + + + if (cVcVmcPmm_B_StallRcvFrcd) { + + xVcVmcPmm_B_ForcedStallStart = yVcPpmPsm_B_ForcedStart; + } + else { + + xVcVmcPmm_B_ForcedStallStart = 0; + } + + + if (yVcScIn_B_NeutralMT) { + + X_SVmcPmm__HE584_UnitDelay = X_SVmcPmm__HE584_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE584_UnitDelay = 0.F; + } + + + SVmcPmm__HE584__tionalOperator1 = X_SVmcPmm__HE584_UnitDelay > cVcVmcPmm_t_StallRcvNeutral; + + + SVmcPmm__HE172__tionalOperator1 = sVcScIn_v_VehSpdLgt > cVcVmcPmm_v_StallRcvStart; + + + if (SVmcPmm__HE172__tionalOperator1) { + + Float32 SVmcPmm__HE569_Switch; + + + if (cVcVmcPmm_B_UseClPedAdaptStallRecovery) { + + SVmcPmm__HE569_Switch = sVcDtcAtr_X_ClPedAdapt; + } + else { + + SVmcPmm__HE569_Switch = sVcScDep_X_ClutchPedalPos; + } + + + SVmcPmm__HE553_Switch = SVmcPmm__HE569_Switch > cVcVmcPmm_X_StallRcvClOnly; + } + else { + + SVmcPmm__HE553_Switch = yVcScDep_B_FootOnClutchPedalASILB; + } + + + if (SVmcPmm__HE553_Switch) { + + X_SVmcPmm__HE587_UnitDelay = X_SVmcPmm__HE587_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE587_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_StallRcvCl = SVmcPmm__HE584__tionalOperator1 || (X_SVmcPmm__HE587_UnitDelay > + cVcVmcPmm_t_StallRcvClDelay); + + + if (cVcVmcPmm_B_UseClPedAdaptStallRecovery) { + + SVmcPmm__HE571_Switch = sVcDtcAtr_X_ClPedAdapt; + } + else { + + SVmcPmm__HE571_Switch = sVcScDep_X_ClutchPedalPos; + } + + + xVcVmcPmm_B_StallRcvClNtrl = (SVmcPmm__HE553_Switch && SVmcPmm__HE172__tionalOperator1) || + (((SVmcPmm__HE571_Switch > cVcVmcPmm_X_StallRcvClNtrl) || yVcScDep_B_FootOnClutchPedal) && + SVmcPmm__HE584__tionalOperator1); + + + if (cVcVmcPmm_B_StallRcvClOnly) { + + SVmcPmm__HE576_Switch = xVcVmcPmm_B_StallRcvCl; + } + else { + + SVmcPmm__HE576_Switch = xVcVmcPmm_B_StallRcvClNtrl; + } + + + xVcVmcPmm_B_StallRcvMT = xVcVmcPmm_B_CrnkStallRecov || xVcVmcPmm_B_ForcedStallStart || + ((!(X_SVmcPmm__HE172_UnitDelay1)) && SVmcPmm__HE576_Switch); + + + if (yVcFsdPc_B_RunDry && cVcVmcPmm_B_UseStallRcvBlock) { + + xVcVmcPmm_B_StallRecovery = 0; + } + else { + + if (yVcDtcAtr_B_AT) { + + xVcVmcPmm_B_StallRecovery = xVcVmcPmm_B_StallRcvAT; + } + else { + + xVcVmcPmm_B_StallRecovery = xVcVmcPmm_B_StallRcvMT; + } + } + + + X_SVmcPmm__HE590_UnitDelay1 = xVcVmcPmm_B_StallRunning || xVcVmcPmm_B_StallStrtM || + xVcVmcPmm_B_StallIceStrt || xVcVmcPmm_B_StallIceStrtEmi || + xVcVmcPmm_B_StallIceStrtActrFinishd || SVmcPmm__HE544_Switch || SVmcPmm__HE533_Switch || + SVmcPmm__HE563_Switch || SVmcPmm__HE578_Switch || SVmcPmm__HE560_Switch || + xVcVmcPmm_B_StrtAbrt || (SVmcPmm__HE829_Switch && ((!(SVmcPmm__HE557_Switch)) || + (!(xVcVmcPmm_B_StallRecovery))) && X_SVmcPmm__HE590_UnitDelay1); + + + SVmcPmm__HE527_LogicalOperator = X_SVmcPmm__HE590_UnitDelay1 && + (!(X_SVmcPmm__HE527_UnitDelay1)); + + + X_SVmcPmm__HE527_UnitDelay1 = X_SVmcPmm__HE590_UnitDelay1; + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + X_SVmcPmm__HE596_UnitDelay = X_SVmcPmm__HE596_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE596_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EngRunReqIceStall = SVmcPmm__HE527_LogicalOperator || (SVmcPmm__HE829_Switch && + (X_SVmcPmm__HE596_UnitDelay <= cVcVmcPmm_t_EngRunStall) && X_SVmcPmm__HE591_UnitDelay1); + + + X_SVmcPmm__HE591_UnitDelay1 = xVcVmcPmm_B_EngRunReqIceStall; + + + if (cVcVmcPmm_B_UseIceStall) { + + xVcVmcPmm_B_RunReqIceStall = xVcVmcPmm_B_EngRunReqIceStall; + } + else { + + xVcVmcPmm_B_RunReqIceStall = 0; + } + + + X_SVmcPmm__HE335_UnitDelay1 = (SVmcPmm__HE848_Switch < cVcVmcPmm_Te_EngClntEngRunReq) || + ((SVmcPmm__HE848_Switch <= cVcVmcPmm_Te_EngClntEngOffReq) && X_SVmcPmm__HE335_UnitDelay1); + + + if (cVcVmcPmm_B_UseEngClntRunReq) { + + xVcVmcPmm_B_EngRunReqEngClnt = X_SVmcPmm__HE335_UnitDelay1; + } + else { + + xVcVmcPmm_B_EngRunReqEngClnt = 0; + } + + + SVmcPmm__HE334_Rel = cVcVmcPmm_X_FanAfterrunLimHi <= sVcTmAf_Z_FanAfterrun; + + + SVmcPmm__HE334_Rel1 = sVcTmAf_Z_FanAfterrun <= cVcVmcPmm_X_FanAfterrunLimLo; + + + xVcVmcPmm_B_FanAfterrun = (SVmcPmm__HE334_Rel && (!(SVmcPmm__HE334_Rel1))) || + ((!(SVmcPmm__HE334_Rel)) && (!(SVmcPmm__HE334_Rel1)) && X_SVmcPmm__HE334_UnitDelay); + + + X_SVmcPmm__HE334_UnitDelay = xVcVmcPmm_B_FanAfterrun; + + + if (xVcVmcPmm_B_FanAfterrun) { + + X_SVmcPmm__HE340_UnitDelay = X_SVmcPmm__HE340_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE340_UnitDelay = 0.F; + } + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + if (cVcVmcPmm_B_UseFanAfterrun) { + + yVcVmcPmm_B_EngRunReqFanAfterrun = X_SVmcPmm__HE340_UnitDelay > + cVcVmcPmm_t_FanAfterrunDelay; + } + else { + + yVcVmcPmm_B_EngRunReqFanAfterrun = 0; + } + } + else { + + yVcVmcPmm_B_EngRunReqFanAfterrun = 0; + } + + + SVmcPmm__HE170_LogicalOperator2 = (CVmcPmm__HE1_D_IceStatus == 1) || (CVmcPmm__HE1_D_IceStatus + == 2); + + + if (SVmcPmm__HE170_LogicalOperator2 && (!(X_SVmcPmm__HE233_UnitDelay1))) { + + X_SVmcPmm__HE311_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE311_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE311_UnitDelay; + } + + + X_SVmcPmm__HE233_UnitDelay1 = SVmcPmm__HE170_LogicalOperator2; + + + if (cVcVmcPmm_B_UseEngOnOff) { + + xVcVmcPmm_B_EngOnOff = X_SVmcPmm__HE311_UnitDelay <= cVcVmcPmm_t_EngOnOff; + } + else { + + xVcVmcPmm_B_EngOnOff = 0; + } + + + SVmcPmm__HE170_LogicalOperator7 = (!(X_SVmcPmm__HE6_UnitDelay14)) && (CVmcPmm__HE1_D_IceStatus + == 0); + + + if (!(SVmcPmm__HE170_LogicalOperator7)) { + + SVmcPmm__HE228_Switch = 0.F; + } + else { + + Float32 SVmcPmm__HE228_Switch1; + + + if (SVmcPmm__HE170_LogicalOperator7) { + + SVmcPmm__HE228_Switch1 = ts_VcVmcPmm__HEP7; + } + else { + + SVmcPmm__HE228_Switch1 = 0.F; + } + + + SVmcPmm__HE228_Switch = SVmcPmm__HE228_Switch1 + X_SVmcPmm__HE228_UnitDelay; + } + if (1e+30F < SVmcPmm__HE228_Switch) { + rVcVmcPmm_t_EngOff = 1e+30F; + } + else { + rVcVmcPmm_t_EngOff = SVmcPmm__HE228_Switch; + } + + + X_SVmcPmm__HE228_UnitDelay = rVcVmcPmm_t_EngOff; + + + if (cVcVmcPmm_B_UseEngOffMaxTime) { + + xVcVmcPmm_B_EngRunReqMaxTime = rVcVmcPmm_t_EngOff >= cVcVmcPmm_t_EngOffMax; + } + else { + + xVcVmcPmm_B_EngRunReqMaxTime = 0; + } + + + xVcVmcPmm_B_EngRunReqTotPre = xVcVmcPmm_B_EngRunReqDriver || xVcVmcPmm_B_EngRunReqPsm || + xVcVmcPmm_B_EngRunReqEm || yVcVmcPmm_B_EngRunReqBrake || yVcVmcPmm_B_EngRunReqSapp || + yVcVmcPmm_B_EngRunReqTrans || yVcVmcPmm_B_EngRunReqEms || yVcVmcPmm_B_EngRunReqEmLv || + yVcVmcPmm_B_EngRunReqClim || xVcVmcPmm_B_EngRunReqPcr || xVcVmcPmm_B_EngRunReqFCAdapt || + yVcVmcPmm_B_EngRunReqTm || yVcVmcPmm_B_EngRunReqFuel || xVcVmcPmm_B_EngRunReqIsg || + xVcVmcPmm_B_EngRunReqRemote || xVcVmcPmm_B_EngRunReqStabCtrl || xVcVmcPmm_B_EngRunReqDrLeave + || xVcVmcPmm_B_EngRunReqChas || yVcVmcPmm_B_EngRunReqObd || xVcVmcPmm_B_EngRunReqDep || + xVcVmcPmm_B_EngRunReqCEC || yVcVmcPmm_B_EngRunReqRc || xVcVmcPmm_B_RunReqIceStall || + xVcVmcPmm_B_EngRunReqEngClnt || yVcVmcPmm_B_EngRunReqFanAfterrun || xVcVmcPmm_B_EngOnOff || + xVcVmcPmm_B_EngRunReqMaxTime || X_SVmcPmm__HE6_UnitDelay12; + + + if (cVc_B_SeriesHev && (sVcDeDmm_D_DrvMode == 9)) { + + SVmcPmm__HE298_Switch = yVcVmcPmm_B_EngRunReqBrake; + } + else { + + SVmcPmm__HE298_Switch = xVcVmcPmm_B_EngRunReqTotPre; + } + + + if (X_SVmcPmm__HE170_UnitDelay3 == 4) { + + SVmcPmm__HE227_switch = (sVcEc_n_Eng > cVcVmcPmm_n_Wait4Eng2StopLimHighTest) && + (sVcEc_n_Eng < cVcVmcPmm_n_Wait4Eng2StopLimHigh); + } + else { + + SVmcPmm__HE227_switch = sVcEc_n_Eng < cVcVmcPmm_n_Wait4Eng2StopLim; + } + + + SVmcPmm__HE170__gicalOperator22 = SVmcPmm__HE298_Switch && SVmcPmm__HE227_switch && + (CVmcPmm__HE1_D_IceStatus == 3); + + + if (SVmcPmm__HE170__gicalOperator22) { + + X_SVmcPmm__HE342_UnitDelay = X_SVmcPmm__HE342_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE342_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_Wait4EngStrtTiOut = X_SVmcPmm__HE342_UnitDelay > cVcVmcPmm_t_Wait4Eng2StopTiOut; + + + if (cVcVmcPmm_B_UseWait4Eng2Stop) { + + xVcVmcPmm_B_Wait4Eng2Stop = (!(SVmcPmm__HE170__gicalOperator22)) || + xVcVmcPmm_B_Wait4EngStrtTiOut; + } + else { + + xVcVmcPmm_B_Wait4Eng2Stop = 1; + } + + + if (SVmcPmm__HE298_Switch) { + + X_SVmcPmm__HE341_UnitDelay = X_SVmcPmm__HE341_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE341_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_Wait4CluStrtDly = X_SVmcPmm__HE341_UnitDelay > cVcVmcPmm_t_Wait4EngRunReqTot; + + + if (cVcVmcPmm_B_EngRunReqTot_swi) { + + yVcVmcPmm_B_EngRunReqTot = cVcVmcPmm_B_EngRunReqTot_dbi; + } + else { + + if (cVcVmcPmm_B_Use7DCT) { + + yVcVmcPmm_B_EngRunReqTot = (xVcVmcPmm_B_Wait4Eng2Stop && (!(X_SVmcPmm__HE6_UnitDelay7)) + && xVcVmcPmm_B_Wait4CluStrtDly) || X_SVmcPmm__HE6_UnitDelay12; + } + else { + + yVcVmcPmm_B_EngRunReqTot = SVmcPmm__HE298_Switch; + } + } + + + SVmcPmm__HE230_Logic1 = (!(xVcVmcPmm_B_EngRunReqDriver)) && X_SVmcPmm__HE230_Delay; + + + X_SVmcPmm__HE230_Delay = xVcVmcPmm_B_EngRunReqDriver; + + + SVmcPmm__HE170__ionalOperator17 = sVcScIn_v_VehSpdLgt > cVcVmcPmm_v_WaitToReset; + + + X_SVmcPmm__HE336_UnitDelay1 = (SVmcPmm__HE230_Logic1 && SVmcPmm__HE170__ionalOperator17) || + (SVmcPmm__HE170__ionalOperator17 && (!(xVcVmcPmm_B_EngRunReqDriver)) && + X_SVmcPmm__HE336_UnitDelay1); + + + if (yVcDeDmm_B_EngRunReqDrReEval || SVmcPmm__HE230_Logic1 || X_SVmcPmm__HE336_UnitDelay1) { + + X_SVmcPmm__HE309_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE309_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE309_UnitDelay; + } + + + X_SVmcPmm__HE339_UnitDelay1 = yVcVmcPmm_B_EngRunReqTot || ((yVcVmcPmm_B_EngRunReqTot || + (X_SVmcPmm__HE309_UnitDelay > cVcVmcPmm_t_WaitToReset)) && X_SVmcPmm__HE339_UnitDelay1); + + + if (cVcVmcPmm_B_UseTotEngRunReq) { + + SVmcPmm__HE300_Switch = yVcVmcPmm_B_EngRunReqTot; + } + else { + + SVmcPmm__HE300_Switch = X_SVmcPmm__HE339_UnitDelay1; + } + + + if (SVmcPmm__HE300_Switch) { + + X_SVmcPmm__HE310_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE310_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE310_UnitDelay; + } + + + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE232_Delay))) { + + SVmcPmm__HE279_Switch = 0.F; + } + else { + + if (SVmcPmm__HE159_LogOp3) { + + SVmcPmm__HE279_Switch = cVcVmcPmm_t_EngOffFcAdapt; + } + else { + + SVmcPmm__HE279_Switch = cVcVmcPmm_t_EngOff; + } + } + + + X_SVmcPmm__HE232_Delay = SVmcPmm__HE829_Switch; + + + xVcVmcPmm_B_EngOnReqPre = X_SVmcPmm__HE310_UnitDelay <= SVmcPmm__HE279_Switch; + + + if (cVcVmcPmm_B_LosStop) { + + SVmcPmm__HE252_Switch = yVcDsePcr_B_EngStopRq; + } + else { + + SVmcPmm__HE252_Switch = 0; + } + + + X_SVmcPmm__HE337_UnitDelay1 = (yVcFsdPc_B_RunDryCrkInhb && yVcFsdPc_B_RunDry && + cVcVmcPmm_B_UseRunDryInhb) || ((yVcPpmPsm_B_DriveCycleActive || (!(X_SVmcPmm__HE231_Delay))) + && (!(cVcVmcPmm_B_UseRunDryInhbOnly)) && X_SVmcPmm__HE337_UnitDelay1); + + + X_SVmcPmm__HE231_Delay = yVcPpmPsm_B_DriveCycleActive; + + + if (cVcVmcPmm_B_RcShutOff) { + + SVmcPmm__HE261_Switch = yVcPpmRc_B_ShutOffReq; + } + else { + + SVmcPmm__HE261_Switch = 0; + } + + + SVmcPmm__HE170__gicalOperator37 = (sVcEc_n_Eng < cVcVmcPmm_n_IceStallMax) && + (X_SVmcPmm__HE590_UnitDelay1 || SVmcPmm__HE261_Switch); + + + xVcVmcPmm_B_EngStopFast = SVmcPmm__HE252_Switch || yVcDepSs_B_EngFastStop || + X_SVmcPmm__HE337_UnitDelay1 || (!(SVmcPmm__HE829_Switch)) || SVmcPmm__HE170__gicalOperator37; + + + SVmcPmm__HE170_LogicalOperator6 = xVcVmcPmm_B_EngOnReqPre && (!(xVcVmcPmm_B_EngStopFast)); + + + xVcVmcPmm_B_EngStart = xVcVmcPmm_B_StartAllowedPath && SVmcPmm__HE170_LogicalOperator6; + + + if (cVcVmcPmm_B_DepStop) { + + xVcVmcPmm_B_StopAllowedDep = yVcDepSs_B_StopAllowed; + } + else { + + xVcVmcPmm_B_StopAllowedDep = 1; + } + + + xVcVmcPmm_B_StopAllowedPath = SVmcPmm__HE170__gicalOperator37 || xVcVmcPmm_B_StopAllowedDep; + + + xVcVmcPmm_B_EngStop = (!(SVmcPmm__HE170_LogicalOperator6)) && xVcVmcPmm_B_StopAllowedPath; + + + xVcVmcPmm_B_EngOnReqEng = xVcVmcPmm_B_EngStart || ((!(xVcVmcPmm_B_EngStop)) && + X_SVmcPmm__HE338_UnitDelay1); + + + X_SVmcPmm__HE338_UnitDelay1 = xVcVmcPmm_B_EngOnReqEng; + + + if (sVcEc_n_Eng < cVcVmcPmm_n_CFTStop) { + + X_SVmcPmm__HE455_UnitDelay = X_SVmcPmm__HE455_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE455_UnitDelay = 0.F; + } + + + X_SVmcPmm__HE454_UnitDelay1 = ((sVcScIn_v_VehSpdLgt < 1.F) && (cVcVmcPmm_B_CTFStart && + (!(X_SVmcPmm__HE452_UnitDelay1)))) || ((X_SVmcPmm__HE455_UnitDelay <= cVcVmcPmm_t_CTFStop) && + X_SVmcPmm__HE454_UnitDelay1); + + + X_SVmcPmm__HE452_UnitDelay1 = cVcVmcPmm_B_CTFStart; + + + if (132 == cVcVmcPmm_D_CTF) { + + yVcVmcPmm_B_EngOnReqEng = !(X_SVmcPmm__HE454_UnitDelay1); + } + else { + + yVcVmcPmm_B_EngOnReqEng = xVcVmcPmm_B_EngOnReqEng; + } + #if Vc_Pvc_Hw_B_AT + + if (yVcVmcPmm_B_EngOnReqEng) { + + X_SVmcPmm__HE510_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE510_UnitDelay = X_SVmcPmm__HE510_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + SVmcPmm__HE171__gicalOperator49 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral); + + + if (SVmcPmm__HE171__gicalOperator49) { + + X_SVmcPmm__HE508_UnitDelay = X_SVmcPmm__HE508_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE508_UnitDelay = 0.F; + } + + + if (yVcVmcPmm_B_EngOnReqEng) { + + X_SVmcPmm__HE511_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE511_UnitDelay = X_SVmcPmm__HE511_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (!(yVcVmcTfa_B_CcOrAccActive)) { + + SVmcPmm__HE486_Switch = X_SVmcPmm__HE6_UnitDelay5; + } + else { + + if (X_SVmcPmm__HE511_UnitDelay <= cVcVmcPmm_t_IsgIceStopACCTimeout) { + + SVmcPmm__HE486_Switch = X_SVmcPmm__HE6_UnitDelay15; + } + else { + + SVmcPmm__HE486_Switch = X_SVmcPmm__HE6_UnitDelay5; + } + } + + + xVcVmcPmm_B_EngOnReqTransPre = (X_SVmcPmm__HE510_UnitDelay <= ts_VcVmcPmm__HEP7) || + ((X_SVmcPmm__HE508_UnitDelay <= cVcVmcPmm_t_IsgIceStopTimeout) && + ((!(SVmcPmm__HE171__gicalOperator49)) || (!(X_SVmcPmm__HE6_UnitDelay13))) && + (((!(X_SVmcPmm__HE6_UnitDelay13)) && (!(X_SVmcPmm__HE6_UnitDelay9))) || + (!(X_SVmcPmm__HE6_UnitDelay5))) && (SVmcPmm__HE486_Switch || yVcDseGb_B_EngStopDlyReq || + (!(X_SVmcPmm__HE6_UnitDelay4))) && (!(X_SVmcPmm__HE6_UnitDelay8)) && + X_SVmcPmm__HE503_UnitDelay1); + + + X_SVmcPmm__HE503_UnitDelay1 = xVcVmcPmm_B_EngOnReqTransPre; + + + if ((Vc_Pvc_Hw_B_Efad_CN != 0) || (Vc_Pvc_Hw_B_Erad_CN != 0)) { + + SVmcPmm__HE482_Switch = xVcVmcPmm_B_EngOnReqTransPre; + } + else { + + SVmcPmm__HE482_Switch = yVcVmcPmm_B_EngOnReqEng; + } + #if VcVmcPmm__HEP7_1224_EngageReqHybrid_7 + + SVmcPmm__HE477__gicalOperator18 = yVcVmcEm_B_EngageReq || yVcDeDmm_B_TrnEngageRqDr || + (yVcVmcPmm_B_EngRunReqBrake && cVcVmcPmm_B_TrnMdeUseBrake) || (xVcVmcPmm_B_EngRunReqPcr + && cVcVmcPmm_B_TrnMdeUsePcr) || (yVcVmcPmm_B_EngRunReqTrans && + cVcVmcPmm_B_TrnMdeUseTrans) || (yVcVmcAwd_B_EngageReq && cVcVmcPmm_B_TrnMdeUseAwd) || + X_SVmcPmm__HE6_UnitDelay11; + + + if (SVmcPmm__HE477__gicalOperator18) { + + X_SVmcPmm__HE515_UnitDelay = X_SVmcPmm__HE515_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE515_UnitDelay = 0.F; + } + + + if (sVcEc_n_Eng >= cVcVmcPmm_n_TrnEngBlockMin) { + + X_SVmcPmm__HE516_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE516_UnitDelay = X_SVmcPmm__HE516_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (sVcEmiHeat_D_EngUseReq > sVcTmStrt_D_EngUseReq) { + SVmcPmm__HE477_MinMax = sVcEmiHeat_D_EngUseReq; + } + else { + SVmcPmm__HE477_MinMax = sVcTmStrt_D_EngUseReq; + } + + + if (SVmcPmm__HE477_MinMax == 1) { + + X_SVmcPmm__HE517_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE517_UnitDelay = X_SVmcPmm__HE517_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + xVcVmcPmm_B_TrnEngageReqHybrid = SVmcPmm__HE482_Switch && + SVmcPmm__HE477__gicalOperator18 && ((X_SVmcPmm__HE515_UnitDelay > + cVcVmcPmm_t_TrnEngBlockMax) || yVcDeDmm_B_RespStartReq || yVcVmcAwd_B_EngageReq || + ((sVcDtcAtr_v_VehDrDirectionRaw >= cVcVmcPmm_v_TrnEngBlockMax) || + (X_SVmcPmm__HE516_UnitDelay > cVcVmcPmm_t_TrnEngRpmDly) || ((X_SVmcPmm__HE517_UnitDelay + > cVcVmcPmm_t_TrnEngCatHeatDly) && (!(cVcVmcPmm_B_TrnEngBlockSkipEngUseReq))))) && + ((sVcDtcAtr_D_GearLevAT != cVc_D_GearLevATReverse) || (!(yVcGscPrn_B_EfadRvs))); + #endif + + + if (SVmcPmm__HE482_Switch) { + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE519_Switch; + #endif + + + + + if (cVcVmcPmm_B_TrnMdeReqBrk) { + + SVmcPmm__HE519_Switch = rVcVmcPmm_D_EngRunReqBrake == 2; + } + else { + + SVmcPmm__HE519_Switch = 0; + } + + + xVcVmcPmm_B_TrnEngageReqIC = SVmcPmm__HE519_Switch || yVcDeDmm_B_TrnEngageRqDr || + yVcVscEcc_B_TrnEngageReq; + } + else { + + xVcVmcPmm_B_TrnEngageReqIC = 0; + } + + + if (((Vc_Pvc_Hw_B_Efad_CN != 0) || (Vc_Pvc_Hw_B_Erad_CN != 0)) && cVcVmcPmm_B_TrnMdeHev) { + + xVcVmcPmm_B_TrnEngageReqPre = xVcVmcPmm_B_TrnEngageReqHybrid; + } + else { + + if (cVcVmcPmm_B_TrnMdeIC) { + + xVcVmcPmm_B_TrnEngageReqPre = xVcVmcPmm_B_TrnEngageReqIC; + } + else { + + xVcVmcPmm_B_TrnEngageReqPre = SVmcPmm__HE482_Switch; + } + } + + + if (!(xVcVmcPmm_B_TrnEngageReqPre)) { + + X_SVmcPmm__HE523_UnitDelay = X_SVmcPmm__HE523_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE523_UnitDelay = 0.F; + } + + + SVmcPmm__HE523_Rel = X_SVmcPmm__HE523_UnitDelay > cVcVmcPmm_t_CrShPahDiTiOut; + + + SVmcPmm__HE171__gicalOperator18 = (sVcDtcCta_Tq_CrShInstReq < cVcVmcPmm_Tq_CrShRampDown) && + (sVcDtcCta_Tq_CrShInstReq > cVcVmcPmm_Tq_CrShRampUp); + + + if (cVcVmcPmm_B_Use7DCT) { + + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE523_Rel || (yVcVmcWtc_B_CrShPathDisabled && + (sVcDtcAjc_Tq_DrCrShReqWhl < cVcVmcPmm_Tq_DrCrShRampDown) && (sVcDtcAjc_Tq_DrCrShReqWhl + > cVcVmcPmm_Tq_DrCrShRampUp)); + } + else { + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE479__gicalOperator15; + #endif + + + + + SVmcPmm__HE479__gicalOperator15 = (sVcDtcAjc_Tq_DrPropFrntReq < + cVcVmcPmm_Tq_PropFrntRampDown) && (sVcDtcAjc_Tq_DrPropFrntReq > + cVcVmcPmm_Tq_PropFrntRampUp); + + + if (cVcVmcPmm_B_UseEradHybrid) { + + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE523_Rel || (SVmcPmm__HE479__gicalOperator15 + && yVcVmcWtd_B_FrntAxlePathDisabled); + } + else { + + if (cVcVmcPmm_B_UsePropFrntRampDown) { + + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE479__gicalOperator15; + } + else { + + xVcVmcPmm_B_CrShPathDisabled = SVmcPmm__HE171__gicalOperator18; + } + } + } + + + SVmcPmm__HE171__gicalOperator43 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse); + + + SVmcPmm__HE171__gicalOperator10 = xVcVmcPmm_B_CrShPathDisabled && + SVmcPmm__HE171__gicalOperator43; + + + X_SVmcPmm__HE505_UnitDelay1 = (SVmcPmm__HE171__gicalOperator10 && + (!(X_SVmcPmm__HE480_Delay))) || (SVmcPmm__HE171__gicalOperator43 && + X_SVmcPmm__HE505_UnitDelay1); + + + X_SVmcPmm__HE480_Delay = SVmcPmm__HE171__gicalOperator10; + + + if (cVcVmcPmm_B_CrShPathEnable_swi) { + + SVmcPmm__HE489_Switch = cVcVmcPmm_B_CrShPathEnable_dbi; + } + else { + + SVmcPmm__HE489_Switch = (xVcVmcPmm_B_TrnEngageReqPre && X_SVmcPmm__HE505_UnitDelay1 && + SVmcPmm__HE829_Switch && (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdCrSh) + && (CVmcPmm__HE1_D_IceStatus == 2) && (yVcDsePcr_B_TransNtrlDisable || + (sVcDtcAtr_D_TransMode == 1) || (sVcDtcAtr_D_TransMode == 2))) || + (cVcVmcPmm_B_UseOldEngRevStgy && SVmcPmm__HE482_Switch && SVmcPmm__HE829_Switch && + (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdCrSh) && + (CVmcPmm__HE1_D_IceStatus == 2) && (yVcDsePcr_B_TransNtrlDisable || + SVmcPmm__HE171__gicalOperator49)); + } + + + if (SVmcPmm__HE171__gicalOperator49) { + + X_SVmcPmm__HE509_UnitDelay = X_SVmcPmm__HE509_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE509_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_TrnEngageReq = (xVcVmcPmm_B_TrnEngageReqPre && ((sVcDtcAtr_v_VehDrDirectionRaw + >= cVcVmcPmm_v_ReqEngDrDir) || (CVmcPmm__HE1_D_IceStatus == 2))) || + ((xVcVmcPmm_B_TrnEngageReqPre || (!(xVcVmcPmm_B_CrShPathDisabled))) && + (!(xVcVmcPmm_B_EngStopFast)) && (X_SVmcPmm__HE509_UnitDelay <= cVcVmcPmm_t_GearLevPNDlyOn) + && X_SVmcPmm__HE502_UnitDelay1); + + + X_SVmcPmm__HE502_UnitDelay1 = xVcVmcPmm_B_TrnEngageReq; + + + SVmcPmm__HE171__gicalOperator35 = SVmcPmm__HE482_Switch && + (!(SVmcPmm__HE477__gicalOperator18)); + #if VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 + + SVmcPmm__HE513_Logic1 = SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE513_Delay)); + + + X_SVmcPmm__HE513_Delay = SVmcPmm__HE829_Switch; + + + if (SVmcPmm__HE513_Logic1) { + + SVmcPmm__HE512_Switch = 0.F; + } + else { + + + #ifdef SVmcPmm__HE512_Switch_AUX + Float32 SVmcPmm__HE512_Switch1; + #endif + + + + + if ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) && (sVcDtcAtr_v_VehDrDirectionRaw + > 4.F) && (!(SVmcPmm__HE171__gicalOperator35))) { + + SVmcPmm__HE512_Switch1 = ts_VcVmcPmm__HEP7; + } + else { + + SVmcPmm__HE512_Switch1 = 0.F; + } + + + SVmcPmm__HE512_Switch = SVmcPmm__HE512_Switch1 + X_SVmcPmm__HE512_UnitDelay; + } + if (1e+30F < SVmcPmm__HE512_Switch) { + rVcVmcPmm_t_TrnC3OilPres = 1e+30F; + } + else { + rVcVmcPmm_t_TrnC3OilPres = SVmcPmm__HE512_Switch; + } + + + X_SVmcPmm__HE512_UnitDelay = rVcVmcPmm_t_TrnC3OilPres; + + + X_SVmcPmm__HE514_UnitDelay1 = SVmcPmm__HE513_Logic1 || ((sVcDtcAtr_v_VehDrDirectionRaw + <= cVcVmcPmm_v_TrnMdeC3OilPresMax) && (sVcTcm_Te_TrsmOilT < + cVcVmcPmm_Te_TrnMdeC3OilPresMax) && X_SVmcPmm__HE514_UnitDelay1); + + + xVcVmcPmm_B_TrnC3OilPres = (rVcVmcPmm_t_TrnC3OilPres < cVcVmcPmm_t_TrnMdeC3OilPresMax) + && X_SVmcPmm__HE514_UnitDelay1 && cVcVmcPmm_B_TrnMdeUseC3OilPres; + #endif + + + X_SVmcPmm__HE506_UnitDelay1 = ((!(xVcVmcPmm_B_TrnC3OilPres)) && (sVcScIn_v_VehSpdLgt > + cVcVmcPmm_v_TotNtrlSet)) || ((sVcScIn_v_VehSpdLgt > cVcVmcPmm_v_TotNtrlReset) && + X_SVmcPmm__HE506_UnitDelay1); + + + if (cVcVmcPmm_D_TransModeReq_swi) { + + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TransModeReq_dbi; + } + else { + + + #if Vc_Pvc_Hw_B_AT + Bool SVmcPmm__HE490_Switch; + #endif + + + + + if (yVcDsePcr_B_TransNtrlRq) { + + SVmcPmm__HE490_Switch = 0; + } + else { + + SVmcPmm__HE490_Switch = xVcVmcPmm_B_TrnEngageReq; + } + + + if (SVmcPmm__HE490_Switch) { + + if (yVcVmcEm_B_NICEnable && cVcVmcPmm_B_TrnMdeHevUseNIC) { + + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeHevReqEngNIC; + } + else { + + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeReqEng; + } + } + else { + + if ((yVcDsePcr_B_TransNtrlRq || (sVcDtcAtr_v_VehDrDirectionRaw < + cVcVmcPmm_v_TotNtrlVehDrDir) || (sVcDtcAtr_D_TrgGear == -1) || (sVcDtcAtr_D_TrgGear + > cVcVmcPmm_D_GearTotNtrl) || X_SVmcPmm__HE506_UnitDelay1 || + SVmcPmm__HE171__gicalOperator35) && ((Vc_Pvc_Hw_B_Efad_CN != 0) || + (Vc_Pvc_Hw_B_Erad_CN != 0))) { + + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeReqTotNtrl; + } + else { + + rVcVmcPmm_D_TransModeReq = cVcVmcPmm_D_TrnMdeReqNtrl; + } + } + } + + + SVmcPmm__HE171_LogicalOperator3 = SVmcPmm__HE482_Switch && (!(xVcVmcPmm_B_EngStopFast)); + + + if (cVcVmcPmm_B_DepStopAT) { + + SVmcPmm__HE484_Switch = yVcDepSs_B_StopAllowed; + } + else { + + SVmcPmm__HE484_Switch = 1; + } + + + if (!(SVmcPmm__HE482_Switch)) { + + X_SVmcPmm__HE507_UnitDelay = X_SVmcPmm__HE507_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE507_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EngStopReqAT = (!(SVmcPmm__HE171_LogicalOperator3)) && + (X_SVmcPmm__HE590_UnitDelay1 || SVmcPmm__HE484_Switch) && (xVcVmcPmm_B_EngStopFast || + ((sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_EngStopReqAT) && SVmcPmm__HE827_Switch && + (SVmcPmm__HE171__gicalOperator18 || cVcVmcPmm_B_CrShaftRampDownIgnore) && ((sVcEc_n_Eng < + (sVcDtcIcl_n_IdleSpdBs + cVcVmcPmm_n_EngOnDelayOff)) || (X_SVmcPmm__HE507_UnitDelay > + cVcVmcPmm_t_EngOnDelayOff) || cVcVmcPmm_B_EngOnDelayIgnore))); + + + xVcVmcPmm_B_EngOnReqTrans = SVmcPmm__HE171_LogicalOperator3 || + ((!(xVcVmcPmm_B_EngStopReqAT)) && X_SVmcPmm__HE504_UnitDelay1); + + + X_SVmcPmm__HE504_UnitDelay1 = xVcVmcPmm_B_EngOnReqTrans; + + + yVcVmcPmm_B_TrnEngageReqHev = SVmcPmm__HE477__gicalOperator18; + #endif + + + if (cVcVmcPmm_B_EngOnReq_swi) { + + X_SVmcPmm__HE6_UnitDelay14 = cVcVmcPmm_B_EngOnReq_dbi; + } + else { + + if (133 == cVcVmcPmm_D_CTF) { + + X_SVmcPmm__HE6_UnitDelay14 = !(X_SVmcPmm__HE454_UnitDelay1); + } + else { + + if (cVc_B_SeriesHev) { + + X_SVmcPmm__HE6_UnitDelay14 = yVcVmcPmm_B_EngOnReqEng; + } + else { + + if (!(yVcDtcAtr_B_AT)) { + + X_SVmcPmm__HE6_UnitDelay14 = yVcVmcPmm_B_EngOnReqEng; + } + else { + + X_SVmcPmm__HE6_UnitDelay14 = xVcVmcPmm_B_EngOnReqTrans; + } + } + } + } + + + X_SVmcPmm__HE3_UnitDelay10 = X_SVmcPmm__HE6_UnitDelay14; + + + if (cVc_B_SeriesHev) { + + sVcVmcPmm_D_TransModeReq = 5; + } + else { + + sVcVmcPmm_D_TransModeReq = rVcVmcPmm_D_TransModeReq; + } + + + if (cVc_B_SeriesHev) { + + yVcVmcPmm_B_CrShPathEnable = 0; + } + else { + + if (!(yVcDtcAtr_B_AT)) { + + yVcVmcPmm_B_CrShPathEnable = 1; + } + else { + + yVcVmcPmm_B_CrShPathEnable = SVmcPmm__HE489_Switch; + } + } + #if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + #if Vc_Pvc_Hw_B_Efad + + if (cVcVmcPmm_B_UseEfadCode) { + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE719_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE720_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE728_MinMax; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE728_Prod1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE728_Sum3; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE732_MinMax; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE732_Prod1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE732_Sum3; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE745_Switch1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE765_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Float32 SVmcPmm__HE766_Switch; + #endif + + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637_LogicalOperator7; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637__gicalOperator40; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637__gicalOperator50; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638_LogicalOperator1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638_LogicalOperator2; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator14; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator15; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator16; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator17; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator40; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator41; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__gicalOperator42; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__ionalOperator13; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__ionalOperator22; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE638__tionalOperator6; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator16; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator20; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator21; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__gicalOperator23; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__ionalOperator13; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE639__ionalOperator18; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE672_LogicalOperator7; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE672__gicalOperator10; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE673__gicalOperator23; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE695_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE699_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE700_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE721_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE722_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE741_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE742_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE743__ationalOperator; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE747_Switch; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE748_Rel; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE748_Rel1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE749_Rel; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE749_Rel1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE750_Rel; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE750_Rel1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE751_Rel; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE751_Rel1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE752_Rel; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE752_Rel1; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE828_Switch; + #endif + + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 SVmcPmm__HE730__rkRoadIncline_c[2] = + { + 0, 0 + + }; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 SVmcPmm__HE730__rkRoadIncline_r[2] = + { + 0, 0 + + }; + #endif + + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE661_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE662_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE663_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE664_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE665_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE666_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE667_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE668_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE669_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE670_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE671_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE708_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE709_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE710_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE711_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE712_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE713_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE714_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE725_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE726_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE727_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE728_Del1 = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE732_Del1 = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE736_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE737_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE738_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE739_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE740_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE754_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE755_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE756_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE757_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE758_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE759_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE760_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE761_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE762_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE772_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE773_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE779_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Float32 X_SVmcPmm__HE780_UnitDelay = 0.F; + #endif + + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay11 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE638_UnitDelay12 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay2 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay3 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay4 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE638_UnitDelay5 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE638_UnitDelay6 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay7 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay8 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE638_UnitDelay9 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static UInt8 X_SVmcPmm__HE639_UnitDelay4 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE643_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE644_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE657_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE658_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE659_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE660_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE672_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE672_UnitDelay2 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE673_UnitDelay15 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE674_UnitDelay7 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE675_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE675_UnitDelay10 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE675_UnitDelay2 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE676_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE677_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE678_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE679_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE680_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE681_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE682_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE683_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE684_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE685_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE686_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE687_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE701_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE702_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE703_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE704_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE705_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE706_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE707_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE717_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE718_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE723_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE724_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE731_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE733_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE734_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE735_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE743_UnitDelay7 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE744_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE744_UnitDelay2 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE744_UnitDelay3 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE748_UnitDelay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE749_UnitDelay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE750_UnitDelay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE751_UnitDelay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE752_UnitDelay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE753_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE771_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE774_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE775_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE776_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE777_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + static Bool X_SVmcPmm__HE778_UnitDelay1 = 0; + #endif + + + + + if (cVcVmcPmm_B_UseOld12VStrtAllwd) { + + SVmcPmm__HE828_Switch = yVcDepSs_B_StartAllowed; + } + else { + + SVmcPmm__HE828_Switch = yVcDepSs_B_12VStartEnable; + } + + if (sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_IsgStandStillVehSpdOK) { + + X_SVmcPmm__HE759_UnitDelay = X_SVmcPmm__HE759_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE759_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_IsgStandStillVehSpdOK = X_SVmcPmm__HE759_UnitDelay > + cVcVmcPmm_t_IsgStandStillVehSpdOK; + + + if (sVcVmcAwd_X_RoadGrad >= 0.F) { + + SVmcPmm__HE745_Switch1 = sVcVmcAwd_X_RoadGrad; + } + else { + + SVmcPmm__HE745_Switch1 = sVcVmcAwd_X_RoadGrad * -1.F; + } + + + SVmcPmm__HE751_Rel = (cVcVmcPmm_X_IsgStopRoadGradMaxHyst + + cVcVmcPmm_X_IsgStopRoadGradMax) <= SVmcPmm__HE745_Switch1; + + + SVmcPmm__HE751_Rel1 = SVmcPmm__HE745_Switch1 <= cVcVmcPmm_X_IsgStopRoadGradMax; + + + X_SVmcPmm__HE751_UnitDelay = (SVmcPmm__HE751_Rel && (!(SVmcPmm__HE751_Rel1))) || + ((!(SVmcPmm__HE751_Rel)) && (!(SVmcPmm__HE751_Rel1)) && X_SVmcPmm__HE751_UnitDelay); + + + xVcVmcPmm_B_IsgStopRoadGradOK = !(X_SVmcPmm__HE751_UnitDelay); + + + SVmcPmm__HE639__gicalOperator20 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) + || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive); + + + xVcVmcPmm_B_IsgStopStandstillPre = cVcVmcPmm_B_UseIsgStandStill && + (!(yVcVmcPmm_B_EngOnReqEng)) && (CVmcPmm__HE1_D_IceStatus != 0) && + xVcVmcPmm_B_IsgStandStillVehSpdOK && xVcVmcPmm_B_IsgStopRoadGradOK && + SVmcPmm__HE639__gicalOperator20; + + + if (X_SVmcPmm__HE744_UnitDelay3) { + + X_SVmcPmm__HE780_UnitDelay = X_SVmcPmm__HE780_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE780_UnitDelay = 0.F; + } + + + if (X_SVmcPmm__HE744_UnitDelay3) { + + X_SVmcPmm__HE779_UnitDelay = X_SVmcPmm__HE779_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE779_UnitDelay = 0.F; + } + + + if (sVcVmcBsl_Tq_FrntReqWhl < cVcVmcPmm_Tq_IsgStandStillBslTqOK) { + + X_SVmcPmm__HE761_UnitDelay = X_SVmcPmm__HE761_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE761_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_IsgStandStillBslTqOK = X_SVmcPmm__HE761_UnitDelay > + cVcVmcPmm_t_IsgStandStillBslTqOK; + + + if (sVcVdm_Tq_BrkTqAtWhlsReq > cVcVmcPmm_Tq_IsgStandStillBrkTqOK) { + + X_SVmcPmm__HE760_UnitDelay = X_SVmcPmm__HE760_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE760_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_IsgStandStillBrkTqOK = X_SVmcPmm__HE760_UnitDelay > + cVcVmcPmm_t_IsgStandStillBrkTqOK; + + + SVmcPmm__HE639__gicalOperator16 = xVcVmcPmm_B_IsgStandStillBslTqOK && + xVcVmcPmm_B_IsgStandStillBrkTqOK; + + + xVcVmcPmm_B_IsgStopStandstill = xVcVmcPmm_B_IsgStopStandstillPre && + SVmcPmm__HE639__gicalOperator16; + + + xVcVmcPmm_B_IsgStopRunReqStandstill = X_SVmcPmm__HE744_UnitDelay1 && + ((!(SVmcPmm__HE639__gicalOperator16)) && X_SVmcPmm__HE774_Delay) && + ((sVcDseGb_D_EfadPathAct == 1) || cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct) && + cVcVmcPmm_B_UseIsgStopRunReqStandstill; + + + X_SVmcPmm__HE774_Delay = SVmcPmm__HE639__gicalOperator16; + + + X_SVmcPmm__HE744_UnitDelay1 = xVcVmcPmm_B_IsgStopStandstill; + + + SVmcPmm__HE750_Rel = (cVcVmcPmm_v_IsgStopCoastSpdHyst + + cVcVmcPmm_v_IsgStopCoastSpdMax) <= sVcScIn_v_VehSpdLgt; + + + SVmcPmm__HE750_Rel1 = sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_IsgStopCoastSpdMax; + + + X_SVmcPmm__HE750_UnitDelay = (SVmcPmm__HE750_Rel && (!(SVmcPmm__HE750_Rel1))) || + ((!(SVmcPmm__HE750_Rel)) && (!(SVmcPmm__HE750_Rel1)) && X_SVmcPmm__HE750_UnitDelay); + + + SVmcPmm__HE752_Rel = cVcVmcPmm_v_IsgStopCoastSpdMinOn <= sVcScIn_v_VehSpdLgt; + + + SVmcPmm__HE752_Rel1 = sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_IsgStopCoastSpdMinOff; + + + X_SVmcPmm__HE752_UnitDelay = (SVmcPmm__HE752_Rel && (!(SVmcPmm__HE752_Rel1))) || + ((!(SVmcPmm__HE752_Rel)) && (!(SVmcPmm__HE752_Rel1)) && X_SVmcPmm__HE752_UnitDelay); + + + SVmcPmm__HE748_Rel = (cVcVmcPmm_Tq_IsgStopCoastDrReqHyst + + cVcVmcPmm_Tq_IsgStopCoastDrReqMax) <= sVcVmcBsl_Tq_FrntReqWhl; + + + SVmcPmm__HE748_Rel1 = sVcVmcBsl_Tq_FrntReqWhl <= cVcVmcPmm_Tq_IsgStopCoastDrReqMax; + + + X_SVmcPmm__HE748_UnitDelay = (SVmcPmm__HE748_Rel && (!(SVmcPmm__HE748_Rel1))) || + ((!(SVmcPmm__HE748_Rel)) && (!(SVmcPmm__HE748_Rel1)) && X_SVmcPmm__HE748_UnitDelay); + + + SVmcPmm__HE749_Rel = cVcVmcPmm_Tq_IsgStopCoastDrReqMin <= sVcVmcBsl_Tq_FrntReqWhl; + + + SVmcPmm__HE749_Rel1 = sVcVmcBsl_Tq_FrntReqWhl <= (cVcVmcPmm_Tq_IsgStopCoastDrReqMin - + cVcVmcPmm_Tq_IsgStopCoastDrReqHyst); + + + X_SVmcPmm__HE749_UnitDelay = (SVmcPmm__HE749_Rel && (!(SVmcPmm__HE749_Rel1))) || + ((!(SVmcPmm__HE749_Rel)) && (!(SVmcPmm__HE749_Rel1)) && X_SVmcPmm__HE749_UnitDelay); + + + SVmcPmm__HE639__gicalOperator21 = (!(X_SVmcPmm__HE748_UnitDelay)) && + X_SVmcPmm__HE749_UnitDelay; + + + xVcVmcPmm_B_IsgStopCoast = cVcVmcPmm_B_UseIsgStopCoast && + (!(yVcVmcPmm_B_EngOnReqEng)) && (!(X_SVmcPmm__HE750_UnitDelay)) && + X_SVmcPmm__HE752_UnitDelay && (CVmcPmm__HE1_D_IceStatus != 0) && + SVmcPmm__HE639__gicalOperator20 && SVmcPmm__HE639__gicalOperator21; + + + xVcVmcPmm_B_IsgStopRunReqCoast = X_SVmcPmm__HE744_UnitDelay2 && + ((!(SVmcPmm__HE639__gicalOperator21)) && X_SVmcPmm__HE775_Delay) && + cVcVmcPmm_B_UseIsgStopRunReqCoast; + + + X_SVmcPmm__HE775_Delay = SVmcPmm__HE639__gicalOperator21; + + + X_SVmcPmm__HE744_UnitDelay2 = xVcVmcPmm_B_IsgStopCoast; + + + X_SVmcPmm__HE778_UnitDelay1 = (sVcDseGb_D_EfadPathAct != 2) && (sVcDtcAtr_D_GearLevAT + == cVc_D_GearLevATDrive) && (xVcVmcPmm_B_IsgStopStandstill || + X_SVmcPmm__HE778_UnitDelay1); + + + xVcVmcPmm_B_IsgStopPostRunReqStandstill = cVcVmcPmm_B_UseIsgStopPostRunReqStandstill + && ((!(SVmcPmm__HE639__gicalOperator16)) && X_SVmcPmm__HE776_Delay) && + X_SVmcPmm__HE778_UnitDelay1; + + + X_SVmcPmm__HE776_Delay = SVmcPmm__HE639__gicalOperator16; + + + xVcVmcPmm_B_EngRunReqIsgStop = ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive)) && ((sVcDseGb_D_EfadPathAct != 2) + || (X_SVmcPmm__HE780_UnitDelay <= cVcVmcPmm_t_EngRunReqIsgStopMin)) && + (X_SVmcPmm__HE779_UnitDelay <= cVcVmcPmm_t_EngRunReqIsgStopMax) && + (((xVcVmcPmm_B_IsgStopRunReqStandstill || xVcVmcPmm_B_IsgStopRunReqCoast || + xVcVmcPmm_B_IsgStopPostRunReqStandstill) && (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive)) || X_SVmcPmm__HE777_UnitDelay1); + + + X_SVmcPmm__HE777_UnitDelay1 = xVcVmcPmm_B_EngRunReqIsgStop; + + + X_SVmcPmm__HE744_UnitDelay3 = xVcVmcPmm_B_EngRunReqIsgStop; + + + xVcVmcPmm_B_Wait4CluStrtWhlTqLow = (sVcVmcWtd_Tq_FrntReqWhl < + cVcVmcPmm_Tq_Wait4CluStrtEna) || ((sVcVmcWtd_Tq_FrntReqWhl <= + cVcVmcPmm_Tq_Wait4CluStrtDi) && X_SVmcPmm__HE734_UnitDelay1); + + + X_SVmcPmm__HE734_UnitDelay1 = xVcVmcPmm_B_Wait4CluStrtWhlTqLow; + + + SVmcPmm__HE732_Sum3 = ts_VcVmcPmm__HEP7 + cVcVmcPmm_tc_VdmAccFilt; + if (SVmcPmm__HE732_Sum3 > 1e-06F) { + SVmcPmm__HE732_MinMax = SVmcPmm__HE732_Sum3; + } + else { + SVmcPmm__HE732_MinMax = 1e-06F; + } + + + if (SVmcPmm__HE732_MinMax != 0.F) { + + SVmcPmm__HE732_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE732_MinMax; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE732_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE732_Prod1 = 3.402823466e+38F; + } + } + + + rVcVmcPmm_a_Veh = X_SVmcPmm__HE732_Del1 + ((sVcVdm_a_ALgtStdFromWhlSpd - + X_SVmcPmm__HE732_Del1) * SVmcPmm__HE732_Prod1); + + + X_SVmcPmm__HE732_Del1 = rVcVmcPmm_a_Veh; + + + xVcVmcPmm_B_Wait4CluStrtWhlAccHigh = (rVcVmcPmm_a_Veh > cVcVmcPmm_a_Wait4CluStrtEna) + || ((rVcVmcPmm_a_Veh >= cVcVmcPmm_a_Wait4CluStrtDi) && X_SVmcPmm__HE733_UnitDelay1); + + + X_SVmcPmm__HE733_UnitDelay1 = xVcVmcPmm_B_Wait4CluStrtWhlAccHigh; + + + xVcVmcPmm_B_Wait4CluStrtAccPedAct = (sVcScIn_X_AccPedalPos > + cVcVmcPmm_X_Wait4CluStrtEna) || ((sVcScIn_X_AccPedalPos >= + cVcVmcPmm_X_Wait4CluStrtDi) && X_SVmcPmm__HE735_UnitDelay1); + + + X_SVmcPmm__HE735_UnitDelay1 = xVcVmcPmm_B_Wait4CluStrtAccPedAct; + + + xVcVmcPmm_B_Wait4CluStrtLowVehSpd = sVcScIn_v_VehSpdLgtMax < + cVcVmcPmm_v_Efad12VStartMax; + + + if (cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort) { + + SVmcPmm__HE742_Switch = X_SVmcPmm__HE675_UnitDelay1; + } + else { + + SVmcPmm__HE742_Switch = 1; + } + + + xVcVmcPmm_B_CluStrtTqRsvBlk = (sVcMtcAjc_Tq_EfadReqWhl > sVcDseWt_Tq_EfadMaxElDrvWhl) + && SVmcPmm__HE742_Switch; + + + if (cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw) { + + SVmcPmm__HE741_Switch = (yVcDeDmm_B_RespStartReq && + cVcVmcPmm_B_UseRespStartReqFromDeDmm) || (yVcVmcEm_B_RespStartReq && + cVcVmcPmm_B_UseRespStartreqFromVmcEm) || (xVcVmcPmm_B_CluStrtTqRsvBlk && + cVcVmcPmm_B_UseTqOffsForCluStrtEval); + } + else { + + SVmcPmm__HE741_Switch = 1; + } + + + xVcVmcPmm_B_CluStrtAllwd = ((!(cVcVmcPmm_B_EfadUseFactory12VStrt)) || + (!(sVcDeDmm_B_DrMdeFactory))) && (!(X_SVmcPmm__HE675_UnitDelay2)) && + (!(X_SVmcPmm__HE675_UnitDelay10)) && (CVmcPmm__HE1_D_IceStatus != 2) && + ((CVmcPmm__HE1_D_IceStatus != cVcVmcPmm_D_IceStsStarting) || (sVcEc_n_Eng <= + cVcVmcPmm_n_CluStrtAllwdEngSpdMax)) && ((!(xVcVmcPmm_B_EngRunReqIsgStop)) || + (!(cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna))) && ((!(cVcVmcPmm_B_CluStrtInDeplBlk)) + || (sVcDtcAtr_v_VehDrDirection >= cVcVmcPmm_v_CluStrtSpdAllw) || + ((!(yVcVmcEm_B_Depletion)) && (!(cVcVmcPmm_B_IgnrDepl))) || + (!(SVmcPmm__HE741_Switch))); + + + SVmcPmm__HE673__gicalOperator23 = cVcVmcPmm_B_UseWait4CluStrt && + xVcVmcPmm_B_Wait4CluStrtWhlTqLow && xVcVmcPmm_B_Wait4CluStrtWhlAccHigh && + xVcVmcPmm_B_Wait4CluStrtAccPedAct && xVcVmcPmm_B_Wait4CluStrtLowVehSpd && + xVcVmcPmm_B_EngRunReqTotPre && ((6 != sVcDeDmm_D_DrvMode) && (sVcDeDmm_D_DrvMode != + 11)) && (((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT + == cVc_D_GearLevATReverse)) && yVcGscSgs_B_CluStrtAvl && xVcVmcPmm_B_CluStrtAllwd); + + + if (SVmcPmm__HE673__gicalOperator23) { + + X_SVmcPmm__HE737_UnitDelay = X_SVmcPmm__HE737_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE737_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_Wait4CluStrtTiOut = X_SVmcPmm__HE737_UnitDelay > + cVcVmcPmm_t_Wait4CluStrtTiOut; + + + xVcVmcPmm_B_Wait4CluStrt = SVmcPmm__HE673__gicalOperator23 && + (!(xVcVmcPmm_B_Wait4CluStrtTiOut)); + + + xVcVmcPmm_B_IsgStopPwrDwn = cVcVmcPmm_B_UseIsgStopPwrDwn && + (!(SVmcPmm__HE829_Switch)) && (CVmcPmm__HE1_D_IceStatus != 0); + + + X_SVmcPmm__HE6_UnitDelay5 = xVcVmcPmm_B_IsgStopStandstill || xVcVmcPmm_B_IsgStopCoast + || xVcVmcPmm_B_IsgStopPwrDwn; + + + X_SVmcPmm__HE753_UnitDelay1 = (sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_EfadVehSpdOKIsgBrk) + || ((sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_EfadVehSpdNOKIsgBrk) && + X_SVmcPmm__HE753_UnitDelay1); + + + if (X_SVmcPmm__HE753_UnitDelay1) { + + X_SVmcPmm__HE756_UnitDelay = X_SVmcPmm__HE756_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE756_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_VehSpdOKIsgBrk = X_SVmcPmm__HE756_UnitDelay > + cVcVmcPmm_t_EfadVehSpdOKIsgBrk; + + + if (sVcVdm_Tq_BrkTqAtWhlsReq > cVcVmcPmm_Tq_EfadBrkOKIsgBrk) { + + X_SVmcPmm__HE757_UnitDelay = X_SVmcPmm__HE757_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE757_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_BrkOKIsgBrk = X_SVmcPmm__HE757_UnitDelay > cVcVmcPmm_t_EfadBrkOKIsgBrk; + + + if (sVcScIn_X_AccPedalPos < cVcVmcPmm_X_EfadAccPedOKIsgBrk) { + + X_SVmcPmm__HE758_UnitDelay = X_SVmcPmm__HE758_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE758_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_AccPedOKIsgBrk = X_SVmcPmm__HE758_UnitDelay > + cVcVmcPmm_t_EfadAccPedOKIsgBrk; + + + SVmcPmm__HE639__ionalOperator13 = sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive; + + + SVmcPmm__HE639__gicalOperator23 = yVcDseGbAvl_B_EfadIsgPathAvoid && + SVmcPmm__HE639__ionalOperator13; + + + xVcVmcPmm_B_IsgChrgReqBrk = cVcVmcPmm_B_UseIsgBrk && xVcVmcPmm_B_VehSpdOKIsgBrk && + xVcVmcPmm_B_BrkOKIsgBrk && xVcVmcPmm_B_AccPedOKIsgBrk && yVcVmcEm_B_PrioChrgReq && + ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) || + SVmcPmm__HE639__gicalOperator23); + + + if (yVcVmcEm_B_ChrgReq) { + + X_SVmcPmm__HE762_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE762_UnitDelay = X_SVmcPmm__HE762_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + X_SVmcPmm__HE754_UnitDelay = X_SVmcPmm__HE754_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE754_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_TrnModIsgReq) { + + xVcVmcPmm_B_TrnModOKIsgReq = sVcDtcAtr_D_TransMode < 3; + } + else { + + xVcVmcPmm_B_TrnModOKIsgReq = sVcVmcPmm_D_TransModeReq < 3; + } + + + SVmcPmm__HE743__ationalOperator = sVcDeDmm_D_DrvMode == 13; + + + if (yVcVmcEm_B_PrioChrgReq || (sVcEmiHeat_D_EngUseReq == 2)) { + + if (SVmcPmm__HE743__ationalOperator) { + + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco; + } + else { + + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv; + } + } + else { + + if (SVmcPmm__HE743__ationalOperator) { + + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco; + } + else { + + SVmcPmm__HE766_Switch = cVcVmcPmm_v_EfadVehSpdOKIsgDrv; + } + } + + + if (yVcVmcEm_B_PrioChrgReq || (sVcEmiHeat_D_EngUseReq == 2)) { + + if (SVmcPmm__HE743__ationalOperator) { + + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco; + } + else { + + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv; + } + } + else { + + if (SVmcPmm__HE743__ationalOperator) { + + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco; + } + else { + + SVmcPmm__HE765_Switch = cVcVmcPmm_v_EfadVehSpdNOKIsgDrv; + } + } + + + X_SVmcPmm__HE771_UnitDelay1 = (sVcScIn_v_VehSpdLgt < SVmcPmm__HE766_Switch) || + ((sVcScIn_v_VehSpdLgt <= SVmcPmm__HE765_Switch) && X_SVmcPmm__HE771_UnitDelay1); + + + if (X_SVmcPmm__HE771_UnitDelay1) { + + X_SVmcPmm__HE773_UnitDelay = X_SVmcPmm__HE773_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE773_UnitDelay = 0.F; + } + + + if (X_SVmcPmm__HE771_UnitDelay1) { + + X_SVmcPmm__HE772_UnitDelay = X_SVmcPmm__HE772_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE772_UnitDelay = 0.F; + } + + + if (yVcVmcEm_B_PrioChrgReq || (sVcEmiHeat_D_EngUseReq == 2)) { + + xVcVmcPmm_B_VehSpdOKIsgDrv = X_SVmcPmm__HE773_UnitDelay > + cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv; + } + else { + + if (X_SVmcPmm__HE743_UnitDelay7) { + + xVcVmcPmm_B_VehSpdOKIsgDrv = X_SVmcPmm__HE771_UnitDelay1; + } + else { + + xVcVmcPmm_B_VehSpdOKIsgDrv = X_SVmcPmm__HE772_UnitDelay > + cVcVmcPmm_t_VehSpdOKIsgDrv; + } + } + + + xVcVmcPmm_B_IsgChrgReqDrv = (!(SVmcPmm__HE639__gicalOperator23)) && + SVmcPmm__HE639__ionalOperator13 && ((2 == sVcEmiHeat_D_EngUseReq) || + (X_SVmcPmm__HE762_UnitDelay <= cVcVmcPmm_t_ChrgReqDly)) && + (X_SVmcPmm__HE754_UnitDelay > cVcVmcPmm_t_EfadIceStsDlyIsgDrv) && + xVcVmcPmm_B_TrnModOKIsgReq && ((2 == sVcEmiHeat_D_EngUseReq) || + yVcVmcEm_B_PrioChrgReq || ((sVcDeDmm_D_DrvMode != 11) && ((!(yVcVmcEm_B_Charge)) || + (!(cVcVmcPmm_B_UseChargeInIsgReq))))) && xVcVmcPmm_B_VehSpdOKIsgDrv; + + + SVmcPmm__HE639__ionalOperator18 = sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral; + + + if (SVmcPmm__HE639__ionalOperator18) { + + X_SVmcPmm__HE755_UnitDelay = X_SVmcPmm__HE755_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE755_UnitDelay = 0.F; + } + + + if ((X_SVmcPmm__HE639_UnitDelay4 == 2) && (CVmcPmm__HE1_D_IceStatus == 2)) { + + SVmcPmm__HE747_Switch = X_SVmcPmm__HE755_UnitDelay > cVcVmcPmm_t_GearLevNDly; + } + else { + + SVmcPmm__HE747_Switch = SVmcPmm__HE639__ionalOperator18; + } + + + xVcVmcPmm_B_IsgChrgReq = ((CVmcPmm__HE1_D_IceStatus == 2) || + (CVmcPmm__HE1_D_IceStatus == 3)) && (xVcVmcPmm_B_IsgChrgReqBrk || + xVcVmcPmm_B_IsgChrgReqDrv || X_SVmcPmm__HE6_UnitDelay5 || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATPark) || SVmcPmm__HE747_Switch); + + + xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct = (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive) && (sVcDseGb_D_EfadPathAct == 1) && (sVcVmcPmm_D_TransModeReq + == 1); + + + if (cVcVmcPmm_B_IsgStrtInDUseEfadPathAct) { + + SVmcPmm__HE721_Switch = xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct; + } + else { + + SVmcPmm__HE721_Switch = xVcVmcPmm_B_EngRunReqIsgStop; + } + + + if (X_SVmcPmm__HE672_UnitDelay1) { + + SVmcPmm__HE720_Switch = cVcVmcPmm_Tq_EfadIsgStrtEnaFlt; + } + else { + + SVmcPmm__HE720_Switch = cVcVmcPmm_Tq_EfadIsgStrtEna; + } + + + if (X_SVmcPmm__HE672_UnitDelay1) { + + SVmcPmm__HE719_Switch = cVcVmcPmm_Tq_EfadIsgStrtDiFlt; + } + else { + + SVmcPmm__HE719_Switch = cVcVmcPmm_Tq_EfadIsgStrtDi; + } + + + X_SVmcPmm__HE723_UnitDelay1 = (sVcVmcWtd_Tq_FrntReqWhl < SVmcPmm__HE720_Switch) || + ((sVcVmcWtd_Tq_FrntReqWhl <= SVmcPmm__HE719_Switch) && X_SVmcPmm__HE723_UnitDelay1); + + + if (X_SVmcPmm__HE723_UnitDelay1) { + + X_SVmcPmm__HE725_UnitDelay = X_SVmcPmm__HE725_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE725_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_IsgStrtWhlTrqOK = X_SVmcPmm__HE725_UnitDelay > + cVcVmcPmm_t_IsgStrtWhlTrqOK; + + + SVmcPmm__HE672__gicalOperator10 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse); + + + if (sVcDtcAtr_v_VehDrDirection < cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR) { + + X_SVmcPmm__HE726_UnitDelay = X_SVmcPmm__HE726_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE726_UnitDelay = 0.F; + } + + + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_Z_BrkRoadIncline_r[0]), 8, + sVcVdm_Tq_BrkTqAtWhlsReq, SVmcPmm__HE730__rkRoadIncline_r); + + + SVmcPmm__HE728_Sum3 = ts_VcVmcPmm__HEP7 + cVcVmcPmm_tc_LatAccFilt; + if (SVmcPmm__HE728_Sum3 > 1e-06F) { + SVmcPmm__HE728_MinMax = SVmcPmm__HE728_Sum3; + } + else { + SVmcPmm__HE728_MinMax = 1e-06F; + } + + + if (SVmcPmm__HE728_MinMax != 0.F) { + + SVmcPmm__HE728_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE728_MinMax; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE728_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE728_Prod1 = 3.402823466e+38F; + } + } + + + X_SVmcPmm__HE728_Del1 = X_SVmcPmm__HE728_Del1 + ((sVcVdm_a_ALat - + X_SVmcPmm__HE728_Del1) * SVmcPmm__HE728_Prod1); + + + if (cVcVmcPmm_B_UseAwdRoadGrad) { + + rVcVmcPmm_Z_RoadGradient = sVcVmcAwd_X_RoadGrad; + } + else { + + rVcVmcPmm_Z_RoadGradient = X_SVmcPmm__HE728_Del1; + } + + + TabIdxS18T6((const Float32 *) &(mVcVmcPmm_Z_BrkRoadIncline_c[0]), 8, + rVcVmcPmm_Z_RoadGradient, SVmcPmm__HE730__rkRoadIncline_c); + + + rVcVmcPmm_Z_BrkRoadIncline = + mVcVmcPmm_Z_BrkRoadIncline[SVmcPmm__HE730__rkRoadIncline_r[0]][SVmcPmm__HE730__rkRoadIncline_c[0]]; + + + xVcVmcPmm_B_BrkRoadIncline = rVcVmcPmm_Z_BrkRoadIncline == 1; + + + xVcVmcPmm_B_EpbActive = (sVcVdm_D_EpbSts == cVcVmcPmm_D_EpbCoding1) || + (sVcVdm_D_EpbSts == cVcVmcPmm_D_EpbCoding2) || (sVcVdm_D_EpbSts == + cVcVmcPmm_D_EpbCoding3) || (sVcVdm_D_EpbSts == cVcVmcPmm_D_EpbCoding4); + + + if (xVcVmcPmm_B_BrkRoadIncline || xVcVmcPmm_B_EpbActive) { + + X_SVmcPmm__HE727_UnitDelay = X_SVmcPmm__HE727_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE727_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_NonSysStrt = (!(yVcDeDmm_B_RespStartReq)) && (sVcDeDmm_D_EngRunReqDriver + == 2); + + + if (cVcVmcPmm_B_UseIsgStrtAtStndStill) { + + SVmcPmm__HE722_Switch = 1; + } + else { + + SVmcPmm__HE722_Switch = xVcVmcPmm_B_NonSysStrt; + } + + + SVmcPmm__HE672_LogicalOperator7 = X_SVmcPmm__HE672_UnitDelay2 || + (!(SVmcPmm__HE828_Switch)) || (SVmcPmm__HE848_Switch < + cVcVmcPmm_Te_Efad12VStrtEngClntMin); + + + xVcVmcPmm_B_IsgStrtGearLvrDRBraking = xVcVmcPmm_B_IsgStrtWhlTrqOK && + SVmcPmm__HE672__gicalOperator10 && (((X_SVmcPmm__HE726_UnitDelay > + cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR) && (X_SVmcPmm__HE727_UnitDelay > + cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR) && SVmcPmm__HE722_Switch) || + SVmcPmm__HE672_LogicalOperator7); + + + xVcVmcPmm_B_IsgStrtGearLvrDR = SVmcPmm__HE721_Switch || + xVcVmcPmm_B_IsgStrtGearLvrDRBraking; + + + if (SVmcPmm__HE829_Switch) { + + X_SVmcPmm__HE739_UnitDelay = X_SVmcPmm__HE739_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE739_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_DrvCycActvFirstStrtTiOut = X_SVmcPmm__HE739_UnitDelay > + cVcVmcPmm_t_DrvCycActvFirstStrt; + + + xVcVmcPmm_B_DrvCycActvFirstStrt = (sVcTcm_Te_TrsmOilT < cVcVmcPmm_Te_TrnOil) && + SVmcPmm__HE829_Switch && (!(xVcVmcPmm_B_DrvCycActvFirstStrtTiOut)); + + + if (X_SVmcPmm__HE6_UnitDelay14) { + + X_SVmcPmm__HE738_UnitDelay = X_SVmcPmm__HE738_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE738_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EngOnReqTiOut = X_SVmcPmm__HE738_UnitDelay > cVcVmcPmm_t_EngOnReqDly; + + + xVcVmcPmm_B_EngOnReqDly = X_SVmcPmm__HE6_UnitDelay14 && + (!(xVcVmcPmm_B_EngOnReqTiOut)) && cVcVmcPmm_B_UseEngOnReqDly; + + + xVcVmcPmm_B_Efad2IceUnavl = yVcDsePcr_B_IsgStartDisableRq || yVcDsePcr_B_IsgDisableRq + || yVcDseGb_B_EfadIsgPathNotAvl; + + + xVcVmcPmm_B_Efad2WhlUnavl = yVcDseGb_B_EfadWhlPathNotAvl || + yVcDsePcr_B_EfadDisableRq; + + + xVcVmcPmm_B_EfadUnavl = (xVcVmcPmm_B_Efad2IceUnavl && xVcVmcPmm_B_Efad2WhlUnavl) || + ((!(yVcDepTre_B_ISGTqAllw)) && (sVcDtcAtr_D_GearLevAT != cVc_D_GearLevATReverse)); + + + xVcVmcPmm_B_IsgStrtAllwd = ((!(sVcDeDmm_B_DrMdeFactory)) || + (!(cVcVmcPmm_B_EfadUseFactory12VStrt))) && (sVcCidd_D_IsgModSts != 7) && + (CVmcPmm__HE1_D_IceStatus != 2) && ((CVmcPmm__HE1_D_IceStatus != + cVcVmcPmm_D_IceStsStarting) || (sVcEc_n_Eng <= cVcVmcPmm_n_IsgStrtAllwdEngSpdMax) || + xVcVmcPmm_B_DrvCycActvFirstStrt || xVcVmcPmm_B_EngOnReqDly) && + (!(X_SVmcPmm__HE674_UnitDelay7)) && (!(yVcDsePcr_B_IsgStartDisableRq)) && + (((!(xVcVmcPmm_B_Efad2IceUnavl)) && (!(xVcVmcPmm_B_EfadUnavl))) || + xVcVmcPmm_B_DrvCycActvFirstStrt); + + + xVcVmcPmm_B_IsgStrtPsbl = cVcVmcPmm_B_EfadUseIsgStrt && (xVcVmcPmm_B_IsgStrtGearLvrDR + || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATNeutral)) && xVcVmcPmm_B_IsgStrtAllwd; + + + xVcVmcPmm_B_CluStrtVehSpdOK = (sVcDtcAtr_v_VehDrDirection > + cVcVmcPmm_v_EfadCluStrtEna) || ((sVcDtcAtr_v_VehDrDirection >= + cVcVmcPmm_v_EfadCluStrtDi) && X_SVmcPmm__HE707_UnitDelay1); + + + X_SVmcPmm__HE707_UnitDelay1 = xVcVmcPmm_B_CluStrtVehSpdOK; + + + xVcVmcPmm_B_CluStrtPsbl = cVcVmcPmm_B_EfadUseCluStrt && xVcVmcPmm_B_CluStrtVehSpdOK + && ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATReverse)) && yVcGscSgs_B_CluStrtAvl && xVcVmcPmm_B_CluStrtAllwd; + + + SVmcPmm__HE638_LogicalOperator1 = xVcVmcPmm_B_CluStrtPsbl && + ((!(X_SVmcPmm__HE638_UnitDelay3)) && (!(X_SVmcPmm__HE638_UnitDelay1))) && + X_SVmcPmm__HE6_UnitDelay14; + + + if (cVcVmcPmm_B_CluStrtReq_swi) { + + SVmcPmm__HE695_Switch = cVcVmcPmm_B_CluStrtReq_dbi; + } + else { + + SVmcPmm__HE695_Switch = SVmcPmm__HE638_LogicalOperator1 && + (!(X_SVmcPmm__HE686_UnitDelay1)); + } + + + X_SVmcPmm__HE686_UnitDelay1 = SVmcPmm__HE638_LogicalOperator1; + + + X_SVmcPmm__HE703_UnitDelay1 = SVmcPmm__HE695_Switch || (X_SVmcPmm__HE6_UnitDelay14 && + ((CVmcPmm__HE1_D_IceStatus != 2) || yVcDtcSt_B_CluStrtAct) && + (yVcDtcSt_B_CluStrtAct || (!(X_SVmcPmm__HE678_Delay))) && + (!(X_SVmcPmm__HE638_UnitDelay4)) && SVmcPmm__HE829_Switch && + X_SVmcPmm__HE703_UnitDelay1); + + + X_SVmcPmm__HE678_Delay = yVcDtcSt_B_CluStrtAct; + + + SVmcPmm__HE638__gicalOperator16 = xVcVmcPmm_B_IsgStrtPsbl && + ((!(X_SVmcPmm__HE703_UnitDelay1)) && (!(X_SVmcPmm__HE638_UnitDelay7))) && + X_SVmcPmm__HE6_UnitDelay14; + + + xVcVmcPmm_B_IsgStrtGearLvrDRAbort = cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna && + SVmcPmm__HE672__gicalOperator10 && ((!(xVcVmcPmm_B_IsgStrtGearLvrDRBraking)) && + X_SVmcPmm__HE718_Delay) && (!(SVmcPmm__HE721_Switch)); + + + X_SVmcPmm__HE718_Delay = xVcVmcPmm_B_IsgStrtGearLvrDRBraking; + + + X_SVmcPmm__HE702_UnitDelay1 = (SVmcPmm__HE638__gicalOperator16 && + (!(X_SVmcPmm__HE687_UnitDelay1))) || (X_SVmcPmm__HE6_UnitDelay14 && + (yVcDtcSt_B_StrtAct || (!(X_SVmcPmm__HE679_Delay))) && + (!(X_SVmcPmm__HE638_UnitDelay9)) && SVmcPmm__HE829_Switch && + ((!(xVcVmcPmm_B_IsgStrtGearLvrDRAbort)) || X_SVmcPmm__HE638_UnitDelay8) && + X_SVmcPmm__HE702_UnitDelay1); + + + X_SVmcPmm__HE679_Delay = yVcDtcSt_B_StrtAct; + + + X_SVmcPmm__HE687_UnitDelay1 = SVmcPmm__HE638__gicalOperator16; + + + if (cVcVmcPmm_B_IsgStrtPahReq_swi) { + + X_SVmcPmm__HE6_UnitDelay6 = cVcVmcPmm_B_IsgStrtPahReq_dbi; + } + else { + + X_SVmcPmm__HE6_UnitDelay6 = X_SVmcPmm__HE702_UnitDelay1; + } + + + X_SVmcPmm__HE638_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay6; + + + xVcVmcPmm_B_IsgReq = xVcVmcPmm_B_IsgChrgReq || X_SVmcPmm__HE6_UnitDelay6; + + + if (SVmcPmm__HE829_Switch) { + + X_SVmcPmm__HE670_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE670_UnitDelay = X_SVmcPmm__HE670_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (CVmcPmm__HE1_D_IceStatus != 0) { + + X_SVmcPmm__HE663_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE663_UnitDelay = X_SVmcPmm__HE663_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + xVcVmcPmm_B_Efad2IcePahReq = (xVcVmcPmm_B_IsgReq || xVcVmcPmm_B_Efad2WhlUnavl) && + (SVmcPmm__HE829_Switch || ((X_SVmcPmm__HE670_UnitDelay <= + cVcVmcPmm_t_IsgDrCycStopMax) && (X_SVmcPmm__HE663_UnitDelay <= + cVcVmcPmm_t_IsgDrCycStop))) && ((!(xVcVmcPmm_B_EfadUnavl)) && + (!(xVcVmcPmm_B_Efad2IceUnavl))); + + + if (xVcVmcPmm_B_Efad2IcePahReq) { + + X_SVmcPmm__HE664_UnitDelay = X_SVmcPmm__HE664_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE664_UnitDelay = 0.F; + } + + + if ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATReverse)) { + + X_SVmcPmm__HE671_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE671_UnitDelay = X_SVmcPmm__HE671_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + xVcVmcPmm_B_Efad2WhlPahReq = (!(xVcVmcPmm_B_Efad2IcePahReq)) && + (X_SVmcPmm__HE671_UnitDelay <= cVcVmcPmm_t_GearLevDRDly) && + yVcPpmPsm_B_DriveCycleActive && yVcPpmPsm_B_PropulsionAllowed && + ((!(xVcVmcPmm_B_EfadUnavl)) && (!(xVcVmcPmm_B_Efad2WhlUnavl))); + + + if (xVcVmcPmm_B_Efad2WhlPahReq) { + + X_SVmcPmm__HE667_UnitDelay = X_SVmcPmm__HE667_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE667_UnitDelay = 0.F; + } + + + if (!(SVmcPmm__HE829_Switch)) { + + X_SVmcPmm__HE661_UnitDelay = X_SVmcPmm__HE661_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE661_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_DrvCycTiOut = X_SVmcPmm__HE661_UnitDelay > cVcVmcPmm_t_EfadDrvCycTiOut; + + + xVcVmcPmm_B_Efad2IceReqRst = xVcVmcPmm_B_EfadUnavl || ((xVcVmcPmm_B_Efad2IceUnavl || + ((!(xVcVmcPmm_B_Efad2IcePahReq)) && (!(xVcVmcPmm_B_Efad2WhlPahReq))) || + (!(SVmcPmm__HE829_Switch))) && (xVcVmcPmm_B_DrvCycTiOut || + (yVcVmcWtc_B_EfadPathDisabled && yVcDtcTc_B_IsgPathDisabled))); + + + xVcVmcPmm_B_Efad2IceReq = (xVcVmcPmm_B_Efad2IcePahReq && ((X_SVmcPmm__HE664_UnitDelay + > cVcVmcPmm_t_EfadPahDiTiOut) || yVcVmcWtc_B_EfadPathDisabled)) || + (((!(xVcVmcPmm_B_Efad2WhlPahReq)) || ((X_SVmcPmm__HE667_UnitDelay <= + cVcVmcPmm_t_IsgPahDiTiOut) && (!(yVcDtcTc_B_IsgPathDisabled)))) && + (!(xVcVmcPmm_B_Efad2IceReqRst)) && X_SVmcPmm__HE660_UnitDelay1); + + + X_SVmcPmm__HE660_UnitDelay1 = xVcVmcPmm_B_Efad2IceReq; + + + if ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATPark)) { + + X_SVmcPmm__HE666_UnitDelay = X_SVmcPmm__HE666_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE666_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_GearLvrNotDRDetn = X_SVmcPmm__HE666_UnitDelay > + cVcVmcPmm_t_EfadGearLvrPNDetn; + + + xVcVmcPmm_B_EfadDisengdReq = (((xVcVmcPmm_B_GearLvrNotDRDetn && + ((!(yVcScDep_B_DrvrPrsnt)) || (sVcScIn_v_VehSpdLgt > + cVcVmcPmm_v_EfadGearLvrPNDiseng) || cVcVmcPmm_B_EfadGearLvrPNDisengEna)) || + (sVcDtcAtr_D_GearLevAT == 7) || (!(yVcPpmPsm_B_DriveCycleActive))) && + ((yVcDtcTc_B_IsgPathDisabled && yVcVmcWtc_B_EfadPathDisabled) || + xVcVmcPmm_B_DrvCycTiOut)) || (!(yVcPpmPsm_B_PropulsionAllowed)) || + xVcVmcPmm_B_EfadUnavl; + + + if (cVcVmcPmm_D_EfadPathReq_swi) { + + X_SVmcPmm__HE639_UnitDelay4 = cVcVmcPmm_D_EfadPathReq_dbi; + } + else { + + if (xVcVmcPmm_B_Efad2IceReq) { + + X_SVmcPmm__HE639_UnitDelay4 = 1; + } + else { + + if (xVcVmcPmm_B_EfadDisengdReq) { + + X_SVmcPmm__HE639_UnitDelay4 = 5; + } + else { + + X_SVmcPmm__HE639_UnitDelay4 = 2; + } + } + } + + + SVmcPmm__HE173_Merge1 = (SVmcPmm__HE829_Switch || X_SVmcPmm__HE6_UnitDelay5) && + (X_SVmcPmm__HE639_UnitDelay4 == 1); + + + if (sVcDseEm_rt_IsgMaxTorqueLoss < cVcVmcPmm_rt_EfadStrtAllow) { + + X_SVmcPmm__HE710_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE710_UnitDelay = X_SVmcPmm__HE710_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + xVcVmcPmm_B_ElecMotLowAvailTrq = X_SVmcPmm__HE710_UnitDelay <= + cVcVmcPmm_t_EfadRunReqDelay; + + + if (xVcVmcPmm_B_ElecMotLowAvailTrq) { + + X_SVmcPmm__HE6_UnitDelay3 = 1; + } + else { + + X_SVmcPmm__HE6_UnitDelay3 = 0; + } + + + if (X_SVmcPmm__HE6_UnitDelay14) { + + X_SVmcPmm__HE712_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE712_UnitDelay = X_SVmcPmm__HE712_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + X_SVmcPmm__HE713_UnitDelay = X_SVmcPmm__HE713_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE713_UnitDelay = 0.F; + } + + + SVmcPmm__HE638__gicalOperator14 = (!(SVmcPmm__HE829_Switch)) || + (X_SVmcPmm__HE713_UnitDelay > cVcVmcPmm_t_IceRunng12VStrt); + + + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE731_Delay))) { + + X_SVmcPmm__HE736_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE736_UnitDelay = X_SVmcPmm__HE736_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + X_SVmcPmm__HE731_Delay = SVmcPmm__HE829_Switch; + + + xVcVmcPmm_B_Dly12VStrtVehPwrUp = cVcVmcPmm_B_UseDly12VStrtVehPwrUp && + (X_SVmcPmm__HE736_UnitDelay <= cVcVmcPmm_t_FirstStrtDlyOff) && + ((!(sVcDeDmm_B_DrMdeFactory)) || (!(cVcVmcPmm_B_EfadUseFactory12VStrt))) && + (sVcPpmPsm_D_EngRunReqPsm == 2); + + + xVcVmcPmm_B_12VStrtAllwd = (!(xVcVmcPmm_B_Dly12VStrtVehPwrUp)) && + (!(X_SVmcPmm__HE673_UnitDelay15)) && (sVcDseGb_D_EfadPathAct != 1) && + (CVmcPmm__HE1_D_IceStatus != 2) && ((CVmcPmm__HE1_D_IceStatus != + cVcVmcPmm_D_IceStsStarting) || (sVcEc_n_Eng <= cVcVmcPmm_n_12VStrtAllwdEngSpdMax)) + && (!(xVcVmcPmm_B_Wait4CluStrt)); + + + xVcVmcPmm_B_12VStrtPsbl = cVcVmcPmm_B_EfadUse12VStrt && ((sVcScIn_v_VehSpdLgtMax < + cVcVmcPmm_v_Efad12VStartMax) && (sVcScIn_v_VehSpdLgtMax > + cVcVmcPmm_v_Efad12VStartMin)) && (SVmcPmm__HE828_Switch || + cVcVmcPmm_B_Efad12VStrtEnblIngoreDep) && (SVmcPmm__HE848_Switch >= + cVcVmcPmm_Te_Efad12VStrtEngClntMin) && xVcVmcPmm_B_12VStrtAllwd; + + + X_SVmcPmm__HE675_UnitDelay1 = xVcVmcPmm_B_12VStrtPsbl; + + + if (cVcVmcPmm_B_12VStrtTrigNewPos) { + + SVmcPmm__HE700_Switch = X_SVmcPmm__HE6_UnitDelay14; + } + else { + + SVmcPmm__HE700_Switch = X_SVmcPmm__HE6_UnitDelay14 && + (!(X_SVmcPmm__HE681_UnitDelay1)); + } + + + X_SVmcPmm__HE681_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay14; + + + SVmcPmm__HE638__gicalOperator15 = xVcVmcPmm_B_12VStrtPsbl && + ((!(X_SVmcPmm__HE703_UnitDelay1)) && (!(X_SVmcPmm__HE6_UnitDelay6))) && + SVmcPmm__HE700_Switch; + + + if (cVcVmcPmm_B_12VStrtTrigNewPos) { + + SVmcPmm__HE699_Switch = SVmcPmm__HE638__gicalOperator15 && + (!(X_SVmcPmm__HE685_UnitDelay1)); + } + else { + + SVmcPmm__HE699_Switch = SVmcPmm__HE638__gicalOperator15; + } + + + X_SVmcPmm__HE685_UnitDelay1 = SVmcPmm__HE638__gicalOperator15; + + + X_SVmcPmm__HE701_UnitDelay1 = SVmcPmm__HE699_Switch || (X_SVmcPmm__HE6_UnitDelay14 && + (!(X_SVmcPmm__HE638_UnitDelay11)) && SVmcPmm__HE829_Switch && + (CVmcPmm__HE1_D_IceStatus != 2) && X_SVmcPmm__HE701_UnitDelay1); + + + if (cVcVmcPmm_B_12VStrtReq_swi) { + + X_SVmcPmm__HE638_UnitDelay3 = cVcVmcPmm_B_12VStrtReq_dbi; + } + else { + + X_SVmcPmm__HE638_UnitDelay3 = X_SVmcPmm__HE701_UnitDelay1; + } + + + X_SVmcPmm__HE638_UnitDelay7 = X_SVmcPmm__HE638_UnitDelay3; + + + if (SVmcPmm__HE638__gicalOperator14) { + + rVcVmcPmm_D_12VStrtCnt = 0; + } + else { + + rVcVmcPmm_D_12VStrtCnt = (UInt8) (X_SVmcPmm__HE638_UnitDelay12 + ((UInt8) + (X_SVmcPmm__HE638_UnitDelay3 && (!(X_SVmcPmm__HE683_UnitDelay1))))); + } + + + X_SVmcPmm__HE683_UnitDelay1 = X_SVmcPmm__HE638_UnitDelay3; + + + X_SVmcPmm__HE638_UnitDelay12 = rVcVmcPmm_D_12VStrtCnt; + + + SVmcPmm__HE638__ionalOperator22 = rVcVmcPmm_D_12VStrtCnt < + cVcVmcPmm_D_Efad12VStrtMax; + + + xVcVmcPmm_B_12VStrtActrRdy = (X_SVmcPmm__HE712_UnitDelay > + cVcVmcPmm_t_12VStrtActrRdyDly) && xVcVmcPmm_B_12VStrtPsbl && + SVmcPmm__HE638__ionalOperator22; + + + if (X_SVmcPmm__HE6_UnitDelay14) { + + X_SVmcPmm__HE711_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE711_UnitDelay = X_SVmcPmm__HE711_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + X_SVmcPmm__HE708_UnitDelay = X_SVmcPmm__HE708_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE708_UnitDelay = 0.F; + } + + + SVmcPmm__HE638_LogicalOperator2 = (!(SVmcPmm__HE829_Switch)) || + (X_SVmcPmm__HE708_UnitDelay > cVcVmcPmm_t_IceRunngIsgStrt); + + + if (SVmcPmm__HE638_LogicalOperator2) { + + rVcVmcPmm_D_IsgStrtCnt = 0; + } + else { + + rVcVmcPmm_D_IsgStrtCnt = (UInt8) (X_SVmcPmm__HE638_UnitDelay6 + ((UInt8) + (X_SVmcPmm__HE6_UnitDelay6 && (!(X_SVmcPmm__HE684_UnitDelay1))))); + } + + + X_SVmcPmm__HE684_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay6; + + + X_SVmcPmm__HE638_UnitDelay6 = rVcVmcPmm_D_IsgStrtCnt; + + + SVmcPmm__HE638__tionalOperator6 = rVcVmcPmm_D_IsgStrtCnt < + cVcVmcPmm_D_EfadIsgStrtMax; + + + xVcVmcPmm_B_IsgStrtActrRdy = (X_SVmcPmm__HE711_UnitDelay > + cVcVmcPmm_t_IsgStrtActrRdyDly) && xVcVmcPmm_B_IsgStrtPsbl && + SVmcPmm__HE638__tionalOperator6; + + + if (X_SVmcPmm__HE638_UnitDelay2) { + + X_SVmcPmm__HE709_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE709_UnitDelay = X_SVmcPmm__HE709_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + X_SVmcPmm__HE638_UnitDelay2 = X_SVmcPmm__HE6_UnitDelay14; + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + X_SVmcPmm__HE714_UnitDelay = X_SVmcPmm__HE714_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE714_UnitDelay = 0.F; + } + + + SVmcPmm__HE638__gicalOperator17 = (!(SVmcPmm__HE829_Switch)) || + (X_SVmcPmm__HE714_UnitDelay > cVcVmcPmm_t_IceRunngCluStrt); + + + if (SVmcPmm__HE638__gicalOperator17) { + + rVcVmcPmm_D_CluStrtCnt = 0; + } + else { + + rVcVmcPmm_D_CluStrtCnt = (UInt8) (X_SVmcPmm__HE638_UnitDelay5 + ((UInt8) + (X_SVmcPmm__HE703_UnitDelay1 && (!(X_SVmcPmm__HE682_UnitDelay1))))); + } + + + X_SVmcPmm__HE682_UnitDelay1 = X_SVmcPmm__HE703_UnitDelay1; + + + X_SVmcPmm__HE638_UnitDelay5 = rVcVmcPmm_D_CluStrtCnt; + + + SVmcPmm__HE638__ionalOperator13 = rVcVmcPmm_D_CluStrtCnt < + cVcVmcPmm_D_EfadCluStrtMax; + + + xVcVmcPmm_B_CluStrtActrRdy = (X_SVmcPmm__HE709_UnitDelay > + cVcVmcPmm_t_CluStrtActrRdyDly) && xVcVmcPmm_B_CluStrtPsbl && + SVmcPmm__HE638__ionalOperator13; + + + xVcVmcPmm_B_StrtActrsRdy = (!(SVmcPmm__HE829_Switch)) || xVcVmcPmm_B_12VStrtActrRdy + || xVcVmcPmm_B_IsgStrtActrRdy || xVcVmcPmm_B_CluStrtActrRdy; + + + if (cVcVmcPmm_B_IsgPathEnable_swi) { + + X_SVmcPmm__HE6_UnitDelay13 = cVcVmcPmm_B_IsgPathEnable_dbi; + } + else { + + X_SVmcPmm__HE6_UnitDelay13 = xVcVmcPmm_B_Efad2IcePahReq && + ((!(yVcGscAsr_B_EfadNoTqReq)) && (!(yVcDsePcr_B_IsgNoTqRq))) && + (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdIsg) && + (X_SVmcPmm__HE639_UnitDelay4 == 1) && (sVcDseGb_D_EfadPathAct == 1) && + (sVcCidd_D_IsgModSts == 2); + } + + + X_SVmcPmm__HE743_UnitDelay7 = X_SVmcPmm__HE6_UnitDelay13; + + + X_SVmcPmm__HE675_UnitDelay2 = X_SVmcPmm__HE6_UnitDelay13; + + + SVmcPmm__HE637__gicalOperator50 = (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse); + + + if (SVmcPmm__HE637__gicalOperator50) { + + X_SVmcPmm__HE662_UnitDelay = X_SVmcPmm__HE662_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE662_UnitDelay = 0.F; + } + + + SVmcPmm__HE637__gicalOperator40 = (yVcVmcWtc_B_EfadPathDisabled || + (X_SVmcPmm__HE662_UnitDelay > cVcVmcPmm_t_EfadPahDiTiOut)) && + SVmcPmm__HE637__gicalOperator50; + + + xVcVmcPmm_B_GarageShiftEfadPahDiOK = (SVmcPmm__HE637__gicalOperator40 && + (!(X_SVmcPmm__HE644_Delay))) || (SVmcPmm__HE637__gicalOperator50 && + X_SVmcPmm__HE658_UnitDelay1); + + + X_SVmcPmm__HE658_UnitDelay1 = xVcVmcPmm_B_GarageShiftEfadPahDiOK; + + + X_SVmcPmm__HE644_Delay = SVmcPmm__HE637__gicalOperator40; + + + SVmcPmm__HE637_LogicalOperator7 = xVcVmcPmm_B_Efad2WhlPahReq && + ((!(yVcDsePcr_B_EfadNoTqRq)) && (!(yVcGscAsr_B_EfadNoTqReq))) && + (yVcScIn_B_PropulsionAllowed || cVcVmcPmm_B_IgnrPropAlwdEfad) && + (X_SVmcPmm__HE639_UnitDelay4 == 2) && (sVcDseGb_D_EfadPathAct == 2) && + (sVcCidd_D_IsgModSts == 2) && (yVcDseGbGear_B_ParkLockNotEngd || + cVcVmcPmm_B_EfadPathEnaParkEngd) && xVcVmcPmm_B_GarageShiftEfadPahDiOK; + + + if (yVcGscGar_B_EfadShiftInProgress) { + + X_SVmcPmm__HE668_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE668_UnitDelay = X_SVmcPmm__HE668_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (yVcGscGar_B_EfadShiftInProgress) { + + X_SVmcPmm__HE665_UnitDelay = X_SVmcPmm__HE665_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE665_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EvenGearShiftAct = ((!(SVmcPmm__HE637_LogicalOperator7)) && + X_SVmcPmm__HE643_Delay && xVcVmcPmm_B_GarageShiftEfadPahDiOK && + yVcGscGar_B_EfadShiftInProgress) || ((X_SVmcPmm__HE668_UnitDelay <= + cVcVmcPmm_t_EfadShftProgsOffDly) && (X_SVmcPmm__HE665_UnitDelay <= + cVcVmcPmm_t_EfadShftProgsTimeOut) && xVcVmcPmm_B_Efad2WhlPahReq && + (X_SVmcPmm__HE639_UnitDelay4 == 2) && (!(yVcDsePcr_B_EfadNoTqRq)) && + (!(xVcVmcPmm_B_DrvCycTiOut)) && X_SVmcPmm__HE657_UnitDelay1); + + + X_SVmcPmm__HE657_UnitDelay1 = xVcVmcPmm_B_EvenGearShiftAct; + + + X_SVmcPmm__HE643_Delay = SVmcPmm__HE637_LogicalOperator7; + + + if (cVcVmcPmm_B_EfadPathEnable_swi) { + + X_SVmcPmm__HE6_UnitDelay4 = cVcVmcPmm_B_EfadPathEnable_dbi; + } + else { + + X_SVmcPmm__HE6_UnitDelay4 = SVmcPmm__HE637_LogicalOperator7 || + xVcVmcPmm_B_EvenGearShiftAct; + } + + + yVcVmcPmm_B_EfadActReq = (X_SVmcPmm__HE639_UnitDelay4 == 2) && + yVcPpmPsm_B_DriveCycleActive; + + + if (!(yVcDepTre_B_ISGTqAllw)) { + + X_SVmcPmm__HE669_UnitDelay = X_SVmcPmm__HE669_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE669_UnitDelay = 0.F; + } + + + X_SVmcPmm__HE659_UnitDelay1 = SVmcPmm__HE173_Merge1 || yVcVmcPmm_B_EfadActReq || + ((!(xVcVmcPmm_B_DrvCycTiOut)) && (X_SVmcPmm__HE669_UnitDelay <= + cVcVmcPmm_t_EfadTrqAllowTiOut) && (sVcDseGb_D_EfadPathAct != 5) && + X_SVmcPmm__HE659_UnitDelay1); + + + if (cVcVmcPmm_D_EfadModReq_swi) { + + rVcVmcPmm_D_EfadModReq = cVcVmcPmm_D_EfadModReq_dbi; + } + else { + + if (yVcDsePcr_B_IsgUdcCtrlRq && (sVcDseGb_D_EfadPathAct == 1)) { + + rVcVmcPmm_D_EfadModReq = 4; + } + else { + + + #ifdef SVmcPmm__HE1_VcVmcPmm_AUX + Bool SVmcPmm__HE637__gicalOperator35; + #endif + + + + + SVmcPmm__HE637__gicalOperator35 = (sVcDseGb_D_EfadPathAct == + cVcVmcPmm_D_EfadPathAllwd1) || (sVcDseGb_D_EfadPathAct == + cVcVmcPmm_D_EfadPathAllwd2); + + + if ((sVcDtcCtc_D_EfadModeReq == 5) && SVmcPmm__HE637__gicalOperator35) { + + rVcVmcPmm_D_EfadModReq = 5; + } + else { + + if ((sVcDtcCtc_D_EfadModeReq == 3) && SVmcPmm__HE637__gicalOperator35) { + + rVcVmcPmm_D_EfadModReq = 3; + } + else { + + if (yVcGscAsr_B_EfadNoTqReq || X_SVmcPmm__HE659_UnitDelay1) { + + rVcVmcPmm_D_EfadModReq = 2; + } + else { + + rVcVmcPmm_D_EfadModReq = 1; + } + } + } + } + } + + + SVmcPmm__HE173_Merge = rVcVmcPmm_D_EfadModReq; + + + if (cVcVmcPmm_B_IsgStrtReq_swi) { + + X_SVmcPmm__HE6_UnitDelay10 = cVcVmcPmm_B_IsgStrtReq_dbi; + } + else { + + X_SVmcPmm__HE6_UnitDelay10 = X_SVmcPmm__HE6_UnitDelay6 && + X_SVmcPmm__HE6_UnitDelay13; + } + + + X_SVmcPmm__HE638_UnitDelay8 = X_SVmcPmm__HE6_UnitDelay10; + + + xVcVmcPmm_B_12VStrtReq = X_SVmcPmm__HE638_UnitDelay3; + + + SVmcPmm__HE173_Merge3 = xVcVmcPmm_B_12VStrtReq; + + + yVcVmcPmm_B_ClutchStartReq = X_SVmcPmm__HE703_UnitDelay1; + + + sVcVmcPmm_D_EfadPathReq = X_SVmcPmm__HE639_UnitDelay4; + + + if (sVcDseEm_rt_IsgMaxTorqueLossStart < cVcVmcPmm_rt_EfadLowAvailTrq) { + + X_SVmcPmm__HE740_UnitDelay = X_SVmcPmm__HE740_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE740_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_IsgStrtLowAvailTrq = X_SVmcPmm__HE740_UnitDelay > + cVcVmcPmm_t_EfadLowAvailTrqDly; + + + SVmcPmm__HE638__gicalOperator40 = X_SVmcPmm__HE6_UnitDelay14 || + X_SVmcPmm__HE638_UnitDelay3; + + + X_SVmcPmm__HE704_UnitDelay1 = ((!(SVmcPmm__HE638__gicalOperator40)) && + X_SVmcPmm__HE680_Delay && (!(SVmcPmm__HE638__ionalOperator22)) && + (rVcVmcPmm_D_12VStrtCnt > 0)) || ((!(SVmcPmm__HE638__gicalOperator14)) && + X_SVmcPmm__HE704_UnitDelay1); + + + X_SVmcPmm__HE680_Delay = SVmcPmm__HE638__gicalOperator40; + + + if (cVcVmcPmm_B_12VStrtBlk_swi) { + + xVcVmcPmm_B_12VStrtBlk = cVcVmcPmm_B_12VStrtBlk_dbi; + } + else { + + xVcVmcPmm_B_12VStrtBlk = X_SVmcPmm__HE704_UnitDelay1; + } + + + X_SVmcPmm__HE638_UnitDelay11 = xVcVmcPmm_B_12VStrtBlk; + + + X_SVmcPmm__HE673_UnitDelay15 = xVcVmcPmm_B_12VStrtBlk; + + + X_SVmcPmm__HE672_UnitDelay2 = xVcVmcPmm_B_12VStrtBlk; + + + SVmcPmm__HE638__gicalOperator41 = X_SVmcPmm__HE6_UnitDelay14 || + X_SVmcPmm__HE6_UnitDelay10; + + + X_SVmcPmm__HE706_UnitDelay1 = ((!(SVmcPmm__HE638__gicalOperator41)) && + X_SVmcPmm__HE677_Delay && (!(SVmcPmm__HE638__tionalOperator6)) && + (rVcVmcPmm_D_IsgStrtCnt > 0)) || ((!(SVmcPmm__HE638_LogicalOperator2)) && + X_SVmcPmm__HE706_UnitDelay1); + + + X_SVmcPmm__HE677_Delay = SVmcPmm__HE638__gicalOperator41; + + + if (cVcVmcPmm_B_IsgStrtBlk_swi) { + + xVcVmcPmm_B_IsgStrtBlk = cVcVmcPmm_B_IsgStrtBlk_dbi; + } + else { + + xVcVmcPmm_B_IsgStrtBlk = X_SVmcPmm__HE706_UnitDelay1; + } + + + X_SVmcPmm__HE638_UnitDelay9 = xVcVmcPmm_B_IsgStrtBlk; + + + X_SVmcPmm__HE674_UnitDelay7 = xVcVmcPmm_B_IsgStrtBlk; + + + SVmcPmm__HE638__gicalOperator42 = X_SVmcPmm__HE6_UnitDelay14 || + X_SVmcPmm__HE703_UnitDelay1; + + + X_SVmcPmm__HE705_UnitDelay1 = ((!(SVmcPmm__HE638__gicalOperator42)) && + X_SVmcPmm__HE676_Delay && (!(SVmcPmm__HE638__ionalOperator13)) && + (rVcVmcPmm_D_CluStrtCnt > 0)) || ((!(SVmcPmm__HE638__gicalOperator17)) && + X_SVmcPmm__HE705_UnitDelay1); + + + X_SVmcPmm__HE676_Delay = SVmcPmm__HE638__gicalOperator42; + + + if (cVcVmcPmm_B_CluStrtBlk_swi) { + + xVcVmcPmm_B_CluStrtBlk = cVcVmcPmm_B_CluStrtBlk_dbi; + } + else { + + xVcVmcPmm_B_CluStrtBlk = X_SVmcPmm__HE705_UnitDelay1; + } + + + X_SVmcPmm__HE638_UnitDelay4 = xVcVmcPmm_B_CluStrtBlk; + + + X_SVmcPmm__HE675_UnitDelay10 = xVcVmcPmm_B_CluStrtBlk; + + + xVcVmcPmm_B_IsgStrtLimLoosen = ((!(X_SVmcPmm__HE6_UnitDelay14)) && + X_SVmcPmm__HE717_Delay && (rVcVmcPmm_D_IsgStrtCnt >= + cVcVmcPmm_D_EfadIsgStrLoosenLim)) || (SVmcPmm__HE672_LogicalOperator7 && + xVcVmcPmm_B_CluStrtBlk) || (SVmcPmm__HE829_Switch && (CVmcPmm__HE1_D_IceStatus != 2) + && X_SVmcPmm__HE724_UnitDelay1); + + + X_SVmcPmm__HE724_UnitDelay1 = xVcVmcPmm_B_IsgStrtLimLoosen; + + + X_SVmcPmm__HE717_Delay = X_SVmcPmm__HE6_UnitDelay14; + + + X_SVmcPmm__HE672_UnitDelay1 = xVcVmcPmm_B_IsgStrtLimLoosen; + } + #endif + #if Vc_Pvc_Hw_B_Erad + + if (cVcVmcPmm_B_UseEradCode) { + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + Float32 SVmcPmm__HE615_Switch1; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + Float32 SVmcPmm__HE622_Switch; + #endif + + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + Bool SVmcPmm__HE614__gicalOperator11; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + Bool SVmcPmm__HE614__tionalOperator9; + #endif + + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE624_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE625_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE626_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Float32 X_SVmcPmm__HE630_UnitDelay = 0.F; + #endif + + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE618_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE627_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE628_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE614__lOperator11_AUX + static Bool X_SVmcPmm__HE629_UnitDelay1 = 0; + #endif + + + + + if ((!(yVcVmcPmm_B_EngOnReqEng)) || yVcDeDmm_B_EradEngageRqDr || + yVcVmcEm_B_EradEngageRqEm || yVcDsePcr_B_EradEngageRq || yVcVmcAwd_B_EngageReq) { + + X_SVmcPmm__HE630_UnitDelay = X_SVmcPmm__HE630_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE630_UnitDelay = 0.F; + } + + + if (X_SVmcPmm__HE630_UnitDelay > cVcVmcPmm_t_EradOnGlitch) { + + X_SVmcPmm__HE624_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE624_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE624_UnitDelay; + } + + + if (cVcVmcPmm_B_EradRmpDwnTqSignal) { + + SVmcPmm__HE622_Switch = sVcMtcTc_Tq_EradReqWhl; + } + else { + + SVmcPmm__HE622_Switch = sVcDseWt_Tq_PropRear; + } + + + if (SVmcPmm__HE622_Switch >= 0.F) { + + SVmcPmm__HE615_Switch1 = SVmcPmm__HE622_Switch; + } + else { + + SVmcPmm__HE615_Switch1 = SVmcPmm__HE622_Switch * -1.F; + } + + + SVmcPmm__HE614__tionalOperator9 = SVmcPmm__HE615_Switch1 < cVcVmcPmm_Tq_ERADRampDown; + + + X_SVmcPmm__HE628_UnitDelay1 = (X_SVmcPmm__HE624_UnitDelay <= + cVcVmcPmm_t_EradOffGlitch) || (((!(yVcVmcPmm_B_CrShPathEnable)) || + (!(SVmcPmm__HE614__tionalOperator9))) && X_SVmcPmm__HE628_UnitDelay1); + + + SVmcPmm__HE614__gicalOperator11 = yVcScIn_B_DrvgDirRvsDes || yVcScIn_B_DrvgDirFwdDes; + + + X_SVmcPmm__HE629_UnitDelay1 = (sVcScIn_v_VehSpdLgtMax <= cVcVmcPmm_v_EradOnSpdLim) || + ((sVcScIn_v_VehSpdLgtMax < cVcVmcPmm_v_EradOffSpdLim) && + X_SVmcPmm__HE629_UnitDelay1); + + + yVcVmcPmm_B_EradDrReq = X_SVmcPmm__HE628_UnitDelay1 && + SVmcPmm__HE614__gicalOperator11 && X_SVmcPmm__HE629_UnitDelay1; + + + xVcVmcPmm_B_EradAllow = SVmcPmm__HE829_Switch && (!(yVcDsePcr_B_EradDisableRq)) && + yVcPpmPsm_B_PropulsionAllowed && (yVcDepTre_B_ERADTqAllw || cVcVmcPmm_B_ERADTqAllw); + + + xVcVmcPmm_B_EradEngageReq = yVcVmcPmm_B_EradDrReq && xVcVmcPmm_B_EradAllow; + + + if (cVcVmcPmm_B_EradPathEnable_swi) { + + X_SVmcPmm__HE6_UnitDelay8 = cVcVmcPmm_B_EradPathEnable_dbi; + } + else { + + X_SVmcPmm__HE6_UnitDelay8 = xVcVmcPmm_B_EradEngageReq && + (!(yVcDsePcr_B_EradNoTqRq)) && (sVcIem_D_WhlMotSysModSts == 2) && + yVcIem_B_WhlMotSysCluSts; + } + + + if (cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi) { + + sVcVmcPmm_D_WhlMotSysCluOperTypReq = cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi; + } + else { + + sVcVmcPmm_D_WhlMotSysCluOperTypReq = sVcDeDmm_D_EradEngageModeReq; + } + + + if (!(xVcVmcPmm_B_EradEngageReq)) { + + X_SVmcPmm__HE626_UnitDelay = X_SVmcPmm__HE626_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE626_UnitDelay = 0.F; + } + + + if ((!(SVmcPmm__HE614__gicalOperator11)) && X_SVmcPmm__HE618_Delay) { + + X_SVmcPmm__HE625_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE625_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE625_UnitDelay; + } + + + X_SVmcPmm__HE618_Delay = SVmcPmm__HE614__gicalOperator11; + + + X_SVmcPmm__HE627_UnitDelay1 = xVcVmcPmm_B_EradEngageReq || + ((X_SVmcPmm__HE626_UnitDelay <= cVcVmcPmm_t_EradDisable) && + ((X_SVmcPmm__HE625_UnitDelay <= cVcVmcPmm_t_EradNtrlGlitch) || + (((!(yVcVmcWtd_B_EradPathDisabled)) && (!(cVcVmcPmm_B_EradIgnrPathDisable))) || + (!(SVmcPmm__HE614__tionalOperator9)))) && X_SVmcPmm__HE627_UnitDelay1); + + + xVcVmcPmm_B_EradSpdCtrl = (!(yVcIem_B_WhlMotSysCluSts)) && xVcVmcPmm_B_EradAllow && + yVcScIn_B_DrvgDirRvsDes && (sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_EradSpdCtrl); + + + if (X_SVmcPmm__HE627_UnitDelay1) { + + sVcVmcPmm_D_WhlMotSysModReq = 2; + } + else { + + if (xVcVmcPmm_B_EradSpdCtrl) { + + sVcVmcPmm_D_WhlMotSysModReq = 3; + } + else { + + sVcVmcPmm_D_WhlMotSysModReq = 1; + } + } + + + yVcVmcPmm_B_EradClutchReq = X_SVmcPmm__HE627_UnitDelay1; + } + #endif + #if VcVmcPmm__HEP7_1243_Isg_8 + + if (cVcVmcPmm_B_UseIsgCode) { + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + Float32 SVmcPmm__HE787_Switch1; + #endif + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + Float32 SVmcPmm__HE791_Switch; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + Float32 SVmcPmm__HE810_Switch; + #endif + + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + Bool SVmcPmm__HE784__gicalOperator19; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + Bool SVmcPmm__HE808_LogicalOperator; + #endif + + + + + #ifdef SVmcPmm__HE818_Switch_AUX + Bool SVmcPmm__HE818_Switch; + #endif + + + + + + #ifdef SVmcPmm__HE784_Merge_AUX + static UInt8 SVmcPmm__HE784_Merge = 0; + #endif + + + + + #ifdef SVmcPmm__HE784_Merge5_AUX + static UInt8 SVmcPmm__HE784_Merge5 = 0; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static UInt8 SVmcPmm__HE817___IsgStrtAllow_x[2] = + { + 0, 0 + + }; + #endif + + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE795_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE804_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE805_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Float32 X_SVmcPmm__HE806_UnitDelay = 0.F; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Float32 X_SVmcPmm__HE814_UnitDelay = 1e+30F; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Float32 X_SVmcPmm__HE815_UnitDelay = 1e+30F; + #endif + + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE785_InitValue1 = 1; + #endif + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Bool X_SVmcPmm__HE788_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE784__lOperator19_AUX + static Bool X_SVmcPmm__HE802_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE784_Merge5_AUX + static Bool X_SVmcPmm__HE803_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE807_Delay = 0; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE808_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE809_UnitDelay1 = 0; + #endif + + + + + #ifdef SVmcPmm__HE808__calOperator_AUX + static Bool X_SVmcPmm__HE816_UnitDelay1 = 0; + #endif + + + + + if (sVcDseEm_rt_IsgMaxTorqueLoss < cVcVmcPmm_rt_IsgStrtAllow) { + + X_SVmcPmm__HE804_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE804_UnitDelay = X_SVmcPmm__HE804_UnitDelay + ts_VcVmcPmm__HEP7; + } + + + if (X_SVmcPmm__HE804_UnitDelay <= cVcVmcPmm_t_IsgRunReqDelay) { + + X_SVmcPmm__HE6_UnitDelay3 = 1; + } + else { + + X_SVmcPmm__HE6_UnitDelay3 = 0; + } + + + if (CVmcPmm__HE1_D_IceStatus == 0) { + + X_SVmcPmm__HE806_UnitDelay = X_SVmcPmm__HE806_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE806_UnitDelay = 0.F; + } + + + SVmcPmm__HE784__gicalOperator19 = (!(X_SVmcPmm__HE6_UnitDelay14)) && + (X_SVmcPmm__HE806_UnitDelay > cVcVmcPmm_t_IsgICEStop); + + + if (SVmcPmm__HE784__gicalOperator19 && (!(X_SVmcPmm__HE788_UnitDelay1))) { + + X_SVmcPmm__HE795_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE795_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE795_UnitDelay; + } + + + X_SVmcPmm__HE788_UnitDelay1 = SVmcPmm__HE784__gicalOperator19; + + + SVmcPmm__HE173_Merge1 = ((X_SVmcPmm__HE795_UnitDelay > cVcVmcPmm_t_IsgAdapt) || + cVcVmcPmm_B_SkipIsgCalibration) && SVmcPmm__HE829_Switch; + + + xVcVmcPmm_B_IsgEnable = SVmcPmm__HE173_Merge1 && (yVcDepTre_B_ISGTqAllw || + cVcVmcPmm_B_ISGTqAllw) && (!(yVcDsePcr_B_IsgDisableRq)); + + + if (cVcVmcPmm_B_IsgPathEnable_swi) { + + X_SVmcPmm__HE6_UnitDelay13 = cVcVmcPmm_B_IsgPathEnable_dbi; + } + else { + + X_SVmcPmm__HE6_UnitDelay13 = xVcVmcPmm_B_IsgEnable && (!(yVcDsePcr_B_IsgNoTqRq)) + && (sVcCidd_D_IsgModSts == 2); + } + + + X_SVmcPmm__HE803_UnitDelay1 = (cVcVmcPmm_B_UseIsgSpdCtrlStrt && + X_SVmcPmm__HE6_UnitDelay14 && (X_SVmcPmm__HE6_UnitDelay == 2)) || + ((CVmcPmm__HE1_D_IceStatus != 2) && X_SVmcPmm__HE803_UnitDelay1); + + + if (!(xVcVmcPmm_B_IsgEnable)) { + + X_SVmcPmm__HE805_UnitDelay = X_SVmcPmm__HE805_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE805_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_IsgRmpDwnTqSignal) { + + SVmcPmm__HE791_Switch = sVcDtcTc_Tq_IsgReqCrSh; + } + else { + + SVmcPmm__HE791_Switch = sVcDseCt_Tq_IsgCrSh; + } + + + if (SVmcPmm__HE791_Switch >= 0.F) { + + SVmcPmm__HE787_Switch1 = SVmcPmm__HE791_Switch; + } + else { + + SVmcPmm__HE787_Switch1 = SVmcPmm__HE791_Switch * -1.F; + } + + + xVcVmcPmm_B_IsgActrTqRampDwn = SVmcPmm__HE787_Switch1 < cVcVmcPmm_Tq_IsgRampDown; + + + X_SVmcPmm__HE802_UnitDelay1 = xVcVmcPmm_B_IsgEnable || ((X_SVmcPmm__HE805_UnitDelay + <= cVcVmcPmm_t_IsgDisable) && (((!(yVcDtcTc_B_IsgPathDisabled)) && + (!(cVcVmcPmm_B_IsgIgnrPathDisable))) || (!(xVcVmcPmm_B_IsgActrTqRampDwn))) && + X_SVmcPmm__HE802_UnitDelay1); + + + if (X_SVmcPmm__HE802_UnitDelay1) { + + if (yVcDsePcr_B_IsgUdcCtrlRq) { + + SVmcPmm__HE173_Merge = 4; + } + else { + + if (X_SVmcPmm__HE803_UnitDelay1) { + + SVmcPmm__HE173_Merge = 3; + } + else { + + SVmcPmm__HE173_Merge = 2; + } + } + } + else { + + SVmcPmm__HE173_Merge = 1; + } + #if Vc_Pvc_Hw_B_12VStartMotor == 0 + + if (cVcVmcPmm_B_IsgStrtUseSpdCtrl) { + + SVmcPmm__HE818_Switch = !(X_SVmcPmm__HE803_UnitDelay1); + } + else { + + SVmcPmm__HE818_Switch = 1; + } + + + SVmcPmm__HE784_Merge5 = (UInt8) (X_SVmcPmm__HE6_UnitDelay14 && + X_SVmcPmm__HE6_UnitDelay13 && (!(yVcDsePcr_B_IsgStartDisableRq)) && + SVmcPmm__HE818_Switch); + + + SVmcPmm__HE784_Merge = (UInt8) 0; + #endif + #if Vc_Pvc_Hw_B_12VStartMotor + + if (cVcVmcPmm_B_UseOilTemp) { + + SVmcPmm__HE810_Switch = sVcTmTeOil_Te_EngOil; + } + else { + + SVmcPmm__HE810_Switch = SVmcPmm__HE848_Switch; + } + + + X_SVmcPmm__HE816_UnitDelay1 = (SVmcPmm__HE829_Switch && + (!(X_SVmcPmm__HE809_UnitDelay1))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE807_Delay))) && (CVmcPmm__HE1_D_IceStatus != 2) && + X_SVmcPmm__HE816_UnitDelay1); + + + X_SVmcPmm__HE807_Delay = SVmcPmm__HE829_Switch; + + + X_SVmcPmm__HE809_UnitDelay1 = SVmcPmm__HE829_Switch; + + + TabIdxS18T6((const Float32 *) &(tVcVmcPmm_Tq_IsgStrtAllow_x[0]), 6, sVcEc_n_Eng, + SVmcPmm__HE817___IsgStrtAllow_x); + + + rVcVmcPmm_Tq_EradMaxLimNoLim = Tab1DIntpI1T6((const Float32 *) + &(tVcVmcPmm_Tq_IsgStrtAllow[0]), &(SVmcPmm__HE817___IsgStrtAllow_x[0])); + + + if ((sVcDseEm_Tq_IsgMaxAvail >= rVcVmcPmm_Tq_EradMaxLimNoLim) && + (sVcDseEm_Pw_IsgMaxAllowPrio >= cVcVmcPmm_Pw_IsgStrtAllow) && + (sVcDseEm_rt_IsgMaxTorqueLoss >= cVcVmcPmm_rt_IsgStrtAllow)) { + + X_SVmcPmm__HE815_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE815_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE815_UnitDelay; + } + + + xVcVmcPmm_B_IsgStrtOk = X_SVmcPmm__HE6_UnitDelay13 && ((SVmcPmm__HE810_Switch >= + cVcVmcPmm_Te_IsgStartPossible) || cVcVmcPmm_B_IsgStrtTempOverride) && + ((!(yVcDsePcr_B_IsgStartDisableRq)) || cVcVmcPmm_B_IsgStrtPcrOverride) && + ((!(yVcFsdPc_B_RunDry)) || cVcVmcPmm_B_IsgStrtRunDryOverride) && + ((!(X_SVmcPmm__HE816_UnitDelay1)) || cVcVmcPmm_B_IsgStrtFirstStartOverride) && + (X_SVmcPmm__HE815_UnitDelay <= cVcVmcPmm_t_IsgRunReqDelay) && + ((!(X_SVmcPmm__HE803_UnitDelay1)) || cVcVmcPmm_B_IsgStrtSpdCtrlOverride); + + + SVmcPmm__HE808_LogicalOperator = X_SVmcPmm__HE6_UnitDelay14 && + (!(X_SVmcPmm__HE808_UnitDelay1)); + + + X_SVmcPmm__HE808_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay14; + + + if (SVmcPmm__HE808_LogicalOperator) { + + X_SVmcPmm__HE814_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE814_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE814_UnitDelay; + } + + + if (SVmcPmm__HE808_LogicalOperator || ((X_SVmcPmm__HE814_UnitDelay <= + cVcVmcPmm_t_IsgStrtOkDelay) && (!(X_SVmcPmm__HE785_InitValue1)))) { + + X_SVmcPmm__HE785_InitValue1 = xVcVmcPmm_B_IsgStrtOk; + } + + + if (cVcVmcPmm_B_IsgStartEnable_swi) { + + SVmcPmm__HE784_Merge5 = (UInt8) cVcVmcPmm_B_IsgStartEnable_dbi; + } + else { + + SVmcPmm__HE784_Merge5 = (UInt8) X_SVmcPmm__HE785_InitValue1; + } + + + xVcVmcPmm_B_12VStrtOk = sVcScIn_v_VehSpdLgt <= cVcVmcPmm_v_12VStrtMax; + + + if (cVcVmcPmm_B_12VStartEnable_swi) { + + SVmcPmm__HE784_Merge = (UInt8) cVcVmcPmm_B_12VStartEnable_dbi; + } + else { + + SVmcPmm__HE784_Merge = (UInt8) (xVcVmcPmm_B_12VStrtOk && + (!(xVcVmcPmm_B_IsgStrtOk)) && (!(X_SVmcPmm__HE785_InitValue1))); + } + #endif + + + X_SVmcPmm__HE6_UnitDelay10 = SVmcPmm__HE784_Merge5 != 0; + + + SVmcPmm__HE173_Merge3 = SVmcPmm__HE784_Merge != 0; + } + #endif + #if Vc_Pvc_Hw_B_TqConverterGbx + + TabIdxS18T390((const Float32 *) &(tVcVmcPmm_Tq_TransHeatReq_x[0]), 6, + sVcDtcAtr_v_VehDrDirectionRaw, SVmcPmm__HE821___TransHeatReq_x); + + + SVmcPmm__HE821_Tq_TransHeatReq = Tab1DIntpI1T54((const Float32 *) + &(tVcVmcPmm_Tq_TransHeatReq[0]), &(SVmcPmm__HE821___TransHeatReq_x[0])); + + + if (SVmcPmm__HE829_Switch && (sVcDseEm_Tq_EradMaxAvailWhl <= + SVmcPmm__HE821_Tq_TransHeatReq)) { + + X_SVmcPmm__HE819_UnitDelay = X_SVmcPmm__HE819_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE819_UnitDelay = 0.F; + } + + + X_SVmcPmm__HE820_UnitDelay1 = (X_SVmcPmm__HE819_UnitDelay > + cVcVmcPmm_t_TransHeatDelayOn) || ((sVcDseEm_Tq_EradMaxAvailWhl <= + (SVmcPmm__HE821_Tq_TransHeatReq + cVcVmcPmm_Tq_TransHeatReqOffset)) && + X_SVmcPmm__HE820_UnitDelay1); + + + yVcVmcPmm_B_TransHeatReq = X_SVmcPmm__HE820_UnitDelay1; + #endif + + + SVmcPmm__HE6_Merge3 = SVmcPmm__HE173_Merge3; + + + sVcVmcPmm_D_IsgModReq = SVmcPmm__HE173_Merge; + + + yVcVmcPmm_B_IsgActReq = SVmcPmm__HE173_Merge1; + #endif + + + X_SVmcPmm__HE6_UnitDelay15 = xVcVmcPmm_B_IsgStopStandstillPre; + + + X_SVmcPmm__HE6_UnitDelay11 = xVcVmcPmm_B_EngRunReqIsgStop; + + + X_SVmcPmm__HE6_UnitDelay9 = xVcVmcPmm_B_IsgStopCoast; + + + X_SVmcPmm__HE6_UnitDelay7 = xVcVmcPmm_B_Wait4CluStrt; + + + X_SVmcPmm__HE6_UnitDelay12 = xVcVmcPmm_B_EngRunReqIsgStop; + + + X_SVmcPmm__HE6_UnitDelay2 = xVcVmcPmm_B_StrtActrsRdy; + + + if (CVmcPmm__HE1_D_IceStatus == 2) { + + X_SVmcPmm__HE593_UnitDelay = X_SVmcPmm__HE593_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE593_UnitDelay = 0.F; + } + + + if ((X_SVmcPmm__HE593_UnitDelay > cVcVmcPmm_t_EngRunStall) || (!(SVmcPmm__HE829_Switch))) { + + rVcVmcPmm_D_StallAbortNum = 0; + } + else { + + rVcVmcPmm_D_StallAbortNum = (UInt8) (X_SVmcPmm__HE172_UnitDelay3 + ((UInt8) + SVmcPmm__HE527_LogicalOperator)); + } + + + X_SVmcPmm__HE172_UnitDelay3 = rVcVmcPmm_D_StallAbortNum; + + + xVcVmcPmm_B_StallAbortNum = rVcVmcPmm_D_StallAbortNum >= cVcVmcPmm_D_AbortStart; + + + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE530_UnitDelay1))) { + + X_SVmcPmm__HE581_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE581_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE581_UnitDelay; + } + + + X_SVmcPmm__HE530_UnitDelay1 = SVmcPmm__HE829_Switch; + + + if (SVmcPmm__HE829_Switch && (!(X_SVmcPmm__HE528_UnitDelay1))) { + + X_SVmcPmm__HE580_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE580_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE580_UnitDelay; + } + + + X_SVmcPmm__HE528_UnitDelay1 = SVmcPmm__HE829_Switch; + + + if (cVcVmcPmm_B_AbrtFrstStrtStall) { + + xVcVmcPmm_B_AbrtFrstStrtStall = X_SVmcPmm__HE590_UnitDelay1 && (X_SVmcPmm__HE581_UnitDelay + > cVcVmcPmm_t_BlockAbrtFrstDrCycle) && (X_SVmcPmm__HE580_UnitDelay <= + cVcVmcPmm_t_AbrtFrstDrCycle); + } + else { + + xVcVmcPmm_B_AbrtFrstStrtStall = 0; + } + + + if (cVcVmcPmm_B_AbrtNtrlAdapt) { + + xVcVmcPmm_B_AbrtNtrlAdapt = (!(yVcScDep_B_NeutralMTValid)) && X_SVmcPmm__HE590_UnitDelay1; + } + else { + + xVcVmcPmm_B_AbrtNtrlAdapt = 0; + } + + + if (X_SVmcPmm__HE590_UnitDelay1) { + + X_SVmcPmm__HE585_UnitDelay = X_SVmcPmm__HE585_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE585_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_AbrtStallTime) { + + xVcVmcPmm_B_AbrtStallTime = X_SVmcPmm__HE585_UnitDelay > cVcVmcPmm_t_AbrtStall; + } + else { + + xVcVmcPmm_B_AbrtStallTime = 0; + } + + + if (cVcVmcPmm_B_AbrtStallGp) { + + xVcVmcPmm_B_AbrtStallGp = sVcGp_D_StopStart != 2; + } + else { + + xVcVmcPmm_B_AbrtStallGp = 0; + } + + + if (cVcVmcPmm_B_AbrtStallRcvInSpd) { + + xVcVmcPmm_B_StallRcvAbortInSpd = (sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_VehMaxStallRcv) && + X_SVmcPmm__HE590_UnitDelay1; + } + else { + + xVcVmcPmm_B_StallRcvAbortInSpd = 0; + } + + + if (cVcVmcPmm_B_AbrtStallSsRcfSet) { + + xVcVmcPmm_B_AbrtStallSsRcfSet = yVcEc_B_SsRcfSet; + } + else { + + xVcVmcPmm_B_AbrtStallSsRcfSet = 0; + } + + + if (cVcVmcPmm_B_AbrtStallAbortHard) { + + xVcVmcPmm_B_AbrtStallAbortHard = yVcPpmRc_B_StrtAbortHard; + } + else { + + xVcVmcPmm_B_AbrtStallAbortHard = 0; + } + + + if (cVcVmcPmm_B_AbrtStallSeatBelt) { + + xVcVmcPmm_B_AbrtStallSeatBelt = X_SVmcPmm__HE590_UnitDelay1 && + (!(yVcCem_B_BltLockStAtDrvr)); + } + else { + + xVcVmcPmm_B_AbrtStallSeatBelt = 0; + } + + + if (cVcVmcPmm_B_AbrtStallMicHev) { + + xVcVmcPmm_B_AbrtStallMicHev = sVcDeDmm_D_MicHevMode == 0; + } + else { + + xVcVmcPmm_B_AbrtStallMicHev = 0; + } + + + if (cVcVmcPmm_B_AbrtStallEngClntL) { + + xVcVmcPmm_B_AbrtStallEngClntL = SVmcPmm__HE848_Switch < cVcVmcPmm_Te_AbrtStallEngClntL; + } + else { + + xVcVmcPmm_B_AbrtStallEngClntL = 0; + } + + + if (cVcVmcPmm_B_AbrtStallRcShutOff) { + + xVcVmcPmm_B_AbrtStallRcShutOff = yVcPpmRc_B_ShutOffReq; + } + else { + + xVcVmcPmm_B_AbrtStallRcShutOff = 0; + } + + + X_SVmcPmm__HE172_UnitDelay8 = xVcVmcPmm_B_StallAbortNum || xVcVmcPmm_B_AbrtFrstStrtStall || + xVcVmcPmm_B_AbrtNtrlAdapt || xVcVmcPmm_B_AbrtStallTime || xVcVmcPmm_B_AbrtStallGp || + xVcVmcPmm_B_StallRcvAbortInSpd || xVcVmcPmm_B_AbrtStallSsRcfSet || + xVcVmcPmm_B_AbrtStallAbortHard || xVcVmcPmm_B_AbrtStallSeatBelt || + xVcVmcPmm_B_AbrtStallMicHev || xVcVmcPmm_B_AbrtStallEngClntL || + xVcVmcPmm_B_AbrtStallRcShutOff; + + + X_SVmcPmm__HE172_UnitDelay1 = X_SVmcPmm__HE172_UnitDelay8; + + + xVcVmcPmm_B_DrDoorOpen = sVcCem_D_DoorDrvrSts == cVcVmcPmm_D_DrDoorOpen; + #if Vc_Pvc_Hw_B_HVSystem == 0 + + if (sVcEc_n_Eng <= cVcVmcPmm_n_PwdRpmOnly) { + + X_SVmcPmm__HE46_UnitDelay = X_SVmcPmm__HE46_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE46_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_PwdRpmOnly) { + + SVmcPmm__HE36_Switch = X_SVmcPmm__HE46_UnitDelay > cVcVmcPmm_t_PwdRpm; + } + else { + + SVmcPmm__HE36_Switch = CVmcPmm__HE1_D_IceStatus == 0; + } + + + if (cVcVmcPmm_B_PwdRcShutOffDCA) { + + SVmcPmm__HE32_Switch = yVcPpmPsm_B_DriveCycleActive && yVcPpmRc_B_ShutOffReq; + } + else { + + SVmcPmm__HE32_Switch = yVcPpmRc_B_ShutOffReq; + } + + + if (SVmcPmm__HE32_Switch) { + + X_SVmcPmm__HE48_UnitDelay = X_SVmcPmm__HE48_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE48_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_PwdRcShutOff) { + + SVmcPmm__HE41_Switch = X_SVmcPmm__HE48_UnitDelay > cVcVmcPmm_t_PwdRcShutOff; + } + else { + + SVmcPmm__HE41_Switch = 0; + } + + + if (cVcVmcPmm_B_PwdSpeedLimit) { + + SVmcPmm__HE39_Switch = sVcScIn_v_VehSpdLgt < cVcVmcPmm_v_PwdSpeedLimit; + } + else { + + SVmcPmm__HE39_Switch = 1; + } + + + xVcVmcPmm_B_PwdPossible = yVcPpmPsm_B_DriveCycleActive && ((yVcPpmRc_B_StrtAbortHard && + cVcVmcPmm_B_PwdDrReadyAbortHard) || (!(yVcPpmPsm_B_DrReady))) && (SVmcPmm__HE36_Switch || + SVmcPmm__HE41_Switch) && SVmcPmm__HE39_Switch; + + + if (cVcVmcPmm_B_PwdSeatBeltDoor) { + + + #if Vc_Pvc_Hw_B_HVSystem == 0 + Bool SVmcPmm__HE31_Switch; + #endif + + + if (cVcVmcPmm_B_PwdIgnoreQfDrDoor) { + + SVmcPmm__HE31_Switch = 0; + } + else { + + SVmcPmm__HE31_Switch = sVcCem_Qf_DoorDrvrSts != 3; + } + + + SVmcPmm__HE44_Switch = xVcVmcPmm_B_DrDoorOpen || SVmcPmm__HE31_Switch; + } + else { + + SVmcPmm__HE44_Switch = 0; + } + + + SVmcPmm__HE26_LogicalOperator15 = (((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && + cVcVmcPmm_B_PwdSeatBeltP) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) && + cVcVmcPmm_B_PwdSeatBeltN)) && (!(yVcCem_B_BltLockStAtDrvr)); + + + SVmcPmm__HE26_LogicalOperator23 = SVmcPmm__HE44_Switch && SVmcPmm__HE26_LogicalOperator15; + + + if (SVmcPmm__HE26_LogicalOperator15) { + + X_SVmcPmm__HE47_UnitDelay = X_SVmcPmm__HE47_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE47_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_PwdSeatBelt) { + + if (yVcDtcAtr_B_AT && cVcVmcPmm_B_PwdUseSeatBeltAT) { + + SVmcPmm__HE40_Switch = SVmcPmm__HE26_LogicalOperator23 || (X_SVmcPmm__HE47_UnitDelay + > cVcVmcPmm_t_PwdSeatBeltAT); + } + else { + + SVmcPmm__HE40_Switch = !(yVcCem_B_BltLockStAtDrvr); + } + } + else { + + SVmcPmm__HE40_Switch = 0; + } + + + if (cVcVmcPmm_B_PwdRcfDep) { + + SVmcPmm__HE33_Switch = yVcEc_B_SsRcfSet; + } + else { + + SVmcPmm__HE33_Switch = 0; + } + + + if (cVcVmcPmm_B_PwdAbrtStall) { + + SVmcPmm__HE34_Switch = X_SVmcPmm__HE172_UnitDelay8; + } + else { + + SVmcPmm__HE34_Switch = 0; + } + + + if (cVcVmcPmm_B_PwdAbortHard) { + + SVmcPmm__HE35_Switch = yVcPpmRc_B_StrtAbortHard; + } + else { + + SVmcPmm__HE35_Switch = 0; + } + + + if (cVcVmcPmm_B_PwdTransFailure) { + + SVmcPmm__HE37_Switch = yVcTcm_B_TrsmNeutFailr && yVcDtcAtr_B_AT; + } + else { + + SVmcPmm__HE37_Switch = 0; + } + + + if (cVcVmcPmm_B_PwdTCMNodeAlive) { + + SVmcPmm__HE38_Switch = (!(yVcEc_B_TCMNodeAlive)) && yVcDtcAtr_B_AT; + } + else { + + SVmcPmm__HE38_Switch = 0; + } + + + if (sVcDtcAtr_D_TransMode != sVcSpMon_D_PtTrsmModReq) { + + X_SVmcPmm__HE49_UnitDelay = X_SVmcPmm__HE49_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE49_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_PwdTCMModeFail) { + + SVmcPmm__HE42_Switch = (X_SVmcPmm__HE49_UnitDelay > cVcVmcPmm_t_PwdTcmModeFail) && + yVcDtcAtr_B_AT; + } + else { + + SVmcPmm__HE42_Switch = 0; + } + + + xVcVmcPmm_B_PwdTrig = SVmcPmm__HE40_Switch || SVmcPmm__HE33_Switch || SVmcPmm__HE34_Switch + || SVmcPmm__HE35_Switch || SVmcPmm__HE37_Switch || SVmcPmm__HE38_Switch || + SVmcPmm__HE42_Switch; + + + xVcVmcPmm_B_PwdReset = (!(yVcPpmPsm_B_DriveCycleActive)) || ((CVmcPmm__HE1_D_IceStatus == + 1) || (CVmcPmm__HE1_D_IceStatus == 2)); + + + X_SVmcPmm__HE50_UnitDelay1 = (xVcVmcPmm_B_PwdPossible && xVcVmcPmm_B_PwdTrig) || + ((!(xVcVmcPmm_B_PwdReset)) && X_SVmcPmm__HE50_UnitDelay1); + + + if (cVcVmcPmm_B_UsePowerDownReq) { + + SVmcPmm__HE30_Switch = X_SVmcPmm__HE50_UnitDelay1; + } + else { + + SVmcPmm__HE30_Switch = 0; + } + + + if (SVmcPmm__HE30_Switch && SVmcPmm__HE26_LogicalOperator23) { + + X_SVmcPmm__HE45_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE45_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE45_UnitDelay; + } + + + yVcVmcPmm_B_BlockPushStartHMI = X_SVmcPmm__HE45_UnitDelay <= cVcVmcPmm_t_BlockPsmPwd; + #endif + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + + if (cVcVmcPmm_B_UseStartModeHybrid) { + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + UInt8 SVmcPmm__HE389_MinMax; + #endif + + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE390_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE391_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE392_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE393_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE394_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE395_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE399_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE400_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE401_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121M_StartModeHybrid_3 + static Bool X_SVmcPmm__HE402_UnitDelay1 = 0; + #endif + + + + + X_SVmcPmm__HE402_UnitDelay1 = (!(SVmcPmm__HE829_Switch)) || ((CVmcPmm__HE1_D_IceStatus + != 2) && X_SVmcPmm__HE402_UnitDelay1); + + + SVmcPmm__HE389__gicalOperator52 = X_SVmcPmm__HE402_UnitDelay1 && + (yVcDsePcr_B_PwrUpIceStrtReq || yVcVmcEm_B_PwrUpIceStrtReq || + (yVcVmcPmm_B_EngRunReqTrans && cVcVmcPmm_B_PwrUpIceStrtReqUseTrans)); + + + xVcVmcPmm_B_SafeISGPrio = yVcDsePcr_B_SafeEngStrtReq || ((yVcVmcPmm_B_EngRunReqFuel || + xVcVmcPmm_B_EngRunReqPsm || SVmcPmm__HE389__gicalOperator52) && (SVmcPmm__HE829_Switch + && (!(X_SVmcPmm__HE391_Delay)))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE393_Delay))) && ((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE395_Delay) && X_SVmcPmm__HE400_UnitDelay1); + + + X_SVmcPmm__HE400_UnitDelay1 = xVcVmcPmm_B_SafeISGPrio; + + + X_SVmcPmm__HE395_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE393_Delay = SVmcPmm__HE829_Switch; + + + X_SVmcPmm__HE391_Delay = SVmcPmm__HE829_Switch; + + + xVcVmcPmm_B_FastStart = yVcDeDmm_B_RespStartReq || (((yVcDtcEsc_B_Active && + cVcVmcPmm_B_StrtMdeEscCond) || ((sVcDtcAtr_n_TrgGear - sVcDtcIcl_n_IdleSpdBs) >= + cVcVmcPmm_n_StrtDiffFast)) && ((sVcVmcPmm_D_TransModeReq <= 2) || + cVcVmcPmm_B_StrtMdeSkipTrnMde)); + + + X_SVmcPmm__HE399_UnitDelay1 = xVcVmcPmm_B_FastStart || (((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE392_Delay) && X_SVmcPmm__HE399_UnitDelay1); + + + X_SVmcPmm__HE392_Delay = xVcVmcPmm_B_EngOnReqEng; + + + if (sVcEmiHeat_D_EngUseReq > sVcTmStrt_D_EngUseReq) { + SVmcPmm__HE389_MinMax = sVcEmiHeat_D_EngUseReq; + } + else { + SVmcPmm__HE389_MinMax = sVcTmStrt_D_EngUseReq; + } + + + xVcVmcPmm_B_SafeISG = (cVcVmcPmm_B_SerialModeSafeBISG && (SVmcPmm__HE389_MinMax == 1) && + (sVcVmcPmm_D_TransModeReq > 2)) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE390_Delay))) && ((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE394_Delay) && X_SVmcPmm__HE401_UnitDelay1); + + + X_SVmcPmm__HE401_UnitDelay1 = xVcVmcPmm_B_SafeISG; + + + X_SVmcPmm__HE394_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE390_Delay = SVmcPmm__HE829_Switch; + + + if (xVcVmcPmm_B_SafeISGPrio) { + + SVmcPmm__HE398_Switch = cVcVmcPmm_D_SafeBISG; + } + else { + + if (X_SVmcPmm__HE399_UnitDelay1) { + + SVmcPmm__HE398_Switch = cVcVmcPmm_D_FastBISG; + } + else { + + if (xVcVmcPmm_B_SafeISG) { + + SVmcPmm__HE398_Switch = cVcVmcPmm_D_SafeBISG; + } + else { + + SVmcPmm__HE398_Switch = cVcVmcPmm_D_NormalBISG; + } + } + } + } + #endif + #if VcVmcPmm__HEP7_1270_12VStartEnable_10 + + SVmcPmm__HE6_Merge3 = 1; + #endif + + + xVcVmcPmm_B_FastEngmtTrqDemand = yVcDeDmm_B_RespStartReq && ((!(yVcVmcTfa_B_CcActive)) || + cVcVmcPmm_B_IgnrCcActive) && (sVcScIn_X_AccPedalPos >= cVcVmcPmm_X_AccPedFastEngmtMin); + + + if (X_SVmcPmm__HE456_Del2) { + + rVcVmcPmm_Xd_AccPedalPos = 0.F; + } + else { + + Float32 SVmcPmm__HE456_MinMax1; + Float32 SVmcPmm__HE456_MinMax2; + Float32 SVmcPmm__HE456_Prod; + Float32 SVmcPmm__HE456_Prod1; + Float32 SVmcPmm__HE456_Sum; + Float32 SVmcPmm__HE456_Sum3; + + + SVmcPmm__HE456_Sum = sVcScIn_X_AccPedalPos - X_SVmcPmm__HE456_Del; + + + if (ts_VcVmcPmm__HEP7 > 1e-06F) { + + SVmcPmm__HE456_MinMax1 = ts_VcVmcPmm__HEP7; + } + else { + SVmcPmm__HE456_MinMax1 = 1e-06F; + } + + + if (SVmcPmm__HE456_MinMax1 != 0.F) { + SVmcPmm__HE456_Prod = SVmcPmm__HE456_Sum / SVmcPmm__HE456_MinMax1; + } + else { + if (SVmcPmm__HE456_Sum < 0.F) { + SVmcPmm__HE456_Prod = -3.402823466e+38F; + } + else { + SVmcPmm__HE456_Prod = 3.402823466e+38F; + } + } + + + SVmcPmm__HE456_Sum3 = ts_VcVmcPmm__HEP7 + cVcVmcPmm_tc_AccPedDer; + if (SVmcPmm__HE456_Sum3 > 1e-06F) { + SVmcPmm__HE456_MinMax2 = SVmcPmm__HE456_Sum3; + } + else { + SVmcPmm__HE456_MinMax2 = 1e-06F; + } + + + if (SVmcPmm__HE456_MinMax2 != 0.F) { + + SVmcPmm__HE456_Prod1 = ts_VcVmcPmm__HEP7 / SVmcPmm__HE456_MinMax2; + } + else { + + if (ts_VcVmcPmm__HEP7 < 0.F) { + SVmcPmm__HE456_Prod1 = -3.402823466e+38F; + } + else { + SVmcPmm__HE456_Prod1 = 3.402823466e+38F; + } + } + + + rVcVmcPmm_Xd_AccPedalPos = X_SVmcPmm__HE456_Del1 + ((SVmcPmm__HE456_Prod - + X_SVmcPmm__HE456_Del1) * SVmcPmm__HE456_Prod1); + } + + + X_SVmcPmm__HE456_Del = sVcScIn_X_AccPedalPos; + + + X_SVmcPmm__HE456_Del1 = rVcVmcPmm_Xd_AccPedalPos; + + + X_SVmcPmm__HE456_Del2 = 0; + + + xVcVmcPmm_B_FastEngmtPwrDemand = yVcVmcEm_B_RespStartReq && (rVcVmcPmm_Xd_AccPedalPos > + cVcVmcPmm_Xd_AccPedFastEngmtMin); + + + if (cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq) { + + SVmcPmm__HE458_Switch = X_SVmcPmm__HE6_UnitDelay10; + } + else { + + SVmcPmm__HE458_Switch = X_SVmcPmm__HE6_UnitDelay6; + } + + + xVcVmcPmm_B_FastEngmtIsgStrt = SVmcPmm__HE458_Switch && ((sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevATDrive) || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse)) && + (sVcVdm_Tq_BrkTqAtWhlsReq <= cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax); + + + SVmcPmm__HE226_LogicalOperator3 = (sVcVmcPmm_D_TransModeReq == 1) && ((sVcScDep_D_DrvgDirDes + == 1) || (sVcScDep_D_DrvgDirDes == 3)); + + + SVmcPmm__HE226_LogicalOperator6 = (xVcVmcPmm_B_FastEngmtTrqDemand || + xVcVmcPmm_B_FastEngmtPwrDemand || xVcVmcPmm_B_FastEngmtIsgStrt) && + SVmcPmm__HE226_LogicalOperator3; + + + if (yVcVmcPmm_B_CrShPathEnable) { + + X_SVmcPmm__HE461_UnitDelay = X_SVmcPmm__HE461_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE461_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_EngmtModFast = (SVmcPmm__HE226_LogicalOperator6 && (!(X_SVmcPmm__HE457_Delay))) || + (SVmcPmm__HE226_LogicalOperator3 && (X_SVmcPmm__HE461_UnitDelay <= + cVcVmcPmm_t_EngEngmtFastRstDelay) && X_SVmcPmm__HE460_UnitDelay1); + + + X_SVmcPmm__HE460_UnitDelay1 = xVcVmcPmm_B_EngmtModFast; + + + X_SVmcPmm__HE457_Delay = SVmcPmm__HE226_LogicalOperator6; + + + if (xVcVmcPmm_B_EngmtModFast) { + + sVcVmcPmm_D_EngagementMode = cVcVmcPmm_D_EngmtModFast; + } + else { + + sVcVmcPmm_D_EngagementMode = cVcVmcPmm_D_EngmtModSmooth; + } + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + + if (cVcVmcPmm_B_UseStartModeHybrid12V) { + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + UInt8 SVmcPmm__HE403_MinMax; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + Bool SVmcPmm__HE403__gicalOperator11; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + Bool SVmcPmm__HE403__gicalOperator12; + #endif + + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE404_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE405_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE406_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE407_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE408_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE409_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE410_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE411_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE412_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE413_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE414_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE415_Delay = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE422_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE423_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE424_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE425_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE426_UnitDelay1 = 0; + #endif + + + + + #if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 + static Bool X_SVmcPmm__HE427_UnitDelay1 = 0; + #endif + + + + + X_SVmcPmm__HE425_UnitDelay1 = (!(SVmcPmm__HE829_Switch)) || ((CVmcPmm__HE1_D_IceStatus + != 2) && X_SVmcPmm__HE425_UnitDelay1); + + + SVmcPmm__HE403__gicalOperator52 = X_SVmcPmm__HE425_UnitDelay1 && + (yVcDsePcr_B_PwrUpIceStrtReq || yVcVmcEm_B_PwrUpIceStrtReq || + xVcVmcPmm_B_EngRunReqEngClnt || (yVcVmcPmm_B_EngRunReqTrans && + cVcVmcPmm_B_PwrUpIceStrtReqUseTrans)); + + + X_SVmcPmm__HE424_UnitDelay1 = yVcDsePcr_B_SafeEngStrtReq || yVcFsdPc_B_RunDry || + (cVcVmcPmm_B_UseLastStrtMod && (rVcVmcPmm_D_StallAbortNum >= ((UInt8) + (cVcVmcPmm_D_AbortStart - 1)))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE409_Delay))) && ((!(xVcVmcPmm_B_EngOnReqEng)) || + X_SVmcPmm__HE411_Delay) && X_SVmcPmm__HE424_UnitDelay1); + + + X_SVmcPmm__HE411_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE409_Delay = SVmcPmm__HE829_Switch; + + + X_SVmcPmm__HE427_UnitDelay1 = ((sVcVmcPmm_D_EngagementMode == cVcVmcPmm_D_EngmtModFast) + && ((sVcDtcAtr_D_GearLevAT == cVcVmcPmm_D_GearLevRespStrtOK1) || (sVcDtcAtr_D_GearLevAT + == cVcVmcPmm_D_GearLevRespStrtOK2) || cVcVmcPmm_B_IgnoreGearLevRespStrt)) || + ((SVmcPmm__HE829_Switch || (!(X_SVmcPmm__HE405_Delay))) && + ((!(xVcVmcPmm_B_EngOnReqEng)) || X_SVmcPmm__HE408_Delay) && + X_SVmcPmm__HE427_UnitDelay1); + + + X_SVmcPmm__HE408_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE405_Delay = SVmcPmm__HE829_Switch; + + + if (sVcTmStrt_D_EngUseReq > sVcEmiHeat_D_EngUseReq) { + SVmcPmm__HE403_MinMax = sVcTmStrt_D_EngUseReq; + } + else { + SVmcPmm__HE403_MinMax = sVcEmiHeat_D_EngUseReq; + } + + + xVcVmcPmm_B_EmiStrt = (cVcVmcPmm_B_UseFirstStartMode && (sVcVmcPmm_D_TransModeReq > 2) + && (SVmcPmm__HE403_MinMax == 1)) || SVmcPmm__HE403__gicalOperator52 || + ((SVmcPmm__HE829_Switch || (!(X_SVmcPmm__HE404_Delay))) && + ((!(xVcVmcPmm_B_EngOnReqEng)) || X_SVmcPmm__HE410_Delay) && + X_SVmcPmm__HE422_UnitDelay1); + + + X_SVmcPmm__HE422_UnitDelay1 = xVcVmcPmm_B_EmiStrt; + + + X_SVmcPmm__HE410_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE404_Delay = SVmcPmm__HE829_Switch; + + + SVmcPmm__HE403__gicalOperator11 = ((!(SVmcPmm__HE829_Switch)) && X_SVmcPmm__HE412_Delay) + || (xVcVmcPmm_B_EngOnReqEng && (!(X_SVmcPmm__HE414_Delay))); + + + X_SVmcPmm__HE414_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE412_Delay = SVmcPmm__HE829_Switch; + + + X_SVmcPmm__HE426_UnitDelay1 = X_SVmcPmm__HE6_UnitDelay10 || + (((!(SVmcPmm__HE403__gicalOperator11)) || X_SVmcPmm__HE413_Delay) && + X_SVmcPmm__HE426_UnitDelay1); + + + X_SVmcPmm__HE413_Delay = SVmcPmm__HE403__gicalOperator11; + + + SVmcPmm__HE403__gicalOperator12 = ((!(SVmcPmm__HE829_Switch)) && X_SVmcPmm__HE406_Delay) + || (xVcVmcPmm_B_EngOnReqEng && (!(X_SVmcPmm__HE407_Delay))); + + + X_SVmcPmm__HE407_Delay = xVcVmcPmm_B_EngOnReqEng; + + + X_SVmcPmm__HE406_Delay = SVmcPmm__HE829_Switch; + + + X_SVmcPmm__HE423_UnitDelay1 = SVmcPmm__HE6_Merge3 || + (((!(SVmcPmm__HE403__gicalOperator12)) || X_SVmcPmm__HE415_Delay) && + X_SVmcPmm__HE423_UnitDelay1); + + + X_SVmcPmm__HE415_Delay = SVmcPmm__HE403__gicalOperator12; + + + if (X_SVmcPmm__HE424_UnitDelay1) { + + SVmcPmm__HE416_Switch = 0; + } + else { + + if (X_SVmcPmm__HE427_UnitDelay1) { + + SVmcPmm__HE416_Switch = 3; + } + else { + + if (xVcVmcPmm_B_EmiStrt) { + + SVmcPmm__HE416_Switch = 0; + } + else { + + if (X_SVmcPmm__HE426_UnitDelay1) { + + SVmcPmm__HE416_Switch = 2; + } + else { + + if (X_SVmcPmm__HE423_UnitDelay1) { + + if (cVcVmcPmm_B_UseStrtMde3All12vStrt) { + + SVmcPmm__HE416_Switch = 3; + } + else { + + SVmcPmm__HE416_Switch = 1; + } + } + else { + + SVmcPmm__HE416_Switch = cVcVmcPmm_D_StrtModDft; + } + } + } + } + } + } + + + SVmcPmm__HE222_Rescaler = 1; + #endif + + + SVmcPmm__HE223__ionalOperator11 = sVcScIn_X_AccPedalPos > cVcVmcPmm_X_StrtMdeAcc; + + + SVmcPmm__HE223__ionalOperator18 = CVmcPmm__HE1_D_IceStatus == 2; + + + if (SVmcPmm__HE223__ionalOperator18) { + + X_SVmcPmm__HE436_UnitDelay = X_SVmcPmm__HE436_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE436_UnitDelay = 0.F; + } + + + if (!(SVmcPmm__HE223__ionalOperator11)) { + + X_SVmcPmm__HE435_UnitDelay = X_SVmcPmm__HE435_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE435_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_StrtMdeAcc = (SVmcPmm__HE223__ionalOperator11 && + (!(SVmcPmm__HE223__ionalOperator18))) || ((X_SVmcPmm__HE436_UnitDelay <= + cVcVmcPmm_t_StrtMdeAccRun) && (X_SVmcPmm__HE435_UnitDelay <= cVcVmcPmm_t_StrtMdeAccRst) && + X_SVmcPmm__HE433_UnitDelay1); + + + X_SVmcPmm__HE433_UnitDelay1 = xVcVmcPmm_B_StrtMdeAcc; + + + SVmcPmm__HE223__tionalOperator1 = CVmcPmm__HE1_D_IceStatus == 2; + + + if (SVmcPmm__HE223__tionalOperator1) { + + X_SVmcPmm__HE434_UnitDelay = X_SVmcPmm__HE434_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE434_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_StrtMdeStopTrig) { + + SVmcPmm__HE428_Switch = (CVmcPmm__HE1_D_IceStatus == 3) && X_SVmcPmm__HE223_UnitDelay8; + } + else { + + SVmcPmm__HE428_Switch = X_SVmcPmm__HE434_UnitDelay > cVcVmcPmm_t_StrtMdeRunning; + } + + + X_SVmcPmm__HE223_UnitDelay8 = SVmcPmm__HE223__tionalOperator1; + + + xVcVmcPmm_B_StrtMdeRunning = (SVmcPmm__HE428_Switch && SVmcPmm__HE829_Switch) || + (SVmcPmm__HE829_Switch && X_SVmcPmm__HE432_UnitDelay1); + + + X_SVmcPmm__HE432_UnitDelay1 = xVcVmcPmm_B_StrtMdeRunning; + + + if (cVcVmcPmm_D_StartMode_swi) { + + X_SVmcPmm__HE3_UnitDelay2 = cVcVmcPmm_D_StartMode_dbi; + } + else { + + if (Vc_Pvc_Hw_B_Isg_CN >= 1 ) { + + if (!(SVmcPmm__HE222_Rescaler)) { + + X_SVmcPmm__HE3_UnitDelay2 = SVmcPmm__HE398_Switch; + } + else { + + X_SVmcPmm__HE3_UnitDelay2 = SVmcPmm__HE416_Switch; + } + } + else { + + if (xVcVmcPmm_B_StrtMdeRunning) { + + if (cVcVmcPmm_B_StrtMdeSet) { + + if (xVcVmcPmm_B_StrtMdeAcc) { + + X_SVmcPmm__HE3_UnitDelay2 = 2; + } + else { + + X_SVmcPmm__HE3_UnitDelay2 = 1; + } + } + else { + + X_SVmcPmm__HE3_UnitDelay2 = 0; + } + } + else { + + X_SVmcPmm__HE3_UnitDelay2 = 0; + } + } + } + + + X_SVmcPmm__HE6_UnitDelay = X_SVmcPmm__HE3_UnitDelay2; + + + X_SVmcPmm__HE170_UnitDelay3 = X_SVmcPmm__HE3_UnitDelay2; + + + X_SVmcPmm__HE6_UnitDelay1 = X_SVmcPmm__HE3_UnitDelay2; + + + sVcVmcPmm_D_StartMode = X_SVmcPmm__HE3_UnitDelay2; + + + yVcVmcPmm_B_StallPwdReq = X_SVmcPmm__HE172_UnitDelay8; + + + yVcVmcPmm_B_FCAdaptReq = SVmcPmm__HE159_LogOp3; + + + sVcVmcPmm_D_IceStatus = CVmcPmm__HE1_D_IceStatus; + + + yVcVmcPmm_B_EngOnReq = X_SVmcPmm__HE6_UnitDelay14; + + + yVcVmcPmm_B_FastIsgStopReq = X_SVmcPmm__HE6_UnitDelay5; + + + yVcVmcPmm_B_IsgStrtPahReq = X_SVmcPmm__HE6_UnitDelay6; + + + yVcVmcPmm_B_EradPathEnable = X_SVmcPmm__HE6_UnitDelay8; + + + yVcVmcPmm_B_IsgPathEnable = X_SVmcPmm__HE6_UnitDelay13; + + + yVcVmcPmm_B_EfadPathEnable = X_SVmcPmm__HE6_UnitDelay4; + + + yVcVmcPmm_B_IsgStartReq = X_SVmcPmm__HE6_UnitDelay10; + + + yVcVmcPmm_B_12VStartEnable = SVmcPmm__HE6_Merge3; + + + yVcVmcPmm_B_IceStall = X_SVmcPmm__HE590_UnitDelay1; + + + if (SVmcPmm__HE172_LogOp1) { + + X_SVmcPmm__HE588_UnitDelay = X_SVmcPmm__HE588_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE588_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_StallRunUnintd = X_SVmcPmm__HE588_UnitDelay > cVcVmcPmm_t_StallRunUnintd; + + + if (cVcVmcPmm_B_StallRunUnintd) { + + SVmcPmm__HE532_Switch = xVcVmcPmm_B_StallRunUnintd; + } + else { + + SVmcPmm__HE532_Switch = 0; + } + + + SVmcPmm__HE172__ionalOperator20 = CVmcPmm__HE1_D_IceStatus == 2; + + + X_SVmcPmm__HE589_UnitDelay1 = SVmcPmm__HE532_Switch || (yVcPpmRc_B_ShutOffReq && + cVcVmcPmm_B_UnintdStallRcShOff) || (((!(SVmcPmm__HE172__ionalOperator20)) || + X_SVmcPmm__HE526_Delay) && SVmcPmm__HE829_Switch && X_SVmcPmm__HE589_UnitDelay1); + + + X_SVmcPmm__HE526_Delay = SVmcPmm__HE172__ionalOperator20; + + + yVcVmcPmm_B_UnintdStall = X_SVmcPmm__HE589_UnitDelay1; + + + yVcVmcPmm_B_PwrUpIceStrtReq = SVmcPmm__HE389__gicalOperator52 || + SVmcPmm__HE403__gicalOperator52; + + + if (xVcVmcPmm_B_EngOnOff) { + + Aux_U32 = 1; + } + else { + + Aux_U32 = 0; + } + + + if (xVcVmcPmm_B_EngRunReqDriver) { + + SVmcPmm__HE265_Switch = 2; + } + else { + + SVmcPmm__HE265_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqPsm) { + + SVmcPmm__HE266_Switch = 4; + } + else { + + SVmcPmm__HE266_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqEm) { + + SVmcPmm__HE267_Switch = 8; + } + else { + + SVmcPmm__HE267_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqTm) { + + SVmcPmm__HE269_Switch = 16; + } + else { + + SVmcPmm__HE269_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqDep) { + + SVmcPmm__HE270_Switch = 32; + } + else { + + SVmcPmm__HE270_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqTrans) { + + SVmcPmm__HE271_Switch = 64; + } + else { + + SVmcPmm__HE271_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqClim) { + + SVmcPmm__HE272_Switch = 128; + } + else { + + SVmcPmm__HE272_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqPcr) { + + SVmcPmm__HE273_Switch = 256; + } + else { + + SVmcPmm__HE273_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqFCAdapt) { + + SVmcPmm__HE274_Switch = 512; + } + else { + + SVmcPmm__HE274_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqBrake) { + + SVmcPmm__HE275_Switch = 1024; + } + else { + + SVmcPmm__HE275_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqFuel) { + + SVmcPmm__HE276_Switch = 2048; + } + else { + + SVmcPmm__HE276_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqIsg) { + + SVmcPmm__HE277_Switch = 4096; + } + else { + + SVmcPmm__HE277_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqStabCtrl) { + + SVmcPmm__HE278_Switch = 8192; + } + else { + + SVmcPmm__HE278_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqDrLeave) { + + SVmcPmm__HE280_Switch = 16384; + } + else { + + SVmcPmm__HE280_Switch = 0; + } + + + if (xVcVmcPmm_B_RunReqIceStall) { + + SVmcPmm__HE281_Switch = 32768; + } + else { + + SVmcPmm__HE281_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqChas) { + + SVmcPmm__HE283_Switch = 131072; + } + else { + + SVmcPmm__HE283_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqObd) { + + SVmcPmm__HE286_Switch = 262144; + } + else { + + SVmcPmm__HE286_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqRc) { + + SVmcPmm__HE287_Switch = 524288; + } + else { + + SVmcPmm__HE287_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqSapp) { + + SVmcPmm__HE288_Switch = 1048576; + } + else { + + SVmcPmm__HE288_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqEms) { + + SVmcPmm__HE289_Switch = 2097152; + } + else { + + SVmcPmm__HE289_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqEmLv) { + + SVmcPmm__HE291_Switch = 4194304; + } + else { + + SVmcPmm__HE291_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqRemote) { + + SVmcPmm__HE292_Switch = 8388608; + } + else { + + SVmcPmm__HE292_Switch = 0; + } + + + if (yVcVmcPmm_B_EngRunReqFanAfterrun) { + + SVmcPmm__HE293_Switch = 16777216; + } + else { + + SVmcPmm__HE293_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqCEC) { + + SVmcPmm__HE297_Switch = 33554432; + } + else { + + SVmcPmm__HE297_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqEngClnt) { + + SVmcPmm__HE303_Switch = 67108864; + } + else { + + SVmcPmm__HE303_Switch = 0; + } + + + if (xVcVmcPmm_B_EngRunReqMaxTime) { + + SVmcPmm__HE304_Switch = 67108864; + } + else { + + SVmcPmm__HE304_Switch = 0; + } + Aux_U32 += SVmcPmm__HE265_Switch; + Aux_U32 += SVmcPmm__HE266_Switch; + Aux_U32 += SVmcPmm__HE267_Switch; + Aux_U32 += SVmcPmm__HE269_Switch; + Aux_U32 += SVmcPmm__HE270_Switch; + Aux_U32 += SVmcPmm__HE271_Switch; + Aux_U32 += SVmcPmm__HE272_Switch; + Aux_U32 += SVmcPmm__HE273_Switch; + Aux_U32 += SVmcPmm__HE274_Switch; + Aux_U32 += SVmcPmm__HE275_Switch; + Aux_U32 += SVmcPmm__HE276_Switch; + Aux_U32 += SVmcPmm__HE277_Switch; + Aux_U32 += SVmcPmm__HE278_Switch; + Aux_U32 += SVmcPmm__HE280_Switch; + Aux_U32 += SVmcPmm__HE281_Switch; + Aux_U32 += SVmcPmm__HE283_Switch; + Aux_U32 += SVmcPmm__HE286_Switch; + Aux_U32 += SVmcPmm__HE287_Switch; + Aux_U32 += SVmcPmm__HE288_Switch; + Aux_U32 += SVmcPmm__HE289_Switch; + Aux_U32 += SVmcPmm__HE291_Switch; + Aux_U32 += SVmcPmm__HE292_Switch; + Aux_U32 += SVmcPmm__HE293_Switch; + Aux_U32 += SVmcPmm__HE297_Switch; + Aux_U32 += SVmcPmm__HE303_Switch; + rVcVmcPmm_D_EngRunReqLogg = Aux_U32 + SVmcPmm__HE304_Switch; + + + sVcVmcPmm_D_EngRunReqLogg = rVcVmcPmm_D_EngRunReqLogg; + + + sVcVmcPmm_Z_HillGradientDeg = SVmcPmm__HE153__HillGradAcc2deg; + + + yVcVmcPmm_B_PowerDownReq = SVmcPmm__HE30_Switch || xVcVmcPmm_B_DrLeavePowerDownReq; + #if VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 + + if (xVcVmcPmm_B_EngRunReqFCAdapt) { + + X_SVmcPmm__HE446_UnitDelay = X_SVmcPmm__HE446_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE446_UnitDelay = 0.F; + } + + + if (xVcVmcPmm_B_EngRunReqPcr || yVcVmcPmm_B_EngRunReqClim || xVcVmcPmm_B_EngRunReqPsm || + yVcVmcPmm_B_EngRunReqFuel) { + + X_SVmcPmm__HE447_UnitDelay = X_SVmcPmm__HE447_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE447_UnitDelay = 0.F; + } + + + if (yVcVmcPmm_B_EngRunReqBrake) { + + X_SVmcPmm__HE449_UnitDelay = X_SVmcPmm__HE449_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE449_UnitDelay = 0.F; + } + + + if (!(xVcVmcPmm_B_EngRunReqEm)) { + + X_SVmcPmm__HE448_UnitDelay = X_SVmcPmm__HE448_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE448_UnitDelay = 0.F; + } + + + X_SVmcPmm__HE443_UnitDelay1 = ((X_SVmcPmm__HE448_UnitDelay > cVcVmcPmm_t_RunReqObdDelayHmi) + && yVcVmcPmm_B_EngRunReqObd) || (yVcVmcPmm_B_EngRunReqObd && + X_SVmcPmm__HE443_UnitDelay1); + + + X_SVmcPmm__HE442_UnitDelay1 = ((sVcScIn_v_VehSpdLgt >= cVcVmcPmm_v_TransRunRqDlyMaxHmi) && + yVcVmcPmm_B_EngRunReqTrans) || (yVcVmcPmm_B_EngRunReqTrans && + X_SVmcPmm__HE442_UnitDelay1); + + + if (yVcVmcPmm_B_EngRunReqTrans) { + + X_SVmcPmm__HE445_UnitDelay = X_SVmcPmm__HE445_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE445_UnitDelay = 0.F; + } + + + xVcVmcPmm_B_HeatUpEOP = (yVcVmcPmm_B_EngRunReqTrans && (SVmcPmm__HE829_Switch && + (!(X_SVmcPmm__HE439_UnitDelay1)))) || ((SVmcPmm__HE829_Switch || + (!(X_SVmcPmm__HE437_Delay))) && (yVcVmcPmm_B_EngRunReqTrans || + (!(X_SVmcPmm__HE438_Delay))) && X_SVmcPmm__HE444_UnitDelay1); + + + X_SVmcPmm__HE444_UnitDelay1 = xVcVmcPmm_B_HeatUpEOP; + + + X_SVmcPmm__HE438_Delay = yVcVmcPmm_B_EngRunReqTrans; + + + X_SVmcPmm__HE437_Delay = SVmcPmm__HE829_Switch; + + + X_SVmcPmm__HE439_UnitDelay1 = SVmcPmm__HE829_Switch; + + + yVcVmcPmm_B_RunReqSystemHmi = ((yVcTmStrt_B_EngRunTmLong || yVcCmnEngRunReqCEC_B_ReqLong) + && yVcVmcPmm_B_EngRunReqTot) || (X_SVmcPmm__HE446_UnitDelay > + cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi) || (X_SVmcPmm__HE447_UnitDelay > + cVcVmcPmm_t_RunReqOnDelayHmi) || (X_SVmcPmm__HE449_UnitDelay > + cVcVmcPmm_t_BrakeRunReqOnDelayHmi) || X_SVmcPmm__HE443_UnitDelay1 || + (X_SVmcPmm__HE442_UnitDelay1 || (X_SVmcPmm__HE445_UnitDelay > + cVcVmcPmm_t_TransRunReqOnDelayHmi)) || xVcVmcPmm_B_HeatUpEOP; + + + yVcVmcPmm_B_RunReqDriverHmi = xVcVmcPmm_B_EngRunReqDriver || xVcVmcPmm_B_EngRunReqEm; + #endif + + + xVcVmcPmm_B_TrailerPresent = yVcTrm_B_TrlrPrsnt || + yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt; + #if Vc_Pvc_Sw_B_StopStart + + if (cVcVmcPmm_B_SsActHood) { + + yVcVmcPmm_B_SsActHoodHMI = (sVcCem_D_HoodSts == 1) && (sVcVmm_D_CarModSts1 != 5); + } + else { + + yVcVmcPmm_B_SsActHoodHMI = 0; + } + + + SVmcPmm__HE90_Rel = cVcVmcPmm_Te_AmbHighH <= sVcEc_Te_Amb; + + + SVmcPmm__HE90_Rel1 = sVcEc_Te_Amb <= cVcVmcPmm_Te_AmbHighL; + + + xVcVmcPmm_B_AmbTempH = (SVmcPmm__HE90_Rel && (!(SVmcPmm__HE90_Rel1))) || + ((!(SVmcPmm__HE90_Rel)) && (!(SVmcPmm__HE90_Rel1)) && X_SVmcPmm__HE90_UnitDelay); + + + X_SVmcPmm__HE90_UnitDelay = xVcVmcPmm_B_AmbTempH; + + + SVmcPmm__HE91_Rel = cVcVmcPmm_Te_AmbLowH <= sVcEc_Te_Amb; + + + SVmcPmm__HE91_Rel1 = sVcEc_Te_Amb <= cVcVmcPmm_Te_AmbLowL; + + + X_SVmcPmm__HE91_UnitDelay = (SVmcPmm__HE91_Rel && (!(SVmcPmm__HE91_Rel1))) || + ((!(SVmcPmm__HE91_Rel)) && (!(SVmcPmm__HE91_Rel1)) && X_SVmcPmm__HE91_UnitDelay); + + + xVcVmcPmm_B_AmbTempL = !(X_SVmcPmm__HE91_UnitDelay); + + + if ((sVcEc_Qf_TeAmb == 3) && cVcVmcPmm_B_SsActTemp) { + + yVcVmcPmm_B_SsAmbFault = xVcVmcPmm_B_AmbTempH || xVcVmcPmm_B_AmbTempL; + } + else { + + yVcVmcPmm_B_SsAmbFault = 0; + } + + + if (cVcVmcPmm_B_SsActTempStrt) { + + SVmcPmm__HE66_Switch = yVcVmcPmm_B_SsAmbFault; + } + else { + + SVmcPmm__HE66_Switch = yVcVmcPmm_B_SsAmbFault && ((CVmcPmm__HE1_D_IceStatus == 1) || + (CVmcPmm__HE1_D_IceStatus == 2)); + } + + + yVcVmcPmm_B_SsActAmbHMI = SVmcPmm__HE66_Switch && cVcVmcPmm_B_UseSsActTemp; + + + SVmcPmm__HE92_Rel = cVcVmcPmm_p_AmbH <= sVcEc_p_Amb; + + + SVmcPmm__HE92_Rel1 = sVcEc_p_Amb <= cVcVmcPmm_p_AmbL; + + + X_SVmcPmm__HE92_UnitDelay = (SVmcPmm__HE92_Rel && (!(SVmcPmm__HE92_Rel1))) || + ((!(SVmcPmm__HE92_Rel)) && (!(SVmcPmm__HE92_Rel1)) && X_SVmcPmm__HE92_UnitDelay); + + + xVcVmcPmm_B_AmbPresLow = !(X_SVmcPmm__HE92_UnitDelay); + + + if (cVcVmcPmm_B_SsActAmbPres) { + + yVcVmcPmm_B_SsAltitudeFault = xVcVmcPmm_B_AmbPresLow; + } + else { + + yVcVmcPmm_B_SsAltitudeFault = 0; + } + + + X_SVmcPmm__HE93_UnitDelay1 = (SVmcPmm__HE153__HillGradAcc2deg >= + cVcVmcPmm_Z_SsActTrailerUpHillH) || ((SVmcPmm__HE153__HillGradAcc2deg > + cVcVmcPmm_Z_SsActTrailerUpHillL) && X_SVmcPmm__HE93_UnitDelay1); + + + if (cVcVmcPmm_B_SsActTrailer) { + + yVcVmcPmm_B_SsActTrailerHMI = X_SVmcPmm__HE93_UnitDelay1 && xVcVmcPmm_B_TrailerPresent; + } + else { + + yVcVmcPmm_B_SsActTrailerHMI = 0; + } + + + if (!(yVcCem_B_BltLockStAtDrvr)) { + + X_SVmcPmm__HE96_UnitDelay = X_SVmcPmm__HE96_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE96_UnitDelay = 0.F; + } + + + SVmcPmm__HE27___tionalOperator1 = sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark; + + + xVcVmcPmm_B_SsActSeatBeltInhib = (X_SVmcPmm__HE96_UnitDelay > cVcVmcPmm_t_SsActSeatBelt) || + ((!(yVcCem_B_BltLockStAtDrvr)) && (!(SVmcPmm__HE27___tionalOperator1))); + + + if (cVcVmcPmm_B_SsActSeatBeltNoSeq) { + + xVcVmcPmm_B_SsActSeatBeltAllow = yVcCem_B_BltLockStAtDrvr; + } + else { + + xVcVmcPmm_B_SsActSeatBeltAllow = (yVcCem_B_BltLockStAtDrvr && + (SVmcPmm__HE27___tionalOperator1 && (!(X_SVmcPmm__HE94_UnitDelay1)))) || + ((!(SVmcPmm__HE27___tionalOperator1)) && yVcCem_B_BltLockStAtDrvr); + } + + + X_SVmcPmm__HE94_UnitDelay1 = SVmcPmm__HE27___tionalOperator1; + + + xVcVmcPmm_B_SRSeatBeltAT = xVcVmcPmm_B_SsActSeatBeltInhib || + ((!(xVcVmcPmm_B_SsActSeatBeltAllow)) && X_SVmcPmm__HE97_UnitDelay1); + + + X_SVmcPmm__HE97_UnitDelay1 = xVcVmcPmm_B_SRSeatBeltAT; + + + if (cVcVmcPmm_B_SsActSeatBelt) { + + if (yVcDtcAtr_B_AT && cVcVmcPmm_B_SsActSeatBeltPrkBlock) { + + yVcVmcPmm_B_SsActSeatBeltHMI = xVcVmcPmm_B_SRSeatBeltAT; + } + else { + + yVcVmcPmm_B_SsActSeatBeltHMI = !(yVcCem_B_BltLockStAtDrvr); + } + } + else { + + yVcVmcPmm_B_SsActSeatBeltHMI = 0; + } + + + if (!(yVcCem_B_BltLockStAtDrvr)) { + + SVmcPmm__HE98_Switch = cVcVmcPmm_B_SsActDoorNoBelt; + } + else { + + SVmcPmm__HE98_Switch = ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATPark) && + cVcVmcPmm_B_SsActDoorBeltP) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATReverse) && + cVcVmcPmm_B_SsActDoorBeltR) || ((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATNeutral) && + cVcVmcPmm_B_SsActDoorBeltN) || (((sVcDtcAtr_D_GearLevAT == cVc_D_GearLevATDrive) || + (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevAT4th) || (sVcDtcAtr_D_GearLevAT == + cVc_D_GearLevAT3rd) || (sVcDtcAtr_D_GearLevAT == cVc_D_GearLevAT2nd)) && + cVcVmcPmm_B_SsActDoorBeltD); + } + + + xVcVmcPmm_B_SsActDriverLeaving = yVcDtcAtr_B_AT && xVcVmcPmm_B_DrDoorOpen && + SVmcPmm__HE98_Switch; + + + if (cVcVmcPmm_B_SsActDriverLeaving) { + + yVcVmcPmm_B_SsActDoorOpenHMI = xVcVmcPmm_B_SsActDriverLeaving; + } + else { + + yVcVmcPmm_B_SsActDoorOpenHMI = 0; + } + + + if (yVcVdm_B_AbsCtrlActv) { + + X_SVmcPmm__HE77_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE77_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE77_UnitDelay; + } + + + if (cVcVmcPmm_B_SsActAbs) { + + SVmcPmm__HE60_Switch = X_SVmcPmm__HE77_UnitDelay <= cVcVmcPmm_t_SsActAbs; + } + else { + + SVmcPmm__HE60_Switch = 0; + } + + + if (sVcVdm_D_EngRunngReqByBrk == 1) { + + X_SVmcPmm__HE76_UnitDelay = 0.F; + } + else { + + X_SVmcPmm__HE76_UnitDelay = ts_VcVmcPmm__HEP7 + X_SVmcPmm__HE76_UnitDelay; + } + + + if (cVcVmcPmm_B_SsActBrk) { + + SVmcPmm__HE62_Switch = X_SVmcPmm__HE76_UnitDelay <= cVcVmcPmm_t_SsActBrk; + } + else { + + SVmcPmm__HE62_Switch = 0; + } + + + if (sVcDtcAtr_D_TransMode != sVcSpMon_D_PtTrsmModReq) { + + X_SVmcPmm__HE78_UnitDelay = X_SVmcPmm__HE78_UnitDelay + ts_VcVmcPmm__HEP7; + } + else { + + X_SVmcPmm__HE78_UnitDelay = 0.F; + } + + + if (cVcVmcPmm_B_SsActRcfSetAlt) { + + SVmcPmm__HE73_Switch = yVcEc_B_SsRcfSetAlt; + } + else { + + SVmcPmm__HE73_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActRcfSet) { + + SVmcPmm__HE74_Switch = yVcEc_B_SsRcfSet; + } + else { + + SVmcPmm__HE74_Switch = 0; + } + + + SVmcPmm__HE27_LogicalOperator25 = (sVcDeDmm_D_DrvMode == cVcVmcPmm_D_SsActDrMd1) || + (sVcDeDmm_D_DrvMode == cVcVmcPmm_D_SsActDrMd2) || (sVcDeDmm_D_DrvMode == + cVcVmcPmm_D_SsActDrMd3); + + + if (cVcVmcPmm_B_SsActDrMdInv) { + + yVcVmcPmm_B_SsActDrMdHMI = !(SVmcPmm__HE27_LogicalOperator25); + } + else { + + yVcVmcPmm_B_SsActDrMdHMI = SVmcPmm__HE27_LogicalOperator25; + } + + + if (cVcVmcPmm_B_UseSsActive) { + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE55_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE56_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE57_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE59_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE61_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE70_Switch; + #endif + + + + + #if Vc_Pvc_Sw_B_StopStart + Bool SVmcPmm__HE71_Switch; + #endif + + + + + if (cVcVmcPmm_B_SsActGpSs) { + + SVmcPmm__HE56_Switch = sVcGp_D_StopStart != 2; + } + else { + + SVmcPmm__HE56_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActNtrl) { + + SVmcPmm__HE57_Switch = (!(yVcScDep_B_NeutralMTValid)) && (!(yVcDtcAtr_B_AT)); + } + else { + + SVmcPmm__HE57_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActEcoMde) { + + SVmcPmm__HE61_Switch = !(yVcDeDmm_B_EcoModeSs); + } + else { + + SVmcPmm__HE61_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActTransFailure) { + + SVmcPmm__HE55_Switch = yVcTcm_B_TrsmNeutFailr && yVcDtcAtr_B_AT; + } + else { + + SVmcPmm__HE55_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActTCMNodeAlive) { + + SVmcPmm__HE70_Switch = yVcDtcAtr_B_AT && (!(yVcEc_B_TCMNodeAlive)); + } + else { + + SVmcPmm__HE70_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActTCMModeFail) { + + SVmcPmm__HE71_Switch = yVcDtcAtr_B_AT && (X_SVmcPmm__HE78_UnitDelay > + cVcVmcPmm_t_SsActTcmModeFail); + } + else { + + SVmcPmm__HE71_Switch = 0; + } + + + if (cVcVmcPmm_B_SsActTipSport) { + + SVmcPmm__HE59_Switch = yVcDeDmm_B_TipSport; + } + else { + + SVmcPmm__HE59_Switch = 0; + } + + + yVcVmcPmm_B_SsActive = (!(SVmcPmm__HE60_Switch)) && (!(SVmcPmm__HE62_Switch)) && + (!(SVmcPmm__HE56_Switch)) && (!(SVmcPmm__HE57_Switch)) && (!(SVmcPmm__HE61_Switch)) && + (!(yVcVmcPmm_B_SsActDoorOpenHMI)) && (!(yVcVmcPmm_B_SsActSeatBeltHMI)) && + (!(yVcVmcPmm_B_SsActAmbHMI)) && (!(yVcVmcPmm_B_SsActTrailerHMI)) && + (!(SVmcPmm__HE55_Switch)) && (!(SVmcPmm__HE70_Switch)) && (!(SVmcPmm__HE71_Switch)) && + (!(SVmcPmm__HE73_Switch)) && (!(SVmcPmm__HE74_Switch)) && + (!(yVcVmcPmm_B_SsAltitudeFault)) && (!(SVmcPmm__HE59_Switch)) && + (!(yVcVmcPmm_B_SsActHoodHMI)) && (!(yVcVmcPmm_B_SsActDrMdHMI)); + } + else { + + yVcVmcPmm_B_SsActive = 1; + } + + + yVcVmcPmm_B_SsRcfAct = (!(yVcVmcPmm_B_SsActive)) && (SVmcPmm__HE73_Switch || + SVmcPmm__HE74_Switch); + + + yVcVmcPmm_B_SsActAbsHMI = SVmcPmm__HE60_Switch || SVmcPmm__HE62_Switch; + #endif + } + else { + + SVmcPmm__HE156_RSWE = 0; + + + SVmcPmm__HE157_RSWE = 0; + } +} +#include "CVC_CODE_END.h" + + +#include "CVC_CODE_START.h" +void INIT_SVmcPmm_____FuelCutRequest(void) +{ + + X_SVmcPmm__HE159_UnitDelay1 = 0; + + + X_SVmcPmm__HE160_UnitDelay1 = 0; + + + X_SVmcPmm__HE161_UnitDelay = 0.F; +} +#include "CVC_CODE_END.h" + + +#include "CVC_CODE_START.h" +void INIT_SVmcPmm____verLeaveVehicle(void) +{ + + X_SVmcPmm__HE163_UnitDelay = 0.F; + + + X_SVmcPmm__HE164_UnitDelay = 0.F; + + + X_SVmcPmm__HE165_UnitDelay = 0.F; +} +#include "CVC_CODE_END.h" + + +#endif + + diff --git a/tests/pybuild/cnfg_files/VcVmcPmm__HEP7_OPortMvd_LocalDefs.h b/tests/pybuild/cnfg_files/VcVmcPmm__HEP7_OPortMvd_LocalDefs.h new file mode 100644 index 0000000..a1ef831 --- /dev/null +++ b/tests/pybuild/cnfg_files/VcVmcPmm__HEP7_OPortMvd_LocalDefs.h @@ -0,0 +1,17 @@ +#include "VcCodeSwDefines.h" + +#define VcVmcPmm__HEP7_1140_Brake_1 (Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem) +#define VcVmcPmm__HEP7_1150_Gradient_estimation_2 (Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem) +#define VcVmcPmm__HEP7_121M_StartModeHybrid_3 (Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0) +#define VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 (Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor) +#define VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5 (Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad) +#define VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 (Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad) +#define VcVmcPmm__HEP7_1224_EngageReqHybrid_7 (Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad) +#define VcVmcPmm__HEP7_1243_Isg_8 (Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad) +#define VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 (Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg) +#define VcVmcPmm__HEP7_1270_12VStartEnable_10 (Vc_Pvc_Hw_B_12VStartMotor && !Vc_Pvc_Hw_B_Efad && !Vc_Pvc_Hw_B_Erad && !Vc_Pvc_Hw_B_Isg) +#define VcVmcPmm__HEP7_1000_Hev_11 (Vc_D_CodegenHev>0) +#define Vc_Pvc_Hw_B_Isg_CN (Vc_Pvc_Hw_B_Isg) +#define Vc_Pvc_Hw_B_HVSystem_CN (Vc_Pvc_Hw_B_HVSystem) +#define Vc_Pvc_Hw_B_Efad_CN (Vc_Pvc_Hw_B_Efad) +#define Vc_Pvc_Hw_B_Erad_CN (Vc_Pvc_Hw_B_Erad) diff --git a/tests/pybuild/cnfg_files/conf.local/interface_data_types.yml b/tests/pybuild/cnfg_files/conf.local/interface_data_types.yml new file mode 100644 index 0000000..2358468 --- /dev/null +++ b/tests/pybuild/cnfg_files/conf.local/interface_data_types.yml @@ -0,0 +1,33 @@ +######################################################## +# +# Defines user defined data types, such as enumerations +# +# +######################################################## +types: + enums: + EnumTest: + - item: ClimaOff + in: ENUMTEST_CLIMAOFF + out: namespace::types::EnumTest::ClimaOff + - item: ClimaHeatgToHvacAndHvBatt + in: ENUMTEST_CLIMAHEATGTOHVACANDHVBATT + out: namespace::types::EnumTest::ClimaHeatgToHvacAndHvBatt + - item: ClimaHeatgToHvBatt + in: ENUMTEST_CLIMAHEATGTOHVBATT + out: namespace::types::EnumTest::ClimaHeatgToHvBatt + - item: ClimaHeatgToHvac + in: ENUMTEST_CLIMAHEATGTOHVAC + out: namespace::types::EnumTest::ClimaHeatgToHvac + - item: ClimaFlow + in: ENUMTEST_CLIMAFLOW + out: namespace::types::EnumTest::ClimaFlow + - item: Degas + in: ENUMTEST_DEGAS + out: namespace::types::EnumTest::Degas + - item: FailSafe + in: ENUMTEST_FAILSAFE + out: namespace::types::EnumTest::FailSafe + - default: ClimaOff + in: ENUMTEST_CLIMAOFF + out: namespace::types::EnumTest::ClimaOff diff --git a/tests/pybuild/cnfg_files/config_VcVmcPmm__HEP7.json b/tests/pybuild/cnfg_files/config_VcVmcPmm__HEP7.json new file mode 100644 index 0000000..c900bcf --- /dev/null +++ b/tests/pybuild/cnfg_files/config_VcVmcPmm__HEP7.json @@ -0,0 +1,17196 @@ +{ + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": { + "yVcVmcPmm_B_EngOnReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngOnReq", + "name": "yVcVmcPmm_B_EngOnReq", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine on request from CVC, 1 = Engine on 0 = Engine off", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EradClutchReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradClutchReq", + "name": "yVcVmcPmm_B_EradClutchReq", + "configs": [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Request state of ERAD disconnect clutch", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_TransModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_TransModeReq", + "name": "sVcVmcPmm_D_TransModeReq", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_CrShPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_CrShPathEnable", + "name": "yVcVmcPmm_B_CrShPathEnable", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "enables the crankshaft path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EradPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradPathEnable", + "name": "yVcVmcPmm_B_EradPathEnable", + "configs": [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "enables the erad path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_IceStatus": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IceStatus", + "name": "sVcVmcPmm_D_IceStatus", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Current status of the ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_WhlMotSysModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EradModeReq", + "name": "sVcVmcPmm_D_WhlMotSysModReq", + "configs": [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Mode request for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_IsgModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IsgModeReq", + "name": "sVcVmcPmm_D_IsgModReq", + "configs": [ + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Mode request for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_PowerDownReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_PowerDownReq", + "name": "yVcVmcPmm_B_PowerDownReq", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqTot": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngRunReqTot", + "name": "yVcVmcPmm_B_EngRunReqTot", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsActive", + "name": "yVcVmcPmm_B_SsActive", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsRcfAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsRcfAct", + "name": "yVcVmcPmm_B_SsRcfAct", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Flag to indicate the reconfiguration has been activated (Stop/Start request inhibited).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqEms": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms", + "name": "yVcVmcPmm_B_EngRunReqEms", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms1", + "name": "yVcVmcPmm_B_EngRunReqEmLv", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms2", + "name": "yVcVmcPmm_B_EngRunReqClim", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_StallPwdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_StallPwdReq", + "name": "yVcVmcPmm_B_StallPwdReq", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Stall power down request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqBrake": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms3", + "name": "yVcVmcPmm_B_EngRunReqBrake", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_IceStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_IceStall", + "name": "yVcVmcPmm_B_IceStall", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_StartMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_StartMode", + "name": "sVcVmcPmm_D_StartMode", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Type of requested start. (0=Normal, 1=Fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsAmbFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAmbFault", + "name": "yVcVmcPmm_B_SsAmbFault", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Ambient temp out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EngRunReqHG": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqHG", + "name": "sVcVmcPmm_D_EngRunReqHG", + "configs": [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request for hill gradient", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EngRunReqBrkVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac", + "name": "sVcVmcPmm_D_EngRunReqBrkVac", + "configs": [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request brake vacuum", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqFanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms4", + "name": "yVcVmcPmm_B_EngRunReqFanAfterrun", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqTrans": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms5", + "name": "yVcVmcPmm_B_EngRunReqTrans", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms7", + "name": "yVcVmcPmm_B_12VStartEnable", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_IsgStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms8", + "name": "yVcVmcPmm_B_IsgStartReq", + "configs": [ + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Isg in torque control", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_FCAdaptReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms9", + "name": "yVcVmcPmm_B_FCAdaptReq", + "configs": [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine request fuel adaption", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac1", + "name": "yVcVmcPmm_B_EngRunReqTm", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine running request from Tm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_RunReqDriverHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms10", + "name": "yVcVmcPmm_B_RunReqDriverHmi", + "configs": [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Driver run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_RunReqSystemHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac2", + "name": "yVcVmcPmm_B_RunReqSystemHmi", + "configs": [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "System run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_Z_HillGradientDeg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_Z_HillGradientDeg", + "name": "sVcVmcPmm_Z_HillGradientDeg", + "configs": [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Electrical park brake Hill gradient estimation", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_BlockPushStartHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms11", + "name": "yVcVmcPmm_B_BlockPushStartHMI", + "configs": [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI to not show Press Start Button msg if powerdown on door open and belt off - do not hide Ignition On msg", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_UnintdStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms12", + "name": "yVcVmcPmm_B_UnintdStall", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Unintended stall flag", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActSeatBeltHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms13", + "name": "yVcVmcPmm_B_SsActSeatBeltHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI that Stop/Start is not active due to driver seat belt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActDoorOpenHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms14", + "name": "yVcVmcPmm_B_SsActDoorOpenHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI that Stop/Start is not active due to opened driver door", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsAltitudeFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault", + "name": "yVcVmcPmm_B_SsAltitudeFault", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Altitude / ambient pressure out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActTrailerHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms15", + "name": "yVcVmcPmm_B_SsActTrailerHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI that Stop/Start is not active due to trailer connected (including other conditions)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActAmbHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms16", + "name": "yVcVmcPmm_B_SsActAmbHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI that Stop/Start is not active due to ambient temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActHoodHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms17", + "name": "yVcVmcPmm_B_SsActHoodHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI that Stop/Start is not active due to hood open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms18", + "name": "yVcVmcPmm_B_EngRunReqRc", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Info to HMI that EngRunReq from PpmRc (Starter protection etc) is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EradDrReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms19", + "name": "yVcVmcPmm_B_EradDrReq", + "configs": [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Erad Activavtion is requested by driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_IsgActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms20", + "name": "yVcVmcPmm_B_IsgActReq", + "configs": [ + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Isg is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_TransHeatReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault1", + "name": "yVcVmcPmm_B_TransHeatReq", + "configs": [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Transmission heat request to TmStrt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault2", + "name": "sVcVmcPmm_D_EngRunReqLogg", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engine run request", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4294970000, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngOnReqEng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault3", + "name": "yVcVmcPmm_B_EngOnReqEng", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "EngOnReqEng", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault4", + "name": "sVcVmcPmm_D_EngRunReqClim", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "EngRunReq from Climate, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault5", + "name": "sVcVmcPmm_D_EngRunReqEmLv", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "EngRunReq from Power Supply, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqSapp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault6", + "name": "yVcVmcPmm_B_EngRunReqSapp", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "EngRunReq from Parking Assistance, via VcVmcPmm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActDrMdHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault7", + "name": "yVcVmcPmm_B_SsActDrMdHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Stop/Start inhibition by DriveMode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_SsActAbsHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault8", + "name": "yVcVmcPmm_B_SsActAbsHMI", + "configs": [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Stop/Start inhibition by ABS activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault9", + "name": "yVcVmcPmm_B_PwrUpIceStrtReq", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Ice start request at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault10", + "name": "yVcVmcPmm_B_EngRunReqObd", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Run request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault11", + "name": "yVcVmcPmm_B_EngRunReqFuel", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Run request by fuel age", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_AutoParkReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault12", + "name": "yVcVmcPmm_B_AutoParkReq", + "configs": [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Autopark request from driver leave function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EfadPathReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGscCts_D_EfadPathAct", + "name": "sVcVmcPmm_D_EfadPathReq", + "configs": [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "EFAD path request (0=Don't care 1=Efad2Ice 2=Efad2Whl 5=Disengaged)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_ClutchStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault13", + "name": "yVcVmcPmm_B_ClutchStartReq", + "configs": [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Clutch ICE start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_IsgPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault14", + "name": "yVcVmcPmm_B_IsgPathEnable", + "configs": [ + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "The ISG path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EfadPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault15", + "name": "yVcVmcPmm_B_EfadPathEnable", + "configs": [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "The EFAD path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_TrnEngageReqHev": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault16", + "name": "yVcVmcPmm_B_TrnEngageReqHev", + "configs": [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Transmission engage request in hybrid vehicles", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_WhlMotSysCluOperTypReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault17", + "name": "sVcVmcPmm_D_WhlMotSysCluOperTypReq", + "configs": [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Control signal for diff-speed direction and response level of clutch engagement", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_EfadActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault18", + "name": "yVcVmcPmm_B_EfadActReq", + "configs": [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "The electric motor (EFAD) is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "sVcVmcPmm_D_EngagementMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault19", + "name": "sVcVmcPmm_D_EngagementMode", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Engagement mode (1=smooth, 2=fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_IsgStrtPahReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault20", + "name": "yVcVmcPmm_B_IsgStrtPahReq", + "configs": [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Request to open the ISG path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}, + "yVcVmcPmm_B_FastIsgStopReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault21", + "name": "yVcVmcPmm_B_FastIsgStopReq", + "configs": [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": "Request for fast Efad reconfiguration for ISG stop", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1}}, + "inports": { + "sVcScIn_v_VehSpdLgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_v_Veh", + "name": "sVcScIn_v_VehSpdLgt", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1}, + "sVcEc_n_Eng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_Eng", + "name": "sVcEc_n_Eng", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine speed", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcDeDmm_D_EngRunReqDriver": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EngRunReqDriver", + "name": "sVcDeDmm_D_EngRunReqDriver", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine running request from driver mode manager", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "sVcCcm_D_EngRunngReqByClima": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcAc_B_EngRunReqClim", + "name": "sVcCcm_D_EngRunngReqByClima", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_D_EngRunngReqByBrk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_EngRunReqBrake", + "name": "sVcVdm_D_EngRunngReqByBrk", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Enging run request from BCM (VDM)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "sVcDseGb_D_TrsmEngRunReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcTc_B_EngRunReqTrans", + "name": "sVcDseGb_D_TrsmEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine run request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "sVcEc_D_EngRunReqEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_EngRunReqEMS", + "name": "sVcEc_D_EngRunReqEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine running request (inhibit stop) from EMS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "yVcIem_B_WhlMotSysCluSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcIsc_B_EradClutch", + "name": "yVcIem_B_WhlMotSysCluSts", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "ERAD clutch status. 0 = clutch open 1 = clutch closed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcMtcTc_Tq_EradReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcTc_Tq_EradReq", + "name": "sVcMtcTc_Tq_EradReqWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested ERAD Torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmPsm_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PropulsionAllowed", + "name": "yVcPpmPsm_B_PropulsionAllowed", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Determine if it is allowed to apply tq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_PowertrainDisengaged": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PowertrainDisengaged", + "name": "yVcScIn_B_PowertrainDisengaged", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Determines if powertrain is disengaged or not", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_D_GearLevAT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT", + "name": "sVcDtcAtr_D_GearLevAT", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Gear Lever Position", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1}, + "yVcDtcAtr_B_AT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcGp_D_GearBox", + "name": "yVcDtcAtr_B_AT", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Automatic gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcVmcEm_D_EngRunReqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm", + "name": "sVcVmcEm_D_EngRunReqEm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine running request from Energy Management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmPsm_B_IceEnabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_IceEnabled", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Internal Combustion Engine Enabel (this includes both enabel for remotestart and enabel for propulsion(DriveCycle active))", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcAsy_D_EngRunngReqByParkAssi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPam_D_EngRunReqSapp", + "name": "sVcAsy_D_EngRunngReqByParkAssi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "yVcDepSs_B_StartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StartAllowed", + "name": "yVcDepSs_B_StartAllowed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Start allowance from Dependability monitoring: 1 = Start initiation is allowed, 0 = start initiation not allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDepSs_B_StopAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StopAllowed", + "name": "yVcDepSs_B_StopAllowed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Stop of engine allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDtcCta_Tq_CrShInstReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcCta_Tq_CrShInstReq", + "name": "sVcDtcCta_Tq_CrShInstReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Total requested crankshaft torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1}, + "yVcDeDmm_B_EcoModeSs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode", + "name": "yVcDeDmm_B_EcoModeSs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDeDmm_D_MicHevMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDeDmm_D_MicHevMode", + "name": "sVcDeDmm_D_MicHevMode", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Micro hybrid mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmPsm_B_DrReady": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DrReady", + "name": "yVcPpmPsm_B_DrReady", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver has requested a PowerUp or a PowerDown", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcScDep_X_ClutchPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDi_X_ClPed", + "name": "sVcScDep_X_ClutchPedalPos", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1}, + "yVcVdm_B_AbsCtrlActv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_AbsCtrl", + "name": "yVcVdm_B_AbsCtrlActv", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Anti Blocking Systems (ABS) control is active (at least one wheel)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDepSs_B_EngFastStop": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_EngFastStop", + "name": "yVcDepSs_B_EngFastStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Emergency Fast stop from dependability. 1= Stop, 0 = Dont care", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcEc_B_StartMotor": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_StartMotor", + "name": "yVcEc_B_StartMotor", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Current status of the Start motor 1= running,0 = not running", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcEc_Te_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Te_Amb", + "name": "sVcEc_Te_Amb", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Ambient (outdoor) temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 120, + "class": "CVC_EXT", + "width": 1}, + "sVcEc_Qf_TeAmb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Qf_TeAmb", + "name": "sVcEc_Qf_TeAmb", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Quality factor for ambient temperature", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4, + "class": "CVC_EXT", + "width": 1}, + "yVcEc_B_SsRcfSetAlt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_SsRcfSetAlt", + "name": "yVcEc_B_SsRcfSetAlt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Reconfiguration flag for normal functionality. Placeholder to be used if needed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_p_PVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_p_BrVacuum", + "name": "sVcVdm_p_PVac", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Brake vacuum pressure", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmPsm_B_ForcedStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_ForcedStart", + "name": "yVcPpmPsm_B_ForcedStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver is forcing a start eg rolling the vehicle to active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcGp_D_StopStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGp_D_StopStart", + "name": "sVcGp_D_StopStart", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Car config: Stop Start (1 = no start stop,2 = start stop)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "yVcScDep_B_NeutralMTValid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_NeutralMTValid", + "name": "yVcScDep_B_NeutralMTValid", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Neutral adaption finished", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_BltLockStAtDrvr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle7", + "name": "yVcCem_B_BltLockStAtDrvr", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver seat buckle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScDep_B_FootOnClutchPedalASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_FootOnClutchPedal", + "name": "yVcScDep_B_FootOnClutchPedalASILB", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "tbd", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcPpmPsm_D_EngRunReqPsm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPpmPsm_D_EngRunReqPsm", + "name": "sVcPpmPsm_D_EngRunReqPsm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDseWt_Tq_BrkFricTqAtWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_Tq_TotWhBrk1", + "name": "sVcDseWt_Tq_BrkFricTqAtWhl", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Total friction brake torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 32763, + "class": "CVC_EXT", + "width": 1}, + "sVcScIn_X_AccPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDi_X_AccPed1", + "name": "sVcScIn_X_AccPedalPos", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Accelerator Pedal Position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmRc_B_StrtAbortSoft": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortSoft", + "name": "yVcPpmRc_B_StrtAbortSoft", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Cranking is aborted by VcPpmRc and restart can be done automaticaly without requiring new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcPpmRc_B_StrtAbortHard": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard", + "name": "yVcPpmRc_B_StrtAbortHard", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Cranking is aborted by VcPpmRc and restart requires new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDeDmm_B_TrnEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard1", + "name": "yVcDeDmm_B_TrnEngageRqDr", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "transmission engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDeDmm_B_EradEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable1", + "name": "yVcDeDmm_B_EradEngageRqDr", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_EradEngageRqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable2", + "name": "yVcVmcEm_B_EradEngageRqEm", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad engage request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcEc_B_SsRcfSet": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc2", + "name": "yVcEc_B_SsRcfSet", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Reconfiguration flag to dependability to deny stop/start functionality.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_VehSpdDirRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc3", + "name": "yVcScIn_B_VehSpdDirRvs", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Vehicle speed is in reverse direction", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_VehSpdLgtOk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc5", + "name": "yVcScIn_B_VehSpdLgtOk", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Vehicle Speed Ok", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcTmAf_Z_FanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc4", + "name": "sVcTmAf_Z_FanAfterrun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "predicted fan step if engine stops", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1}, + "yVcEc_B_TCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive", + "name": "yVcEc_B_TCMNodeAlive", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "TCM node alive (1=communication works)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcTrm_B_TrlrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear1", + "name": "yVcTrm_B_TrlrPrsnt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Trailer Present", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_DrvrBrkgASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive1", + "name": "yVcScIn_B_DrvrBrkgASILB", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver is pressing the brake pedal to at ASIL B integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScDep_B_FootOnClutchPedal": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_ClutchNonFailed", + "name": "yVcScDep_B_FootOnClutchPedal", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Clutch pedal indicate pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDseWt_Tq_PropRear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc8", + "name": "sVcDseWt_Tq_PropRear", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual Propuslion Torque on rear wheels (=ERAD Torque)", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcTc_Tq_IsgReqCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc7", + "name": "sVcDtcTc_Tq_IsgReqCrSh", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested ISG Torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcDseCt_Tq_IsgCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive2", + "name": "sVcDseCt_Tq_IsgCrSh", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual Isg torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_DrvgDirFwdDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear2", + "name": "yVcScIn_B_DrvgDirFwdDes", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver desired propulsion direction is forward", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_DrvgDirRvsDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive3", + "name": "yVcScIn_B_DrvgDirRvsDes", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver desired propulsion direction is reverse", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcEc_Te_EngCooltT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive4", + "name": "sVcEc_Te_EngCooltT", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Real time value of coolant temp, wide range (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -50, + "max": 150, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive7", + "name": "sVcDtcAtr_D_TrgGear", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_EXT", + "width": 1}, + "yVcDtcSt_B_IsgStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard2", + "name": "yVcDtcSt_B_IsgStrtAbort", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "ISG start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDsePcr_D_EngRunRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_81", + "name": "sVcDsePcr_D_EngRunRq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Run request from LOS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_IsgDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_82", + "name": "yVcDsePcr_B_IsgDisableRq", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS to disable ISG", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EradDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_83", + "name": "yVcDsePcr_B_EradDisableRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS to disable ERAD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EngStartInhibtRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_84", + "name": "yVcDsePcr_B_EngStartInhibtRq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS to inhibit engine start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EngStopRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_85", + "name": "yVcDsePcr_B_EngStopRq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS to stop engine", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcTcm_B_TrsmNeutFailr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_2", + "name": "yVcTcm_B_TrsmNeutFailr", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Note: 1 (failure) is set when the transmission can not be put in mode 3, 4 or 5 (neutral), for any reason such as EOP failure etc.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDtcTc_B_FcReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_3", + "name": "yVcDtcTc_B_FcReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Main conditions for fuelcut enabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcScIn_v_VehSpdLgtMax": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive8", + "name": "sVcScIn_v_VehSpdLgtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Maximum vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1}, + "sVcPpmPsm_D_EngRunReqRemote": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear3", + "name": "sVcPpmPsm_D_EngRunReqRemote", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request engine running for remote start", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_n_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive11", + "name": "sVcDtcAtr_n_TrgGear", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine speed at target gear", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcIcl_n_IdleSpdBs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDtcAtr_D_Gear3", + "name": "sVcDtcIcl_n_IdleSpdBs", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Target idle speed base level", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_IsgStartDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_4", + "name": "yVcDsePcr_B_IsgStartDisableRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS to open Charge PSR relay", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcVmcAwd_D_EngRunReqStabCtrl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_5", + "name": "sVcVmcAwd_D_EngRunReqStabCtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Run req from to ensure that Ice keep running during cornering", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_a_ALgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear6", + "name": "sVcVdm_a_ALgt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Longitudinal acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_Qf_ALgtQf": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc9", + "name": "sVcVdm_Qf_ALgtQf", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Longitudinal acceleration QF", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAjc_Tq_DrPropFrntReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct1", + "name": "sVcDtcAjc_Tq_DrPropFrntReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested Front Axle Torque stability limitations", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcVmm_D_CarModSts1": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc10", + "name": "sVcVmm_D_CarModSts1", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Car mode from vechicle mode management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmPsm_B_DriveCycleActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_DriveCycleActive", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver has entered the driving cycle 1= Active 0 = Not Active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcEc_p_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear7", + "name": "sVcEc_p_Amb", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 200, + "class": "CVC_EXT", + "width": 1}, + "yVcDeDmm_B_TipSport": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc11", + "name": "yVcDeDmm_B_TipSport", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Tip or sport mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcCem_D_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc12", + "name": "sVcCem_D_DoorDrvrSts", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver door status (0=Unknown, 1=Opened, 2=Closed)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "sVcCem_Qf_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc13", + "name": "sVcCem_Qf_DoorDrvrSts", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver door status quality factor", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_D_TransMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_6", + "name": "sVcDtcAtr_D_TransMode", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "TransMode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "sVcSpMon_D_PtTrsmModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_7", + "name": "sVcSpMon_D_PtTrsmModReq", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Signal is used for requesting neutral or engaged state of the transmission.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1}, + "yVcDeDmm_B_EngRunReqDrReEval": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc14", + "name": "yVcDeDmm_B_EngRunReqDrReEval", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from driver evaluator to re-evaluate engine run request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcEc_n_EngHiRes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_EngHiRes", + "name": "sVcEc_n_EngHiRes", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Hi resolution engine speed signal", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcCem_D_HoodSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle14", + "name": "sVcCem_D_HoodSts", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine compartment hood status 0=Ukwn - Unknown status 1=Opend - Opened 2=Clsd - Closed", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "yVcPpmRc_B_ShutOffReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle1", + "name": "yVcPpmRc_B_ShutOffReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Shut off request to VmcPmm due to two mass flywheel protection", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_StrtInhbReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv", + "name": "yVcCem_B_StrtInhbReq1WdReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_StopStrtReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv1", + "name": "yVcCem_B_StopStrtReq1WdReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcPpmRc_D_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle2", + "name": "sVcPpmRc_D_EngRunReqRc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Run engine (do not S/S stop) due to starter motor over heat protection", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "sVcFsdPc_D_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc1", + "name": "sVcFsdPc_D_EngRunReqFuel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "0=OK, 1=Warn, 2 = Start, 3 not used", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1}, + "yVcDepTre_B_ISGTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct3", + "name": "yVcDepTre_B_ISGTqAllw", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "ISG propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDtcEsc_B_Active": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct10", + "name": "yVcDtcEsc_B_Active", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine speed control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_SafeEngStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct11", + "name": "yVcDsePcr_B_SafeEngStrtReq", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Safe start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDeDmm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_StrtMdeReq", + "name": "yVcDeDmm_B_RespStartReq", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Responsive start requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcIem_D_WhlMotSysModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct5", + "name": "sVcIem_D_WhlMotSysModSts", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual mode for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1}, + "sVcCidd_D_IsgModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct8", + "name": "sVcCidd_D_IsgModSts", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual mode for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1}, + "sVcDseEm_Tq_EradMaxAvailWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct9", + "name": "sVcDseEm_Tq_EradMaxAvailWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Maximum available ERAD torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EradEngageRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct15", + "name": "yVcDsePcr_B_EradEngageRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from Los to engage Erad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_v_VehDrDirectionRaw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive15", + "name": "sVcDtcAtr_v_VehDrDirectionRaw", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Vehicle speed in driver intended direction unfiltered (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_TransNtrlDisable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct17", + "name": "yVcDsePcr_B_TransNtrlDisable", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS to disable request of neutral mode to TCM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDseEm_rt_IsgMaxTorqueLoss": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive13", + "name": "sVcDseEm_rt_IsgMaxTorqueLoss", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "ISG torque limit ratio", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1}, + "yVcScDep_B_AccFtOnPed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct12", + "name": "yVcScDep_B_AccFtOnPed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Foot on AccPedal ASILC", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcFsdPc_B_RunDry": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct13", + "name": "yVcFsdPc_B_RunDry", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Detection of empty tank for protection of the fuel pump", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_TransNtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct14", + "name": "yVcDsePcr_B_TransNtrlRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request from LOS too pot transmission in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDepTre_B_ERADTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc16", + "name": "yVcDepTre_B_ERADTqAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "ERAD propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDeDmm_D_DrvMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct2", + "name": "sVcDeDmm_D_DrvMode", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Propulsion drive mode: 1 Eco plus, 2 Eco plus-plus, 3 Eco reduced, 4 Sport, 5 comfort, 6 XC mode, 7 AWD, 8 Save for later, 9 Pure, 10 Hybrid, 11 Power, 12 N/A, 13 N/A, 14 N/A: 15 N/A", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 15, + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_EngRunngReqByVehModMgrChassie": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct6", + "name": "yVcCem_B_EngRunngReqByVehModMgrChassie", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Stopstart restart or inhibit request by chassie", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcObdSch_D_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct18", + "name": "sVcObdSch_D_EngRunReqObd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine run request from Obd", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct19", + "name": "yVcVmcEm_B_EngageReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Drivetrain engage request from EM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcEc_B_IscActvnEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct20", + "name": "yVcEc_B_IscActvnEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Idle speed activation request from EMS", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct21", + "name": "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Stopstart restart or inhibit request by electrical system", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_EngRunngReqByVehModMgrClimate": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct22", + "name": "yVcCem_B_EngRunngReqByVehModMgrClimate", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Stopstart restart or inhibit request by climate", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct23", + "name": "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Stopstart restart or inhibit request by trailer", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcObdSch_B_FuelCutReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct24", + "name": "yVcObdSch_B_FuelCutReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Ful cut request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcPpmRc_B_ChangeOfMindInhibit": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct25", + "name": "yVcPpmRc_B_ChangeOfMindInhibit", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "inhibit ChangeOfMind fuel recovery in order to not interfer with the starter motor activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcEc_B_BCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct26", + "name": "yVcEc_B_BCMNodeAlive", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "BCM Node alive", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_IsgNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss2", + "name": "yVcDsePcr_B_IsgNoTqRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "ISG no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EradNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct28", + "name": "yVcDsePcr_B_EradNoTqRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_NICEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct31", + "name": "yVcVmcEm_B_NICEnable", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "NIC enabled by energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_IsgUdcCtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct34", + "name": "yVcDsePcr_B_IsgUdcCtrlRq", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request to put ISG in Udc control mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcEc_Ps_FCLvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct35", + "name": "sVcEc_Ps_FCLvl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Current level of FC", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1}, + "sVcTcm_Te_TrsmOilT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct63", + "name": "sVcTcm_Te_TrsmOilT", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Gear box oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -40, + "max": 200, + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct32", + "name": "yVcDsePcr_B_PwrUpIceStrtReq", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request for a combustion engine start at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct36", + "name": "yVcVmcEm_B_PwrUpIceStrtReq", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Ice start request at startup from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcScIn_D_EngRunReqDepTrq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct37", + "name": "sVcScIn_D_EngRunReqDepTrq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine run request from Dependability torque estimation system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "yVcScDep_B_DrvrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive3", + "name": "yVcScDep_B_DrvrPrsnt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Driver present from CEM and signal received correctly", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_ChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct40", + "name": "yVcVmcEm_B_ChrgReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Charge request in HEP7", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcCmnEngRunReqCEC_D_Req": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct41", + "name": "sVcCmnEngRunReqCEC_D_Req", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request ICE to be running / Start ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "yVcCmnEngRunReqCEC_B_ReqLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct42", + "name": "yVcCmnEngRunReqCEC_B_ReqLong", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDtcCtc_D_EfadModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive18", + "name": "sVcDtcCtc_D_EfadModeReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "EM Mode request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1}, + "sVcDseGb_D_EfadPathAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive17", + "name": "sVcDseGb_D_EfadPathAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual Efad path (1=IsgPath, 2=WhlPath, 5=Disengaged, 6=Transition)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 6, + "class": "CVC_EXT", + "width": 1}, + "yVcDseGb_B_EfadIsgPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss16", + "name": "yVcDseGb_B_EfadIsgPathNotAvl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Efad Isg path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EfadDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct45", + "name": "yVcDsePcr_B_EfadDisableRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Disable Efad modes of operation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcWtc_B_CrShPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct7", + "name": "yVcVmcWtc_B_CrShPathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "There is no torque from the ICE acting on the front axel", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_NeutralMT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_RemoteRcfSet2", + "name": "yVcScIn_B_NeutralMT", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Neutral MT ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcVmcWtd_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcWtd_Tq_FrntReqWhl", + "name": "sVcVmcWtd_Tq_FrntReqWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_D_LockUp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/InPort55", + "name": "sVcDtcAtr_D_LockUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual lock-up mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "sVcEc_Te_EngClnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT10", + "name": "sVcEc_Te_EngClnt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Real time value of coolant temp (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 160, + "class": "CVC_EXT", + "width": 1}, + "sVcEmiHeat_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode34", + "name": "sVcEmiHeat_D_EngUseReq", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Catalyst engine request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "yVcCmnSta_B_StaExeTx": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcBc_B_BrPedSw2", + "name": "yVcCmnSta_B_StaExeTx", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Start execution", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcInjFuCut_rt_Lvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl1", + "name": "sVcInjFuCut_rt_Lvl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Final fuel cut level", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_v_VehDrDirection": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT1", + "name": "sVcDtcAtr_v_VehDrDirection", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Vehicle speed in driver intended direction (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1}, + "yVcDtcSt_B_CluStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl2", + "name": "yVcDtcSt_B_CluStrtAbort", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Clutch start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcGscSgs_B_CluStrtAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT3", + "name": "yVcGscSgs_B_CluStrtAvl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Clutch and gear is available for ICE clutch start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcTmStrt_B_EngRunTmLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT2", + "name": "yVcTmStrt_B_EngRunTmLong", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_PrioChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT4", + "name": "yVcVmcEm_B_PrioChrgReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Prio charge request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcAwd_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct29", + "name": "yVcVmcAwd_B_EngageReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcTmStrt_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct33", + "name": "sVcTmStrt_D_EngUseReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine use request for catalyst heating 0=Dont Care, 1=Low load, 2=Hi load", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1}, + "yVcDseGb_B_EngStopDlyReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct43", + "name": "yVcDseGb_B_EngStopDlyReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine stop delay request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDeDmm_D_EradEngageModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct47", + "name": "sVcDeDmm_D_EradEngageModeReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad engage mode", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -128, + "max": 127, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_Tq_BrkTqAtWhlsReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_BrPedSw", + "name": "sVcVdm_Tq_BrkTqAtWhlsReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Contains driver requested brake torque and driver support system requested brake torque. The signal is always positive and acts in opposite vehicle motion direction.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16380, + "class": "CVC_EXT", + "width": 1}, + "yVcVmcWtc_B_EfadPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct16", + "name": "yVcVmcWtc_B_EfadPathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "The front axle electric motor path is disabled (i.e. no torque is allowed on the path)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcWtd_B_EradPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct48", + "name": "yVcVmcWtd_B_EradPathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Erad path disable", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDtcTc_B_IsgPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct49", + "name": "yVcDtcTc_B_IsgPathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Isg path closed (torque ramp finished)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAtr_X_ClPedAdapt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct44", + "name": "sVcDtcAtr_X_ClPedAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1}, + "yVcGscGar_B_EfadShiftInProgress": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm1", + "name": "yVcGscGar_B_EfadShiftInProgress", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Efad shift in progress", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDsePcr_B_EfadNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/tlop_VcXx_insignal2", + "name": "yVcDsePcr_B_EfadNoTqRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Information to not request any torque from Efad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDseGb_B_EfadWhlPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss1", + "name": "yVcDseGb_B_EfadWhlPathNotAvl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Efad wheel path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVscEcc_B_TrnEngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct50", + "name": "yVcVscEcc_B_TrnEngageReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Trn Engage Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDtcSt_B_CluStrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss3", + "name": "yVcDtcSt_B_CluStrtAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Clutch start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDtcSt_B_StrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct51", + "name": "yVcDtcSt_B_StrtAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Isg start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDepSs_B_EngStartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss4", + "name": "yVcDepSs_B_EngStartAllowed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Start of combustion engine is allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDepSs_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct52", + "name": "yVcDepSs_B_12VStartEnable", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "12V System ready for start attempt.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcWtd_B_FrntAxlePathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct46", + "name": "yVcVmcWtd_B_FrntAxlePathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Front axle path is disabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct53", + "name": "yVcVmcEm_B_RespStartReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Response engine start request to set start mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDeDmm_B_DrMdeFactory": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct54", + "name": "sVcDeDmm_B_DrMdeFactory", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "DriveMode selection is overridden by another mode because of Factory Mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcGscAsr_B_EfadNoTqReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct55", + "name": "yVcGscAsr_B_EfadNoTqReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request to put Efad in ISG path but with no Efad torque requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcEmiGpf_B_FuelCutReqHybrid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct39", + "name": "yVcEmiGpf_B_FuelCutReqHybrid", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Fuel cut request for Hybrid", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcVmcBsl_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcBsl_Tq_FrntReqWhl", + "name": "sVcVmcBsl_Tq_FrntReqWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcTmStrt_D_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive9", + "name": "sVcTmStrt_D_EngRunReqTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request ICE to be running / Start ICE (Replace RunReqEMS)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1}, + "sVcDtcAjc_Tq_DrCrShReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct56", + "name": "sVcDtcAjc_Tq_DrCrShReqWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested crankshaft torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcTmTeOil_Te_EngOil": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct57", + "name": "sVcTmTeOil_Te_EngOil", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Engine oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -60, + "max": 195, + "class": "CVC_EXT", + "width": 1}, + "sVcDseEm_Tq_IsgMaxAvail": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct58", + "name": "sVcDseEm_Tq_IsgMaxAvail", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Maximum available ISG torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1}, + "sVcDseEm_Pw_IsgMaxAllowPrio": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct59", + "name": "sVcDseEm_Pw_IsgMaxAllowPrio", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Maximum allow ISG Powerlimit.", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_a_ALgtStdFromWhlSpd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct60", + "name": "sVcVdm_a_ALgtStdFromWhlSpd", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Vehicle acceleration over ground", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "yVcDseEm_B_EngRunReqSocMin": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct61", + "name": "yVcDseEm_B_EngRunReqSocMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Soc min ice start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcScIn_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct62", + "name": "yVcScIn_B_PropulsionAllowed", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Indicates that propulsive torque is allowed. This includes all actuators. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcScDep_D_DrvgDirDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT5", + "name": "sVcScDep_D_DrvgDirDes", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "EPB application request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1}, + "yVcVmcTfa_B_CcActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules36", + "name": "yVcVmcTfa_B_CcActive", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Cruise control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDseEm_rt_IsgMaxTorqueLossStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT6", + "name": "sVcDseEm_rt_IsgMaxTorqueLossStart", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "EPB application request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_D_EpbSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVdm_D_EpbSts", + "name": "sVcVdm_D_EpbSts", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Epb status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1}, + "sVcVmcAwd_X_RoadGrad": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT7", + "name": "sVcVmcAwd_X_RoadGrad", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Actual road gradient", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "CVC_EXT", + "width": 1}, + "sVcVdm_a_ALat": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_11", + "name": "sVcVdm_a_ALat", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Lateral acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_Depletion": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules1", + "name": "yVcVmcEm_B_Depletion", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "charge mode == depletion", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "sVcDseWt_Tq_EfadMaxElDrvWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct64", + "name": "sVcDseWt_Tq_EfadMaxElDrvWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Maximum available EFAD wheel torque for pure electric drive", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "sVcMtcAjc_Tq_EfadReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct65", + "name": "sVcMtcAjc_Tq_EfadReqWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Requested rear torque after ERAD drivability filters", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1}, + "yVcVmcEm_B_Charge": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules2", + "name": "yVcVmcEm_B_Charge", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Charge mode active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcVmcTfa_B_CcOrAccActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive", + "name": "yVcVmcTfa_B_CcOrAccActive", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Cruise or Acc is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcGscPrn_B_EfadRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive1", + "name": "yVcGscPrn_B_EfadRvs", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Reverse with Efad on forward gear", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDseGbGear_B_ParkLockNotEngd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive2", + "name": "yVcDseGbGear_B_ParkLockNotEngd", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Park lock is not engaged (If FALSE no guarantee for fully engaged park lock)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcFsdPc_B_RunDryCrkInhb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb", + "name": "yVcFsdPc_B_RunDryCrkInhb", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Run Dry Crank Inhibit", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}, + "yVcDseGbAvl_B_EfadIsgPathAvoid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb1", + "name": "yVcDseGbAvl_B_EfadIsgPathAvoid", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "description": "Request to block ISG path when 1st gear is not available or overheating", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1}}, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {}}, + "dids": { + "rVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "name": "rVcVmcPmm_D_EngRunReqLogg", + "configs": [ + "VcVmcPmm__HEP7_1000_Hev_11"], + "description": " [0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "4294970000", + "class": "CVC_DISP"}}, + "nvm": {}, + "pre_procs": [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1270_12VStartEnable_10", + "Vc_Pvc_Hw_B_12VStartMotor", + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "Vc_Pvc_Hw_B_AT", + "Vc_Pvc_Hw_B_Efad", + "Vc_Pvc_Hw_B_Erad", + "Vc_Pvc_Hw_B_HVSystem == 0", + "Vc_Pvc_Hw_B_TqConverterGbx", + "Vc_Pvc_Sw_B_StopStart"], + "local_vars": { + "xVcVmcPmm_B_AmbTempH": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is above limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunning": { + "type": "Bool", + "unit": "-", + "description": "Engine is running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_rt_FCLvl": { + "type": "Float32", + "unit": "-", + "description": "Final fuel cut level before realisation.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StartedDly": { + "type": "Bool", + "unit": "-", + "description": "Engine running detected (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngStopped": { + "type": "Bool", + "unit": "-", + "description": "Engine is stopped", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunningRpmDly": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Started": { + "type": "Bool", + "unit": "-", + "description": "engine running detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunningRpm": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkHGSkipParkPre": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop will be ignored if gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop is ignored allowing stop trigger in gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_EngRunReqBrake": { + "type": "UInt8", + "unit": "-", + "description": "Engine running request brakes", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "-", + "description": "brake vacuum start from vacuum level due to vehicle speed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkVacuumStart": { + "type": "Bool", + "unit": "-", + "description": "Brake vacuum request to start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator3", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "brake vacum limit in vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_VehAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted acceleration calculated from speed.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/LogicalSwitch/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_Tq_BrkTrqFilt": { + "type": "Float32", + "unit": "Nm", + "description": "Filted brake trq signal", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Sum2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_MergedAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted merged accelerations signal from EPB and Vehicle speed acc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Sum2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_BcmLongAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted accelerations signal from EPB LongAcc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Sum2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_GradOutOfLim": { + "type": "Bool", + "unit": "-", + "description": "Out of limits to allow stop start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_QfFault": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator4", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkHGStart": { + "type": "Bool", + "unit": "-", + "description": "Hill Gradient start of engine due to high/low gradient", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator5", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_QfFaultLongAcc": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid for long acc signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_tc_HillGadient": { + "type": "Float32", + "unit": "s", + "description": "tc for Hillgradient final filter", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_SignedHGVehFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Signed vehicle speed acceleration signal. If vehicle is moving backwards.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Hill gradient start of engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StandStill": { + "type": "Bool", + "unit": "-", + "description": "Hillgradient calculation for stand still lower then cal value", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_HGSpdOK": { + "type": "Bool", + "unit": "-", + "description": "Speed Ok to calculate stop inhibit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator5", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StopInhibitUpHill": { + "type": "Bool", + "unit": "-", + "description": "Stop inhibit uphill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StopInhibitDownHill": { + "type": "Bool", + "unit": "-", + "description": "Stop Inhibit Down Hill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_MergedAccSaturated": { + "type": "Float32", + "unit": "m/s2", + "description": "Saturated merged acceleration signal", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Saturation/MinMax1", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_MergedAcc": { + "type": "Float32", + "unit": "m/s2", + "description": "Merged Acc signal (sVcEpb_a_LongAcc-a_HGVehFilt)", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Sum6", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "A/T load compensation for drive and reverse.", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_EngRunReqFCAdapt": { + "type": "UInt8", + "unit": "-", + "description": "FC adapt run req", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_FCAdaptAct": { + "type": "Bool", + "unit": "-", + "description": "Fuel cut adapt active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF4/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_DrLeaveKeepRun": { + "type": "Bool", + "unit": "-", + "description": "Keep engine running based on driver leave vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogOp9", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_EngRunReqDrLeave": { + "type": "UInt8", + "unit": "-", + "description": "Engine run req based on driver leave vehicle", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogicalSwitch3/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_DrLeavePowerDownReq": { + "type": "Bool", + "unit": "-", + "description": "Power down request from driver leave", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay1/RelationalOperator1", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqPcr": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Pcr", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqDriver": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqPsm": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Psm", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqEm": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Energy Management", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TransBlock": { + "type": "Bool", + "unit": "", + "description": "transmission is being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TransEngOnBlock": { + "type": "Bool", + "unit": "", + "description": "Trans blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TransBlocking": { + "type": "Bool", + "unit": "", + "description": "Transmission is blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EMSBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EMSBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EmLvBlocked": { + "type": "Bool", + "unit": "", + "description": "Em Lv is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_ClimBlocked": { + "type": "Bool", + "unit": "", + "description": "climate is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Engine running request FC Adapt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TmBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TmBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqIsg": { + "type": "Bool", + "unit": "", + "description": "Engine running request ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqRemote": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Engine running request stability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Engine running request driver leave", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqChas": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwitch27/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_ChasBlocked": { + "type": "Bool", + "unit": "-", + "description": "Chassis is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDelay5/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqDep": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CECBlock": { + "type": "Bool", + "unit": "-", + "description": "CEC being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqCEC": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from CEC", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch25/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CECBlocked": { + "type": "Bool", + "unit": "", + "description": "CEC is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_FastStart": { + "type": "Bool", + "unit": "-", + "description": "Fast start mode request ISG start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator14", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_SafeISGPrio": { + "type": "Bool", + "unit": "-", + "description": "Priotritzed safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_SafeISG": { + "type": "Bool", + "unit": "-", + "description": "Safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF2/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EmiStrt": { + "type": "Bool", + "unit": "-", + "description": "Emission start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StrtMdeRunning": { + "type": "Bool", + "unit": "-", + "description": "Restart within drivecycle active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StrtMdeAcc": { + "type": "Bool", + "unit": "-", + "description": "StartMode on AccPedal detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF2/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_HeatUpEOP": { + "type": "Bool", + "unit": "-", + "description": "Heat of of EOP in progress", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/SR_FF4/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_Xd_AccPedalPos": { + "type": "Float32", + "unit": "%/s", + "description": "Derivative of accelerator pedal position", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLPF1_pole_v2/LogicalSwitch/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_FastEngmtTrqDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on torque demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_FastEngmtPwrDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on power demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_FastEngmtIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode during ISG-starts in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator10", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngmtModFast": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/SR_FF8/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "Time the engine has been shut off.", + "max": 100000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/MinMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StopAllowedPath": { + "type": "Bool", + "unit": "-", + "description": "An engine stop is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngStop": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator27", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngStart": { + "type": "Bool", + "unit": "", + "description": "engine start request, with start allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator35", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqTotPre": { + "type": "Bool", + "unit": "-", + "description": "EngRunReqTotPre", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IceStartRun": { + "type": "Bool", + "unit": "-", + "description": "ICE status is starting or running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator42", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngStopFast": { + "type": "Bool", + "unit": "-", + "description": "Engine must be stopped, either stall, key off or monitoring function", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqEngClnt": { + "type": "Bool", + "unit": "-", + "description": "Engine run request due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnOff": { + "type": "Bool", + "unit": "-", + "description": "EngOnOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StopAllowedDep": { + "type": "Bool", + "unit": "-", + "description": "A stop/start stop is allowed by dep", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqMaxTime": { + "type": "Bool", + "unit": "-", + "description": "EngRunReq for Max shut off time for engine.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_RunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "Ice stall run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "The engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnReqPre": { + "type": "Bool", + "unit": "", + "description": "EngRunning Request for micro hybrid vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_FanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Fan afterrun is active for eng on req", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/LogicalOperator3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnReqEng": { + "type": "Bool", + "unit": "-", + "description": "Eng on request from engine control, later on synced with transmission", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrtDly": { + "type": "Bool", + "unit": "-", + "description": "Time delay on EngRunReqTot when Waiting for a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Rel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4EngStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for the engine to stop before requesting a new B_EngRunReqTot-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Rel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_EngRunReqLogg": { + "type": "UInt32", + "unit": "-", + "description": "[0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "max": 4294970000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_PwdPossible": { + "type": "Bool", + "unit": "", + "description": "Powerdown is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator17", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_PwdTrig": { + "type": "Bool", + "unit": "", + "description": "a powerdown is triggerd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_PwdReset": { + "type": "Bool", + "unit": "", + "description": "a powerdown is reset", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator7", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_SsActSeatBeltInhib": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 0 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_SsActSeatBeltAllow": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 1 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_SRSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Seatbelt-DriverDoor logic inhibit SsActive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "Driver has left the car", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperator20", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AmbPresLow": { + "type": "Bool", + "unit": "-", + "description": "Ambient pressure is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator16", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AmbTempL": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_t_TrnC3OilPres": { + "type": "Float32", + "unit": "s", + "description": "C3 oil pressure buildup time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/CounterReset1/MinMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrnC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "C3 oil pressure build up phase", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/LogicalOperator41", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrnEngageReqHybrid": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request (for hybrids)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/LogicalOperator32", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrnEngageReqIC": { + "type": "Bool", + "unit": "-", + "description": "The transmission is requested to be engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/LogicalSwitch10/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CrShPathDisabled": { + "type": "Bool", + "unit": "-", + "description": "The crankshaft path is closed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/LogicalSwitch9/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngStopReqAT": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperator27", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_TransModeReq": { + "type": "UInt8", + "unit": "-", + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrnEngageReqPre": { + "type": "Bool", + "unit": "-", + "description": "Pre transmission engage request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrnEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnReqTransPre": { + "type": "Bool", + "unit": "-", + "description": "Pre signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnReqTrans": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to be started for an AT vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRcvMT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery MT", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp16", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StrtAbrtPre": { + "type": "Bool", + "unit": "-", + "description": "Star abort for Stop in Gear vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp26", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRcvClNtrl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp29", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "ISG start abort", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp39", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRcvCl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp5", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRcvAbortInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "-", + "description": "Starting stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch12/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_StallAbortNum": { + "type": "UInt8", + "unit": "-", + "description": "Number of start attempts", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch13/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRunning": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch14/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if no seat belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch15/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch16/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery within x seconds after first start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRecovery": { + "type": "Bool", + "unit": "", + "description": "stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch18/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch19/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallStrtM": { + "type": "Bool", + "unit": "-", + "description": "Start motor stall, time out", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid. MT only", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch20/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery AT transmissions", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch22/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if stop/start strategy is off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch23/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch30/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "-", + "description": "No stall recover if is not an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch32/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if the engine coolant temp is low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch34/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallRcShutOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch40/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Stall detection is inhibited by ChangeOfMindInhibit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch41/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "ICE stall detected during an emission start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch43/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch48/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CrnkStallRecov": { + "type": "Bool", + "unit": "", + "description": "Stall detection using startmotor flag", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "B_AbrtStallSsRcfSet", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_ForcedStallStart": { + "type": "Bool", + "unit": "", + "description": "Forced start for stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected, set Unintended EMS flag", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StallAbortNum": { + "type": "Bool", + "unit": "", + "description": "Abort stall", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOperator4", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "ICE stall run request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EradSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Erad speed control request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator12", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EradAllow": { + "type": "Bool", + "unit": "-", + "description": "Erad path is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator14", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EradEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Erad engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator6", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EpbActive": { + "type": "Bool", + "unit": "-", + "description": "Parking brake active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/B_TqRsvActAT_1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_Z_RoadGradient": { + "type": "Float32", + "unit": "-", + "description": "Road gradient", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/LogicalSwitch5/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkRoadIncline": { + "type": "Bool", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/RelationalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D if Efad is in ISG-path already", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator11", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_NonSysStrt": { + "type": "Bool", + "unit": "-", + "description": "A non-system initated start is requested", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtGearLvrDRBraking": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D/R since driver is braking vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator59", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtGearLvrDR": { + "type": "Bool", + "unit": "-", + "description": "An ISG-start is requested while the gear lever is placed in either drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtGearLvrDRAbort": { + "type": "Bool", + "unit": "-", + "description": "Abort ISG-start in D/R if driver releases brake pedal, allow for 12V-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator9", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtLimLoosen": { + "type": "Bool", + "unit": "-", + "description": "Loosen the ISG start limits", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtWhlTrqOK": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to request an ISG-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_a_Veh": { + "type": "Float32", + "unit": "m/s2", + "description": "Derivied vehicle speed", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Sum2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An 12V start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator14", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Wait for the vehicle speed to increase to be able to requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator44", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Dly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Delay an 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator7", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_12VStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An 12V-start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrtLowVehSpd": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough to activate the Wait4CluStrt-logic", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/RelationalOperator17", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrtWhlAccHigh": { + "type": "Bool", + "unit": "-", + "description": "The vehicle acceleration is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrtWhlTqLow": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrtAccPedAct": { + "type": "Bool", + "unit": "-", + "description": "The acc pedal is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Wait4CluStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for a clutch start is exceeded", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_DrvCycActvFirstStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore the unavailable-logic for the first start due to low transmission oil temp (might result in a slow response from the TCM which leads to a delayed start)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator44", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator55", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngOnReqTiOut": { + "type": "Bool", + "unit": "-", + "description": "Timeout", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_DrvCycActvFirstStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for first start logic connected to the DriveCycleActive signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "There's not enough available torque to perform an ISG-start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CluStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator46", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CluStrtTqRsvBlk": { + "type": "Bool", + "unit": "-", + "description": "Abort CluStrt if current EFAD TqReq is too high and 12Vstrt is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator7", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CluStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator10", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CluStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "Clutch start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator20", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "ISG start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator35", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_StrtActrsRdy": { + "type": "Bool", + "unit": "-", + "description": "One or several start actuators are ready for another start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator47", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator6", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_12VStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "12V start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator9", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further ISG start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CluStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further clutch start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_12VStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further 12V start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_12VStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "12V start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_CluStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "Clutch start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_IsgStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "ISG start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_CluStrtVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is high enough to perform a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_ElecMotLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "Currently low available torque levels on the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_VehSpdOKIsgDrv": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Run request to reduce propulsion delay during ISG-stop in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator24", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Eng run req during ISG-stop coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator25", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Trigger run req after ISG-stop to reduce propulsive torque delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator36", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EngRunReqIsgStop": { + "type": "Bool", + "unit": "-", + "description": "Engine running request to avoid loss of drive during abort of ISG-stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgChrgReqDrv": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when the gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator11", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgChrgReqBrk": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator13", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG-stop of ICE during standstill in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator18", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopStandstillPre": { + "type": "Bool", + "unit": "-", + "description": "Engine stop using ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator22", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopRoadGradOK": { + "type": "Bool", + "unit": "-", + "description": "Road gradient is OK for ISG-stop in standstill D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator35", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator49", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgChrgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to use the electic motor for charging of the HV-battery", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator5", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during power down", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator9", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrnModOKIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode OK for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_VehSpdOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_BrkOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_AccPedOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The acc ped request is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStandStillVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStandStillBrkTqOK": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStandStillBslTqOK": { + "type": "Bool", + "unit": "-", + "description": "VcVmcBsl torque request is low enough for an ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EfadUnavl": { + "type": "Bool", + "unit": "-", + "description": "The efad is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Efad2IceUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Ice path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Efad2WhlUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Whl path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Efad2WhlPahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to wheel path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator44", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Efad2IcePahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to ICE path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator54", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Efad2IceReqRst": { + "type": "Bool", + "unit": "-", + "description": "Request to reset the Efad2Ice-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator57", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EfadDisengdReq": { + "type": "Bool", + "unit": "-", + "description": "Request to disengage the EFAD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator59", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_12VStrtReq": { + "type": "Bool", + "unit": "-", + "description": "12V start request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator65", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_EfadModReq": { + "type": "UInt8", + "unit": "-", + "description": "Efad mode request", + "max": 5, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_EvenGearShiftAct": { + "type": "Bool", + "unit": "-", + "description": "A gear shift is currently active on the electric motor shaft", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF1/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_GarageShiftEfadPahDiOK": { + "type": "Bool", + "unit": "-", + "description": "The torque condition when perfoming a garage shift is okay (there should be no torque acting on the electric motor before engaging drive/reverse)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF3/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_Efad2IceReq": { + "type": "Bool", + "unit": "-", + "description": "Request to connect the EFAD to the ICE", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF7/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_DrvCycTiOut": { + "type": "Bool", + "unit": "-", + "description": "Time out indication for the drivecycle active signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay1/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_GearLvrNotDRDetn": { + "type": "Bool", + "unit": "-", + "description": "The gear lever is not in drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay4/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgStrtOk": { + "type": "Bool", + "unit": "-", + "description": "ISG start ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_12VStrtOk": { + "type": "Bool", + "unit": "-", + "description": "12Vstrt OK", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator5", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_Tq_EradMaxLimNoLim": { + "type": "Float32", + "unit": "Nm", + "description": "ERAD max torque no limits (HW boundary)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgEnable": { + "type": "Bool", + "unit": "-", + "description": "Isg is enabled", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalOperator17", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_IsgActrTqRampDwn": { + "type": "Bool", + "unit": "-", + "description": "There is no torque acting on the actuator", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RelationalOperator13", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_PTDisengagedAT": { + "type": "Bool", + "unit": "-", + "description": "tbd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator7", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_TrailerPresent": { + "type": "Bool", + "unit": "-", + "description": "Trailer is present", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalOperator22", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "rVcVmcPmm_D_EngRunReqChas": { + "type": "UInt8", + "unit": "-", + "description": "Engine Run Req from Chassie", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "xVcVmcPmm_B_DrDoorOpen": { + "type": "Bool", + "unit": "-", + "description": "Driver door is open", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/RelationalOperator5", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}}, + "calib_consts": { + "cVcVmcPmm_B_PwdAbortHard": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort start is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbortHard", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdAbrtStall": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort stall is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbrtStall", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdDrReadyAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Powerdown due to AbortHard possible also at DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdDrReadyAbortHard", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdIgnoreQfDrDoor": { + "type": "Bool", + "unit": "-", + "description": "Ignore QF for driver door information", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdIgnoreQfDrDoor", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on two-mass flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdRcShutOffDCA": { + "type": "Bool", + "unit": "-", + "description": "Reset Powerdown timer for two-mass flywheel protection in low DriveCycleActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOffDCA", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdRcfDep": { + "type": "Bool", + "unit": "", + "description": "Activate powerdown if reconfig from dependability is set", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcfDep", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdRpmOnly": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on engine speed instaed of Ice Status signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRpmOnly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdSeatBelt": { + "type": "Bool", + "unit": "", + "description": "Activate pwd if seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBelt", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdSeatBeltDoor": { + "type": "Bool", + "unit": "-", + "description": "Include driver door status as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltDoor", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdSeatBeltN": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in N", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltN", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdSeatBeltP": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltP", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdSpeedLimit": { + "type": "Bool", + "unit": "", + "description": "Activate speed limit threashold for powerdown", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSpeedLimit", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMModeFail", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMNodeAlive", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTransFailure", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwdUseSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Use gear lever position as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdUseSeatBeltAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UsePowerDownReq": { + "type": "Bool", + "unit": "", + "description": "allow a powerdown to occur", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_UsePowerDownReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_PwdRpmOnly": { + "type": "Float32", + "unit": "rpm", + "description": "Below this rpm threashold an powerdown will be carried out if seat belt is unbuckled or engine fault has occured", + "max": 100000000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/n_PwdRpmOnly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BlockPsmPwd": { + "type": "Float32", + "unit": "s", + "description": "Time to ignore PowerDownHMI signal from VcPpmPsm after an open DriverDoor triggered a powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_BlockPsmPwd", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_PwdRcShutOff": { + "type": "Float32", + "unit": "s", + "description": "Time with two-mass flywheel protection active to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRcShutOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_PwdRpm": { + "type": "Float32", + "unit": "s", + "description": "time with no rpm to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRpm", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_PwdSeatBeltAT": { + "type": "Float32", + "unit": "s", + "description": "Powerdown after this timeout if belt is off for Auto transmission", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdSeatBeltAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_PwdTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdTcmModeFail", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_PwdSpeedLimit": { + "type": "Float32", + "unit": "km/h", + "description": "threashold to allow powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/v_PwdSpeedLimit", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActSeatBeltNoSeq": { + "type": "Bool", + "unit": "-", + "description": "Require no sequence in condition to allow SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/B_SsActSeatBeltNoSeq", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_SsActSeatBelt": { + "type": "Float32", + "unit": "s", + "description": "Reset SsActive after a delay if Driver belt off in Park", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/t_SsActSeatBelt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDoorBeltD": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in D and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltD", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDoorBeltN": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in N and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltN", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDoorBeltP": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltP", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDoorBeltR": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in R and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltR", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDoorNoBelt": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when belt is off and door is opened (AT only)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorNoBelt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActAbs": { + "type": "Bool", + "unit": "", + "description": "Use ABS in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAbs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActAmbPres": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by low ambient pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAmbPres", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActBrk": { + "type": "Bool", + "unit": "-", + "description": "Use brake request, used to ensure no stop after ABS pump activation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActBrk", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDrMdInv": { + "type": "Bool", + "unit": "-", + "description": "0=inhibit SsActive if matching any of the selected drive modes, 1=allow SsActive if matching any of the selected drive modes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDrMdInv", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P, belt is off and door is opened", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDriverLeaving", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActEcoMde": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by eco mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActEcoMde", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActGpSs": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by global parameter", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActGpSs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActHood": { + "type": "Bool", + "unit": "-", + "description": "Use HoodStatus in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActHood", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActNtrl": { + "type": "Bool", + "unit": "", + "description": "Neutral must be valid for stop/start to be active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActNtrl", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActRcfSet": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from dependability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSet", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActRcfSetAlt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from Engine control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSetAlt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActSeatBelt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by seatbelt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBelt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActSeatBeltPrkBlock": { + "type": "Bool", + "unit": "-", + "description": "Block reconfig of stop/start by seatbelt if AT gear lever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBeltPrkBlock", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMModeFail", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMNodeAlive", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTemp": { + "type": "Bool", + "unit": "", + "description": "Require ok Qf on temp to deselect stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTemp", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTempStrt": { + "type": "Bool", + "unit": "-", + "description": "If 1 then temperature condtion can restart the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTempStrt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTipSport": { + "type": "Bool", + "unit": "-", + "description": "When in Tip/Sport, deactivate SS (as an alternative to set EngRunReqDriver in VcDeDmm)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTipSport", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTrailer": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trailer detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTrailer", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SsActTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTransFailure", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseSsActTemp": { + "type": "Bool", + "unit": "", + "description": "If 1 then temperature condtion can inhibit StopStart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActTemp", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseSsActive": { + "type": "Bool", + "unit": "", + "description": "Set stop/start as active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActive", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_SsActDrMd1": { + "type": "UInt8", + "unit": "-", + "description": "First drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd1", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_SsActDrMd2": { + "type": "UInt8", + "unit": "-", + "description": "Second drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd2", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_SsActDrMd3": { + "type": "UInt8", + "unit": "-", + "description": "Third drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_AmbHighH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_AmbHighL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_AmbLowH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_AmbLowL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_SsActTrailerUpHillH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, upper hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_SsActTrailerUpHillL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, lower hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_p_AmbH": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, high hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_p_AmbL": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, low hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_SsActAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActAbs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_SsActBrk": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding brake request, used to ensure no stop after ABS pump activation", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActBrk", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_SsActTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActTcmModeFail", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngStoppedUseHiRes": { + "type": "Bool", + "unit": "-", + "description": "rpm to consider engine stopped", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_EngStoppedUseHiRes", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseComInhbtIceStatus": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to exit state IceStatus=Running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseComInhbtIceStatus", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIscActvnEMS": { + "type": "Bool", + "unit": "-", + "description": "use startmotor to detect eng running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseIscActvnEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseTqSPM": { + "type": "Bool", + "unit": "-", + "description": "Torque SPM interface. Set = 1 to choose GEP3 signals", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseTqSPM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_StrtModLongIceStsDetn": { + "type": "UInt8", + "unit": "-", + "description": "Determine which start mode gets the long time detection for IceStatus=running", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/D_StrtModLongIceStsDetn", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_EngRunning": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine running", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngRunning", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_EngStarted": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine started", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStarted", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_EngStopped": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stopped", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStopped", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_rt_FCLvlRunning": { + "type": "Float32", + "unit": "-", + "description": "Min Fuel cut level for detecting engine on", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/rt_FCLvlRunning", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_ComInhbtIceStatus": { + "type": "Float32", + "unit": "s", + "description": "Max time to listen to ChangeOfMindInhibit signal, used as stop request in IceStatus", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_ComInhbtIceStatus", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopTime": { + "type": "Float32", + "unit": "s", + "description": "minimum stop timer", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_MinStopTime", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_Running": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng running", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Running", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_Started": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng started", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Started", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkAbs": { + "type": "Bool", + "unit": "s", + "description": "Keep engine running if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkAbs", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkEngRunReq": { + "type": "Bool", + "unit": "s", + "description": "use the enigne running request from brake control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkEngRunReqAlive": { + "type": "Bool", + "unit": "-", + "description": "If engine running request from brake control is missing, request start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReqAlive", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Use separate HillGradient conditions to allow engine stop if gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHGSkipPark", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkHillGrad": { + "type": "Bool", + "unit": "s", + "description": "Use brake for ensureing engine is running when in high slopes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHillGrad", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkUseNegVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use negative brake vacuum signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkUseNegVacuum", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuum", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum adapted for vehicle speed for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuumVeh", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_BrkHillVal": { + "type": "UInt8", + "unit": "-", + "description": "Used to set if hill gradient function should be able to restart the engine(2) or only inhibit stop(1)", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/D_BrkHillVal", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_BrkHGSkipParkDownH": { + "type": "Float32", + "unit": "deg", + "description": "Downhill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownH", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_BrkHGSkipParkDownL": { + "type": "Float32", + "unit": "deg", + "description": "Downhill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownL", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_BrkHGSkipParkUpH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpH", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_BrkHGSkipParkUpL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpL", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_p_BrVacuum": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuum", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BrkAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkAbs", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BrkEngRunReqAlive": { + "type": "Float32", + "unit": "s", + "description": "Delay for starting engine if EngRunReq signal from brake system is missing", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkEngRunReqAlive", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BrkHillGrad": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding gradient, used to ensure no stop after gradient estimation active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkHillGrad", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Value sent out if not Epb Qf Long Acc is correct", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_BrkHillGradStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseDefHGDynoMd": { + "type": "Bool", + "unit": "-", + "description": "Use default hill gradient value if DynoMode is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseDefHGDynoMd", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseWhlSpdDirection": { + "type": "Bool", + "unit": "-", + "description": "Use wheel speed direction", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseWhlSpdDirection", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_QfEpbLongAccInit": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccInit", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_QfEpbLongAccOK": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccOK", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_ResetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for reset stop inhibit", + "max": 10000000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimDownHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_ResetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for reset stop inhibit", + "max": 10000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimUpHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_SetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for enable stop inhibit", + "max": 1000000000000, + "min": -100000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimDownHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Z_SetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for enable stop inhibit", + "max": 900000000000, + "min": -9000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimUpHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_a_HillGradientFault": { + "type": "Float32", + "unit": "m/s2", + "description": "Hillgradient acc used when fault detected", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientFault", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_a_HillGradientMax": { + "type": "Float32", + "unit": "m/s2", + "description": "Max acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_a_HillGradientMin": { + "type": "Float32", + "unit": "m/s2", + "description": "Min acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Time StandStill", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/t_StandStill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_BcmLongAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration from BCM LongAcc", + "max": 1000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BcmLongAccFilt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_BrkTrqFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for Brake trq filter", + "max": 1000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BrkTrqFilt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for filter when stand still", + "max": 10000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_StandStill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_VehAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration calculated from vehicle speed", + "max": 10000000000000, + "min": -1000000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_VehAccFilt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_SpeedLimitHG": { + "type": "Float32", + "unit": "km/h", + "description": "Speedlimit. below set speed Stop inhibit is active", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_SpeedLimitHG", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_StandStillLoLim": { + "type": "Float32", + "unit": "km/h", + "description": "Low Speed Activation for Stand Still Time Constant", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_StandStillLoLim", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_FCAdaptIdle": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_FCAdaptIdle", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEmiGpfFC": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_UseEmiGpfFC", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_FCAdaptGearRst": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_FCAdaptGearSet": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_FCAdaptLockUpRst": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_FCAdaptLockUpSet": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_FCAdaptEngClntRst": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption reset", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_FCAdaptEngClntSet": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_FCAdaptEngRst": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption reset", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_FCAdaptEngSet": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_FCAdaptIdleDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Fuel cut request reset delay time off when not in idle", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/t_FCAdaptIdleDelayOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_FCAdaptVehRst": { + "type": "Float32", + "unit": "km/h", + "description": "Selected gear for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_FCAdaptVehSet": { + "type": "Float32", + "unit": "km/h", + "description": "Selected vehicle speed for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_DrLeaveKeepRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle keep engine running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeaveKeepRunReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_DrLeavePowerDown": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeavePowerDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_DrLeaveAutoParkReq": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveAutoParkReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_DrLeaveDCADly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveDCADly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_DrLeavePwrDwnDly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeavePwrDwnDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_DrLeaveLim": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to activate driver leave vehicle logic", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/v_DrLeaveLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_DrLeaveEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_DrLeaveEnable", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_FCAdaptEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_FCAdaptEnable", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_GlitchEngOnTrans": { + "type": "Bool", + "unit": "", + "description": "Use glitch block on eng run req trans", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_GlitchEngOnTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopTrans": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_MinStopTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_GlitchEngOnTrans": { + "type": "Float32", + "unit": "s", + "description": "Block transmission request if glitching", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_GlitchEngOnTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopTrans": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_MinStopTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopEMS": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/B_MinStopEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopEMS": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/t_MinStopEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopEmLv": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/B_MinStopEmLv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopEmLv": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/t_MinStopEmLv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopClim": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/B_MinStopClim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopClim": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/t_MinStopClim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopTm": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/B_MinStopTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopTm": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/t_MinStopTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopChas": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/B_MinStopChas", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopChas": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/t_MinStopChas", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_MinStopCEC": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/B_MinStopCEC", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_MinStopCEC": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/t_MinStopCEC", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PwrUpIceStrtReqUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Request first start if RunReqTrans is active at startup", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_PwrUpIceStrtReqUseTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SerialModeSafeBISG": { + "type": "Bool", + "unit": "-", + "description": "1= Use SafeBISG during serial mode start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_SerialModeSafeBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtMdeEscCond": { + "type": "Bool", + "unit": "-", + "description": "1=Use esc active condition for fast start mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeEscCond", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtMdeSkipTrnMde": { + "type": "Bool", + "unit": "-", + "description": "Skip trans mode term in fast start logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeSkipTrnMde", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_FastBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_FastBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_NormalBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_NormalBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_SafeBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_SafeBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_StrtDiffFast": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed diff for triggering fast map for start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/n_StrtDiffFast", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseStartModeHybrid": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch to use StartModeHybrid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/B_UseStartModeHybrid", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IgnoreGearLevRespStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore logic for responsive engine start as function of gear lever position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_IgnoreGearLevRespStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseFirstStartMode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseFirstStartMode", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseLastStrtMod": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to always request a safe start for the last start attempt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseLastStrtMod", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseStrtMde3All12vStrt": { + "type": "Bool", + "unit": "-", + "description": "Use Startmode3 in all 12V starts, also for slow engagements", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseStrtMde3All12vStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_AbortStart": { + "type": "UInt8", + "unit": "-", + "description": "Number of abroved start attempts", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/D_AbortStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EngmtModFast": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode fast", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModFast", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_GearLevRespStrtOK1": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK1", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_GearLevRespStrtOK2": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK2", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_StrtModDft": { + "type": "UInt8", + "unit": "-", + "description": "Default start mode", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_StrtModDft", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseStartModeHybrid12V": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch for StartModeHybrid12V", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/B_UseStartModeHybrid12V", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtMdeSet": { + "type": "Bool", + "unit": "-", + "description": "Set start mode in to OB-block", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeSet", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtMdeStopTrig": { + "type": "Bool", + "unit": "-", + "description": "Use transition Running->Stopping to set StartMode=running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeStopTrig", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_StrtMdeAcc": { + "type": "Float32", + "unit": "%", + "description": "Accelerator pedal limit to set StartMode=2", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/X_StrtMdeAcc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StrtMdeAccRst": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after releasing accelerator pedal", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRst", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StrtMdeAccRun": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after reaching Running", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StrtMdeRunning": { + "type": "Float32", + "unit": "s", + "description": "Deley for ICEStatus Running before set of B_StrtMdeRunning", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeRunning", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BrakeRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_BrakeRunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for FC Adapt run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_FCAdaptRunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_RunReqObdDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqObdDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_RunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_TransRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for trans run req to HMI-signal", + "max": 1000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_TransRunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_TransRunRqDlyMaxHmi": { + "type": "Float32", + "unit": "km/h", + "description": "Min speed to skip delay on fr trans run request in power meter logic", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/v_TransRunRqDlyMaxHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CTFStart": { + "type": "Bool", + "unit": "-", + "description": "Start Change of mind Test Function", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/B_CTFStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_CTF": { + "type": "UInt8", + "unit": "-", + "description": "Change of mind test function. A stop will be requested until a certain rpm threashold is reached.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/D_CTF2", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_CFTStop": { + "type": "Float32", + "unit": "rpm", + "description": "Rpm threashold for requesting a restart", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/n_CFTStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_CTFStop": { + "type": "Float32", + "unit": "s", + "description": "time for reaching a certain value until restart is triggered", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/t_CTFStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq": { + "type": "Bool", + "unit": "-", + "description": "Set fast engagement during ISG-start only after ISG-start has been requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_FastEngmtIsgStrtUseStartReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IgnrCcActive": { + "type": "Bool", + "unit": "-", + "description": "Ignore cruise control active condition", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_IgnrCcActive", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EngmtModSmooth": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode smooth", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModSmooth", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max brake torque request to request fast engagement mode during ISG-start", + "max": 100000, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Tq_FastEngmtIsgStrtBrkTqMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%", + "description": "Min acclerator position to set fast engagement torque demand", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/X_AccPedFastEngmtMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Xd_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%/s", + "description": "Min accelerator pedal derivative to set fast engagement", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Xd_AccPedFastEngmtMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngEngmtFastRstDelay": { + "type": "Float32", + "unit": "ns", + "description": "Delay resetting EngEngmtFast flag since this is used after TransMode == Engaged", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/t_EngEngmtFastRstDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_AccPedDer": { + "type": "Float32", + "unit": "s", + "description": "Time constant of accelerator pedal low pass derivative filter", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/tc_AccPedDer", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_ATComStrt": { + "type": "Bool", + "unit": "-", + "description": "Change of mind situation can set StartAllowedPath (even if PowerTrainDisengaged=0) as long as EngOnReqTrans is still =1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_ATComStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbsStrt": { + "type": "Bool", + "unit": "-", + "description": "Block start if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_AbsStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_BrkStrt": { + "type": "Bool", + "unit": "-", + "description": "Block/delay start if ABS Pump is active (indicated by EngRunngReqByBrk == 1)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_BrkStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_DepStop": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_DepStrt": { + "type": "Bool", + "unit": "", + "description": "Use Dep Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngRunReqTot_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_RunOnReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngRunReqTot_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngRunReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_LosStop": { + "type": "Bool", + "unit": "-", + "description": "UseLOS Stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_LosStrt": { + "type": "Bool", + "unit": "-", + "description": "Use LOS Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PTDStrt": { + "type": "Bool", + "unit": "-", + "description": "Use powertrain disengaged to allow a start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_PTDStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_RcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Use ShutOffReq from VcPpmRc (dual mass flywheel protection)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_RcShutOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_Use7DCT": { + "type": "Bool", + "unit": "-", + "description": "switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_Use7DCT1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseAgedFuel": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FsdPc aged fuel", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseAgedFuel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseBrake": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseBrake", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseCEC": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from CEC (replaces EMS and TM)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseCEC", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseChas": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseChas", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseClim": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseClim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseDep": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from dependability", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDep", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Driver Leave Logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDrLeave", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseDriver": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDriver", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEMS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEmLv": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEmLv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEngClntRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngClntRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEngOffMaxTime": { + "type": "Bool", + "unit": "-", + "description": "Enable counter for max time for the engine to be shut off.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOffMaxTime", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEngOnOff": { + "type": "Bool", + "unit": "", + "description": "Hold eng running after an restart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOnOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FC Adaptiotion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFCAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseFanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to Fan Afterrun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFanAfterrun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIceStall": { + "type": "Bool", + "unit": "-", + "description": "Enable engine run request due to engine stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIceStall", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsg": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from 'Isg availble torque'", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIsg", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseLOS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseLOS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseObd": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseObd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UsePsm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UsePsm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRc": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from PpmRc (Starter protection etc)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRemoteStart": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRemoteStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRunDryInhb": { + "type": "Bool", + "unit": "-", + "description": "1-Block clutch, ISG and 12V Start if RunDry i set, 0-engine start possible.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhb", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRunDryInhbOnly": { + "type": "Bool", + "unit": "-", + "description": "If TRUE, engine can start as soon as RunDry AND RunDryCrnkInhb flags go done, otherwise a car restart is also needed.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhbOnly", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseSapp": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseSapp", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from StabilityCtlr (sVcVmcAwd_D_EngRunReqStabCtrl)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStabCtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseStartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStartAllowedPath", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseTm": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from tm (replace run req EMS in PHEV)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseTotEngRunReq": { + "type": "Bool", + "unit": "", + "description": "Use Total EngRunReqs instead of micro hybrid: wait for driver to be last system", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTotEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseTrans": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseWait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "When enabled, the engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseWait4Eng2Stop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_StartMode_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_StartMode_swi": { + "type": "Bool", + "unit": "-", + "description": "Calibration of start mode during development", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_EngClntEngOffReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature raises above this value, the ICE is allowed to be stopped", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngOffReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_EngClntEngRunReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature drops below this value, an ICE start is requested", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_FanAfterrunLimHi": { + "type": "Float32", + "unit": "%", + "description": "High threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimHi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_FanAfterrunLimLo": { + "type": "Float32", + "unit": "%", + "description": "Low threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimLo", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_IceStallMax": { + "type": "Float32", + "unit": "rpm", + "description": "Maximum engine speed where IceStall signal is allowed to shut down engine", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_IceStallMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_Wait4Eng2StopLim": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_Wait4Eng2StopLimHigh": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHigh", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_Wait4Eng2StopLimHighTest": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed condition used for testing", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHighTest", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_ATComStrt": { + "type": "Float32", + "unit": "s", + "description": "Duration to allow Change of mind restart (without PowerTrainDisengaged) on AT after EngOnReqTrans deactivation", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_ATComStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_AbsStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no start after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_AbsStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BrkStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding Brake inhibit active (actually ABS pump active), used to ensure no start during ABS pump active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_BrkStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngOffFcAdapt": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request durign FC request condition", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffFcAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngOffMax": { + "type": "Float32", + "unit": "s", + "description": "Max time for the engine to be shut off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngOnOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running after an restart this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOnOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_FanAfterrunDelay": { + "type": "Float32", + "unit": "s", + "description": "Deley for Eng On Req due to afterrun", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_FanAfterrunDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_Wait4Eng2StopTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4Eng2Stop-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4Eng2StopTiOut", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_Wait4EngRunReqTot": { + "type": "Float32", + "unit": "s", + "description": "Time delay for the EngRunReqTot-signal (necessary to solve the algebraic loop caused by the Wait4CluStrt-logic)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4EngRunReqTot", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_WaitToReset": { + "type": "Float32", + "unit": "s", + "description": "for this amount of time, is it ok for all other EngRunReqs to become 0, uhev", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_WaitToReset", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_WaitToReset": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop for a while after EngRunReqDriver condition", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/v_WaitToReset", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeUseC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "Use transmode request to help buld up C3 oil pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/B_TrnMdeUseC3OilPres", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "deg C", + "description": "Mac gearbox temperature for enabling C3 oil pressure build up function", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/Te_TrnMdeC3OilPresMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "s", + "description": "Max duration to build up oil pressure in C3 clutch", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/t_TrnMdeC3OilPresMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral during C3 oil pressure build up", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/v_TrnMdeC3OilPresMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnEngBlockSkipEngUseReq": { + "type": "Bool", + "unit": "-", + "description": "Skip EngUseReq term in TrnEngBlock logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnEngBlockSkipEngUseReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeUseAwd": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Stability/Traction control run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseAwd", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeUseBrake": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Brake run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseBrake", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeUsePcr": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when PCR run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUsePcr", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Transmission run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_TrnEngBlockMin": { + "type": "Float32", + "unit": "rpm", + "description": "Max speed for blocking TrnMode", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/n_TrnEngBlockMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_TrnEngBlockMax": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngBlockMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_TrnEngCatHeatDly": { + "type": "Float32", + "unit": "s", + "description": "delay off for catalyst heat", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngCatHeatDly", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_TrnEngRpmDly": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngRpmDly", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_TrnEngBlockMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed for blocking TrnMode", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/v_TrnEngBlockMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeReqBrk": { + "type": "Bool", + "unit": "", + "description": "Use EngRunReqBrakes for use with Idle Coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/B_TrnMdeReqBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEradHybrid": { + "type": "Bool", + "unit": "-", + "description": "Activate for hybrid cars with an ERAD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UseEradHybrid", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UsePropFrntRampDown": { + "type": "Bool", + "unit": "-", + "description": "1= Use sVcVmcAjc_Tq_DrPropFrntReq,0 = use sVcDtcCta_Tq_CrShInstReq to determine if torque is ramped down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UsePropFrntRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_DrCrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when driver requested CrSh torque is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_DrCrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when Driver requested CrSh torque is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_PropFrntRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop front is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_PropFrntRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop frontt is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_CrShPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the ICE (when closing the crankshaft path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/t_CrShPahDiTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CrShPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CrShPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CrShaftRampDownIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore to wait for the tq to have ramped out before turning off the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShaftRampDownIgnore", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_DepStopAT": { + "type": "Bool", + "unit": "-", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_DepStopAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngOnDelayIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore delay for EnOnReq off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_EngOnDelayIgnore", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IgnrPropAlwdCrSh": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Crankshaft Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_IgnrPropAlwdCrSh1", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeHev": { + "type": "Bool", + "unit": "-", + "description": "Use Hybrid logic (Enables serial mode) for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHev", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeHevUseNIC": { + "type": "Bool", + "unit": "-", + "description": "Use NIC ih hybrid vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHevUseNIC", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnMdeIC": { + "type": "Bool", + "unit": "", + "description": "Use Idle coast for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeIC", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseOldEngRevStgy": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable the old strategy for engine revving in Park or Neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_UseOldEngRevStgy", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_GearTotNtrl": { + "type": "Int8", + "unit": "-", + "description": "Gear threashold to go to total neutral", + "max": 9, + "min": -1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_GearTotNtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_TransModeReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_TransModeReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_TrnMdeHevReqEngNIC": { + "type": "UInt8", + "unit": "-", + "description": "Transmode NIC request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeHevReqEngNIC", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_TrnMdeReqEng": { + "type": "UInt8", + "unit": "-", + "description": "Transmode request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqEng", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_TrnMdeReqNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqNtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_TrnMdeReqTotNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest total neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqTotNtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_CrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped down", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_CrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_EngOnDelayOff": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed offset from idle for delay of EngOnReq (Off)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/n_EngOnDelayOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngOnDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Deley ftime for EngOnReq off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_EngOnDelayOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_GearLevPNDlyOn": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of gear lever in park or neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_GearLevPNDlyOn", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgIceStopACCTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown during ACC active", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopACCTimeout", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgIceStopTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopTimeout", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EngStopReqAT": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop request", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_EngStopReqAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_ReqEngDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_ReqEngDrDir", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_TotNtrlReset": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to exit total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlReset", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_TotNtrlSet": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_TotNtrlVehDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlVehDrDir", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "s", + "description": "No stall recoverty to close to fisrt start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtFrstStrtStall", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "", + "description": "demand neutral to be valid for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtNtrlAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on StrtAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallAbortHard", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Engine coolant temperature low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallEngClntL", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "", + "description": "Stallrecoveryonly if an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallGp", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on MicHevMode set to stop/start off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallMicHev", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcShutOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallRcvInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if veh is in higher speed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcvInSpd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Driver Seat Belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSeatBelt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "Set enable stall recovery if vehicle have crashed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSsRcfSet", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "", + "description": "power down after a certain time in stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallTime", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallEmiExtraCond": { + "type": "Bool", + "unit": "-", + "description": "Use extra conditions for StartMode=0 Ice Stall detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallEmiExtraCond", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Activate logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtActrFinishd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "Debug variable to enable ice stall detection during emission starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtEmi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Set stall flag on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcShutOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery in an AT vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAT", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcvAccFtOnPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on acc pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAccFtOnPed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcvClOnly": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery when it is enough with only clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvClOnly", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcvCrnk": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery on driver cranking", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvCrnk", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcvFootOnBrPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on brake pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFootOnBrPed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRcvFrcd": { + "type": "Bool", + "unit": "s", + "description": "stall recovery if an forced start is conductred", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFrcd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRun": { + "type": "Bool", + "unit": "", + "description": "Allow stall to happen via running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to temporarily prevent StallRun detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunComInhbt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRunHiRes": { + "type": "Bool", + "unit": "-", + "description": "Use sVcEc_n_EngHiRes to detect StallRun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunHiRes", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRunStartM": { + "type": "Bool", + "unit": "-", + "description": "Prevent StallRun if starter motor has engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunStartM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Use stall detection by RPM as input to Unintended Stall flag to EMS", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunUnintd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StallStartM": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallStartM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbortClu": { + "type": "Bool", + "unit": "-", + "description": "Clutch start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortClu", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortHard", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbortIsg": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection for Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortIsg", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbortSoft": { + "type": "Bool", + "unit": "", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortSoft", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abortion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtAcc": { + "type": "Bool", + "unit": "", + "description": "start abort if no accelerator pedal is pressed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtAcc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtCl": { + "type": "Bool", + "unit": "", + "description": "start abort on clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtCl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtDrReady": { + "type": "Bool", + "unit": "-", + "description": "start abort only if not DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtDrReady", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtIce": { + "type": "Bool", + "unit": "", + "description": "Start abort only when ice status is in starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtIce", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtNtrl": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtNtrlValid": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral and neutral is valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrlValid", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtRpm": { + "type": "Bool", + "unit": "", + "description": "start abort on rpm limit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtRpm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_StrtAbrtStrtM": { + "type": "Bool", + "unit": "", + "description": "Start abort only when the startmotor is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtStrtM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UnintdStallRcShOff": { + "type": "Bool", + "unit": "-", + "description": "Set Unintended stall on yVcPpmRc_B_ShutOffReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UnintdStallRcShOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseClPedAdaptStallRecovery": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStallRecovery1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseClPedAdaptStrtAbrt": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStrtAbrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseDesDrvDir": { + "type": "Bool", + "unit": "-", + "description": "Use desired driver direction as condition for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseDesDrvDir", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseStallRcvBlock": { + "type": "Bool", + "unit": "-", + "description": "Use stall recovery block from FsdPc, empty fuel tank.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseStallRcvBlock", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_AbrtStallEngClntL": { + "type": "Float32", + "unit": "deg C", + "description": "Min Engine Cooland Temperature to do stall recovery", + "max": 160, + "min": -80, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Te_AbrtStallEngClntL", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_StallRcvClNtrl": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClNtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_StallRcvClOnly": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClOnly", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_StrtAbrtAcc": { + "type": "Float32", + "unit": "%", + "description": "accelerator pedal limit to deactivate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtAcc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_StrtAbrtCl": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal released to activate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtCl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_EngStalled": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stalled", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_EngStalled", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum engine speed for StartMode=0 before an Ice Stall is detected", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallEmiMinEngSpd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_StallRcv": { + "type": "Float32", + "unit": "rpm", + "description": "Max rpm for stall recovery", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallRcv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_StrtAbrtRpm": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to allow a start abortion", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StrtAbrtRpm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_AbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes re-allowed after first start (set higher value than t_BlockAbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtFrstDrCycle", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_AbrtStall": { + "type": "Float32", + "unit": "s", + "description": "time in stall to trigger a powerdown", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtStall", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BlockAbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes disallowed after first start (set lower value than t_AbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_BlockAbrtFrstDrCycle", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngRunStall": { + "type": "Float32", + "unit": "s", + "description": "Time for engine running before reset stall counter", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_EngRunStall1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStrtPahReqTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for an ISG start path request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_IsgStrtPahReqTiOut", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of low engine speed for StartMode=0", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallEmiMinEngSpd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallIceStrt": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallIceStrtActrFinishd": { + "type": "Float32", + "unit": "s", + "description": "Time delay to detect that the ICE start was not successful after the start actuator is finished", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtActrFinishd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallIceStrtEmi": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallIceStrtEmiExtra": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts with extra logic)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmiExtra", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallIceStrtIsgDrv": { + "type": "Float32", + "unit": "ns", + "description": "Time from EngOnReq until a stall is determined when performing an ISG-start while gear leaver is placed in Drive (only for HEP7)", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtIsgDrv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallRcvClDelay": { + "type": "Float32", + "unit": "s", + "description": "Time delay until clutch sets OK to start.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvClDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallRcvNeutral": { + "type": "Float32", + "unit": "s", + "description": "Time in Neutral until trigger start", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvNeutral", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallRun": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallRunComInhbt": { + "type": "Float32", + "unit": "s", + "description": "Max time that ChangeOfMindInhibit signal can override StallRun detection", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunComInhbt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallRunUnintd": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until an Unintended stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunUnintd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StallStrtM": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallStrtM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_StrtAbrt": { + "type": "Float32", + "unit": "s", + "description": "time from triggering an start abortion until requesting an stall", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StrtAbrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_StallRcvStart": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed to allow stall restart on only cl or/and neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallRcvStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_StallReset": { + "type": "Float32", + "unit": "km/h", + "description": "Stall recovery when vehicle is near standing still", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallReset", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_VehMaxStallRcv": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to do stall recovery", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_VehMaxStallRcv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_ERADTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override EradTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_ERADTqAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EradIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Erad Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradIgnrPathDisable", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EradPathEnable_dbi": { + "type": "Bool", + "unit": "", + "description": "override EradPath with this switch,", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EradPathEnable_swi": { + "type": "Bool", + "unit": "", + "description": "override EradPath using this switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EradRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_EradReqWhl, If 0 => sVcIsc_Tq_Erad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradRmpDwnTqSignal", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi": { + "type": "Int8", + "unit": "-", + "description": "Debug value", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_ERADRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/Tq_ERADRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EradDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradDisable", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EradNtrlGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time in neutral for Erad disable", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradNtrlGlitch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EradOffGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time disengage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOffGlitch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EradOnGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time engage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOnGlitch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EradOffSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad disengage speed to high", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOffSpdLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EradOnSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad engage speed limit", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOnSpdLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EradSpdCtrl": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed to request erad idle speed (speed control)", + "max": 500, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradSpdCtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEradCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/B_UseEradCode", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EpbCoding1": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EpbCoding2": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EpbCoding3": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EpbCoding4": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseAwdRoadGrad": { + "type": "Bool", + "unit": "-", + "description": "Use Awd road grad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/B_UseAwdRoadGrad", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_LatAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Lat acc filter constant", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/tc_LatAccFilt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna": { + "type": "Bool", + "unit": "-", + "description": "Enable aborting ISG-start in D/R", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtGearLvrDRAbortEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtInDUseEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Trigger ISG-start in D if Efad actual path is already ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtInDUseEfadPathAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStrtAtStndStill": { + "type": "Bool", + "unit": "-", + "description": "When enabled, every engine start will be an ISG-start when standing still and brakes are applied", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_UseIsgStrtAtStndStill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadIsgStrLoosenLim": { + "type": "UInt8", + "unit": "-", + "description": "When the number of ISG start attempts exceed this limit, the conditions for the next ISG-start attempt will be loosen", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/D_EfadIsgStrLoosenLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_Efad12VStrtEngClntMin": { + "type": "Float32", + "unit": "deg C", + "description": "Minimum coolant temperature to allow 12V-starts", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Te_Efad12VStrtEngClntMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_EfadIsgStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_EfadIsgStrtDiFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDiFlt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_EfadIsgStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_EfadIsgStrtEnaFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEnaFlt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of requested brake torque when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_BrkLimIsgStrtGearLvrDR", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStrtWhlTrqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of the driver request being low enough to request an ISG-start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_IsgStrtWhlTrqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "ns", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of vehicle speed when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_VehSpdLimIsgStrtGearLvrDR", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "m/s", + "description": "Vehicle speed limit to be able to request an ISG-start when gear lever is placed in Drive", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/v_VehSpdLimIsgStrtGearLvrDR", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_Efad12VStrtEnblIngoreDep": { + "type": "Bool", + "unit": "-", + "description": "If false 12VStartEnable can not be set without having permission from Dep(StartAllowed = True)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_Efad12VStrtEnblIngoreDep", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadUse12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_EfadUse12VStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadUseFactory12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable/disable forced 12V-start when in factory mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_EfadUseFactory12VStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseDly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Enable delay of 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseDly12VStrtVehPwrUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseWait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseWait4CluStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_IceStsStarting": { + "type": "UInt8", + "unit": "-", + "description": "An extra calibration possibility to block a start actuator", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/D_IceStsStarting", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_Wait4CluStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is above this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_Wait4CluStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is below this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_Wait4CluStrtDi": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_Wait4CluStrtEna": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_a_Wait4CluStrtDi": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_a_Wait4CluStrtEna": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_12VStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow 12V start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/n_12VStrtAllwdEngSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_FirstStrtDlyOff": { + "type": "Float32", + "unit": "s", + "description": "Time out delay for waiting with an ISG-start request during first start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_FirstStrtDlyOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_Wait4CluStrtTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4ClutStart-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_Wait4CluStrtTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_tc_VdmAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for vehicle acceleration signal from VDM", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/tc_VdmAccFilt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_Efad12VStartMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed for 12V start motor crank", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMax1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_Efad12VStartMin": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed for 12V start motor crank", + "max": 250, + "min": -250, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/B_UseEngOnReqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_TrnOil": { + "type": "Float32", + "unit": "deg C", + "description": "Allow for a longer first start time (from button press to ICE running) if the transmission oil temperature is low", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Te_TrnOil", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_IsgStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/n_IsgStrtAllwdEngSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_rt_EfadLowAvailTrq": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque losses to allow an ISG-start attempt", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/rt_EfadLowAvailTrq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_DrvCycActvFirstStrt": { + "type": "Float32", + "unit": "s", + "description": "Timeout for first start logic connected to the DriveCycleActive signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_DrvCycActvFirstStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadLowAvailTrqDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of maximum Efad torque losses to allow an ISG-start attempt", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EfadLowAvailTrqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngOnReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay for EngOnReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EngOnReqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CluStrtInDeplBlk": { + "type": "Bool", + "unit": "-", + "description": "Block Clutch Start in Depletion Operation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_CluStrtInDeplBlk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IgnrDepl": { + "type": "Bool", + "unit": "-", + "description": "When enabled, this label will ignore the depletion-conditon for blocking clutch starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IgnrDepl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna": { + "type": "Bool", + "unit": "-", + "description": "Block clutch start if run req is set by fast ISG stop function, to enable use of ISG-start in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IsgStopRunReqCluStrtBlkEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "Protection for only blocking clutch start when 12V starter is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_Use12vStrtPsblInCluStrtAbort", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRespStartReqFromDeDmm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from DeDmm for blocking CluStrt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartReqFromDeDmm", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRespStartreqFromVmcEm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from VmcEm for evaluating CluuStrtBlk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartreqFromVmcEm", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw": { + "type": "Bool", + "unit": "-", + "description": "Choose which resp start request to block the possiblity to request a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStrtReqInCluStrtAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseTqOffsForCluStrtEval": { + "type": "Bool", + "unit": "-", + "description": "Inhibit clutch start if no Efad torque reserve is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseTqOffsForCluStrtEval", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_n_CluStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow clutch start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/n_CluStrtAllwdEngSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_CluStrtSpdAllw": { + "type": "Float32", + "unit": "km/h", + "description": "Speed-limits for allowing clu-strt instead of 12V start", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/v_CluStrtSpdAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStrtTrigNewPos": { + "type": "Bool", + "unit": "-", + "description": "Use new position of flank trigger for 12V-start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtTrigNewPos", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CluStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CluStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CluStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_CluStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadUseCluStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseCluStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadUseIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseIsgStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtPahReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtPahReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_Efad12VStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of 12V start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_Efad12VStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadCluStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of clutch start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadCluStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadIsgStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of ISG start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadIsgStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_rt_EfadStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque loss to permit Efad start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/rt_EfadStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_12VStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_12VStrtActrRdyDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_CluStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_CluStrtActrRdyDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from Efad or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_EfadRunReqDelay", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IceRunng12VStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for a 12V-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunng12VStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IceRunngCluStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an clutch-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngCluStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IceRunngIsgStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngIsgStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IsgStrtActrRdyDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadCluStrtDi": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to prevent a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadCluStrtEna": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to enable a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request during cat heating", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_CatHeatVehSpdOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_VehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_VehSpdOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Ignore actual Efad path to allow eng run req ISG stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_IsgStopRunReqIgnrEfadPathAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request after ISG-stop is completed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopPostRunReqStandstill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqCoast", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqStandstill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngRunReqIsgStopMax": { + "type": "Float32", + "unit": "s", + "description": "Max time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EngRunReqIsgStopMin": { + "type": "Float32", + "unit": "s", + "description": "Min time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_TrnModIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode signal to be used for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_TrnModIsgReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseChargeInIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Use Charge from VmcEm for concidering IsgReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseChargeInIsgReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when braking in stand still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStandStill": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when standing still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStandStill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopCoast", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopPwrDwn", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_EfadBrkOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBrkTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "VcVmcBsl torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBslTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_IsgStopCoastDrReqHyst": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast, hysteresis", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqHyst1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMin": { + "type": "Float32", + "unit": "Nm", + "description": "Min driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "%", + "description": "Acc ped limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_EfadAccPedOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_IsgStopRoadGradMax": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_X_IsgStopRoadGradMaxHyst": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill, hysteresis", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMaxHyst", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_ChrgReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay time for Em_B_ChrgReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_ChrgReqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the acc ped level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadAccPedOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the brake torque level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadBrkOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadIceStsDlyIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection that Pmm_D_IceStatus = running", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadIceStsDlyIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadVehSpdOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_GearLevNDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Neutral", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_GearLevNDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of brake torque OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBrkTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of VcVmcBsl torque request being low enough for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBslTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of vehicle speed OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillVehSpdOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdNOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdNOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed is low enough for an ISG-request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStandStillVehSpdOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_IsgStopCoastSpdHyst": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast, hysteresis", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdHyst", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_IsgStopCoastSpdMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_IsgStopCoastSpdMinOff": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_IsgStopCoastSpdMinOn": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOn", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadGearLvrPNDisengEna": { + "type": "Bool", + "unit": "-", + "description": "Disengage Efad in gear lever position Park and Neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadGearLvrPNDisengEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadPathEnaParkEngd": { + "type": "Bool", + "unit": "-", + "description": "Enable Efad path disregarding park engaged status", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnaParkEngd", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EfadPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IgnrPropAlwdEfad": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Efad Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdEfad", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IgnrPropAlwdIsg": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Isg Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdIsg", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadModReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadModReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadPathAllwd1": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadPathAllwd2": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadPathReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_EfadPathReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadDrvCycTiOut": { + "type": "Float32", + "unit": "s", + "description": "Limit for drivecycle timeout indication", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadDrvCycTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadGearLvrPNDetn": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of when the gear lever is in park or neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadGearLvrPNDetn", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the EFAD path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadPahDiTiOut2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadShftProgsOffDly": { + "type": "Float32", + "unit": "s", + "description": "CAN delay compensation for EfadShiftInProgress-signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsOffDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadShftProgsTimeOut": { + "type": "Float32", + "unit": "s", + "description": "Time out detection for Efad gear shifting", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsTimeOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_EfadTrqAllowTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout before torque allow from dep disables Tq-ctrl", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadTrqAllowTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_GearLevDRDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Drive or Reverese", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_GearLevDRDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgDrCycStop": { + "type": "Float32", + "unit": "s", + "description": "Keep ISG activation for a short time after engine has been stopped", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStop", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgDrCycStopMax": { + "type": "Float32", + "unit": "s", + "description": "Allow keep ISG activation after end of drive cycle, intended for soft stop", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStopMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the ISG path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgPahDiTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_EfadGearLvrPNDiseng": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to keep Efad engaged to wheels in P/N", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/v_EfadGearLvrPNDiseng", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseEfadCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/B_UseEfadCode", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_12VStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtFirstStartOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtFirstStartOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtPcrOverride": { + "type": "Bool", + "unit": "-", + "description": "Override PCR in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtPcrOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtRunDryOverride": { + "type": "Bool", + "unit": "-", + "description": "Override run dry condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtRunDryOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtSpdCtrlOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtSpdCtrlOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtTempOverride": { + "type": "Bool", + "unit": "-", + "description": "Override temp condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtTempOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseOilTemp": { + "type": "Bool", + "unit": "-", + "description": "Use oil temperature to determine if ISG start i possible", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_UseOilTemp", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Pw_IsgStrtAllow": { + "type": "Float32", + "unit": "W", + "description": "Minimum available ISG power to allow ISG start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Pw_IsgStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Te_IsgStartPossible": { + "type": "Float32", + "unit": "deg C", + "description": "Use oil temperature to determine if ISG start i possible", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Te_IsgStartPossible", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_rt_IsgStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/rt_IsgStrtAllow", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from ISG or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgRunReqDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgStrtOkDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay to wait on Isg start Ok", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/t_IsgStrtOkDelay", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_v_12VStrtMax": { + "type": "Float32", + "unit": "km/h", + "description": "Maximum speed for 12V start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/v_12VStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgStrtUseSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/B_IsgStrtUseSpdCtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_ISGTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override ISGTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_ISGTqAllw", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Isg Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgIgnrPathDisable", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_IsgRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_IsgReq, If 0 => sVcIsc_Tq_Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgRmpDwnTqSignal", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_SkipIsgCalibration": { + "type": "Bool", + "unit": "-", + "description": "Skip ISG standby request at Ice stop for sensor calibration", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_SkipIsgCalibration", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgSpdCtrlStrt": { + "type": "Bool", + "unit": "-", + "description": "Use ISG speed control during safe start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_UseIsgSpdCtrlStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_IsgRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Tq_IsgRampDown", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgAdapt": { + "type": "Float32", + "unit": "s", + "description": "Time for ISG calibration request", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgDisable", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_IsgICEStop": { + "type": "Float32", + "unit": "s", + "description": "Delay on for ICE stop for ISG stanby request", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgICEStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIsgCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/B_UseIsgCode", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_Tq_TransHeatReqOffset": { + "type": "Float32", + "unit": "Nm", + "description": "Torque offset to reset heat request to TmStrt", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReqOffset", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_t_TransHeatDelayOn": { + "type": "Float32", + "unit": "s", + "description": "Delay on time for trans heat request", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/t_TransHeatDelayOn", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_PTDGearLevAT": { + "type": "Bool", + "unit": "-", + "description": "Use Gear Lever position to set powertrain disengaged.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_PTDGearLevAT", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseIceEnable": { + "type": "Bool", + "unit": "-", + "description": "Use ICE enable", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseIceEnable", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_UseOld12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOld12VStrtAllwd", + "configs": [ + [ + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9"]], + "width": 1}, + "cVcVmcPmm_B_UseOldEngStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOldEngStrtAllwd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngOnReq_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngOnReq_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_B_EngineArchitecture": { + "type": "Bool", + "unit": "-", + "description": "Switch for signal conditioning depending on engine architecture. 0= VEA GEN I/II ; 1= GEP3", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/B_EngineArchitecture", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "cVcVmcPmm_D_DrDoorOpen": { + "type": "UInt8", + "unit": "-", + "description": "DoorDrvrSts detection of driver door open", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/D_DrDoorOpen", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": 1}, + "tVcVmcPmm_p_BrVacuumVeh_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh_x", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 7]}, + "tVcVmcPmm_Z_HillGradAcc2deg_x": { + "type": "Float32", + "unit": "m/s2", + "description": "X-value (longit. accel. input), relation of accel. to slope(deg);", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg_x", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 5]}, + "mVcVmcPmm_tc_HillGradient_c": { + "type": "Float32", + "unit": "Nm", + "description": "Total Wheel Trq Brake", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_c", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 4]}, + "mVcVmcPmm_tc_HillGradient_r": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_r", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 6]}, + "mVcVmcPmm_Z_BrkRoadIncline_c": { + "type": "Float32", + "unit": "-", + "description": "Road inclination", + "max": 100000, + "min": -100000, + "lsb": 0.0625, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_c", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 8]}, + "mVcVmcPmm_Z_BrkRoadIncline_r": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque", + "max": 100000, + "min": -100000, + "lsb": 0.25, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_r", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 8]}, + "tVcVmcPmm_Tq_IsgStrtAllow_x": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow_x", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 6]}, + "tVcVmcPmm_Tq_TransHeatReq_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq_x", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 6]}, + "tVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart, depending on vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 7]}, + "tVcVmcPmm_Z_HillGradAcc2deg": { + "type": "Float32", + "unit": "Deg", + "description": "Hill Gradient i degree", + "max": 90, + "min": -90, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 5]}, + "mVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "Hill Gradient Time Constant for filter depending on TrqWhlBrk and Vehicle Speed.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [6, 4]}, + "mVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [8, 8]}, + "tVcVmcPmm_Tq_IsgStrtAllow": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum available ISG torque to allow ISG start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 6]}, + "tVcVmcPmm_Tq_TransHeatReq": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum torque to send heat request to TmStrt to warm transmission oil", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11"]], + "width": [1, 6]}}} diff --git a/tests/pybuild/cnfg_files/expected_signals_in_nvm_structs.json b/tests/pybuild/cnfg_files/expected_signals_in_nvm_structs.json new file mode 100644 index 0000000..e46eb68 --- /dev/null +++ b/tests/pybuild/cnfg_files/expected_signals_in_nvm_structs.json @@ -0,0 +1 @@ +{"SIG8": {"memory_area": "NVM_LIST_8", "signal_index": 0}, "SIG16": {"memory_area": "NVM_LIST_16", "signal_index": 0}, "SIG32": {"memory_area": "NVM_LIST_32", "signal_index": 0}, "SIG8P": {"memory_area": "NVM_LIST_8_PER", "signal_index": 0}, "SIG16P": {"memory_area": "NVM_LIST_16_PER", "signal_index": 0}, "SIG32P": {"memory_area": "NVM_LIST_32_PER", "signal_index": 0}} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_ invalid name.json b/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_ invalid name.json new file mode 100644 index 0000000..af90f85 --- /dev/null +++ b/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_ invalid name.json @@ -0,0 +1,171 @@ +{ + "version": "0.2.1", + "outports": { + "yVcAesSupM_B_SupChrgrErr": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1", + "name": "yVcAesSupM_B_SupChrgrErr", + "configs": [ + "all"], + "description": "Supercharger Peak Pressure engine protection activation flag", + "type": "Bool", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP"}}, + "inports": { + "yVcEc_B_ObdExe": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal1", + "name": "yVcEc_B_ObdExe", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "OBD execution flag", + "type": "Bool", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT"}, + "sVcEc_p_Amb": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3", + "name": "sVcEc_p_Amb", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 200, + "class": "CVC_EXT"} + }, + "core": { + "Events": { + "VcEvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPF1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}, + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPP1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Dem_SetEventStatus Pre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "IUMPR": {}, + "FIDs": { + "VcFiSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/FiM_GetFunctionPermission", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond", + "API_blk_type": "FiM_GetFunctionPermission", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "Ranking": { + "VcRvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Vc_SetRanking", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant1", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "TstId": {}}, + "dids": {}, + "nvm": {}, + "pre_procs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "local_vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "type": "Float32", + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"}, + "rVcAesSupM_p_SupMonrPDif": { + "type": "Float32", + "unit": "kPa", + "description": "Supercharger actual and target pressure difference", + "max": "300", + "min": " 300", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"}, + "rVcAesSupM_p_SupChrgrPDsAtmDiff": { + "type": "Float32", + "unit": "kPa", + "description": "Over pressure downstream supercharger", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + }, + "calib_consts": { + "cVcAesSupM_B_SupMonrHiBypFiMPerm": { + "type": "Bool", + "unit": "", + "description": "Switch to bypass FiM permission supercharger high boost monitor", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + } +} diff --git a/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidConfig.json b/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidConfig.json new file mode 100644 index 0000000..a6dc8bf --- /dev/null +++ b/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidConfig.json @@ -0,0 +1,168 @@ +{ + "version": "0.2.1", + "outports": { + "yVcAesSupM_B_SupChrgrErr": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1", + "name": "yVcAesSupM_B_SupChrgrErr", + "configs": [], + "description": "Supercharger Peak Pressure engine protection activation flag", + "type": "Bool", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP"}}, + "inports": { + "yVcEc_B_ObdExe": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal1", + "name": "yVcEc_B_ObdExe", + "configs": [], + "description": "OBD execution flag", + "type": "Bool", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT"}, + "sVcEc_p_Amb": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3", + "name": "sVcEc_p_Amb", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 200, + "class": "CVC_EXT"} + }, + "core": { + "Events": { + "VcEvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPF1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}, + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPP1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Dem_SetEventStatus Pre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "IUMPR": {}, + "FIDs": { + "VcFiSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/FiM_GetFunctionPermission", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond", + "API_blk_type": "FiM_GetFunctionPermission", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "Ranking": { + "VcRvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Vc_SetRanking", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant1", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "TstId": {}}, + "dids": {}, + "nvm": {}, + "pre_procs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "local_vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "type": "Float32", + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"}, + "rVcAesSupM_p_SupMonrPDif": { + "type": "Float32", + "unit": "kPa", + "description": "Supercharger actual and target pressure difference", + "max": "300", + "min": " 300", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"}, + "rVcAesSupM_p_SupChrgrPDsAtmDiff": { + "type": "Float32", + "unit": "kPa", + "description": "Over pressure downstream supercharger", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + }, + "calib_consts": { + "cVcAesSupM_B_SupMonrHiBypFiMPerm": { + "type": "Bool", + "unit": "", + "description": "Switch to bypass FiM permission supercharger high boost monitor", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + } +} diff --git a/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidJsonData.json b/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidJsonData.json new file mode 100644 index 0000000..70b4a17 --- /dev/null +++ b/tests/pybuild/cnfg_files/invalid_unit_cfgs/config_InvalidJsonData.json @@ -0,0 +1,15 @@ +{ + "outports": { + "yVcAesSupM_B_SupChrgrErr": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1", + "name": "yVcAesSupM_B_SupChrgrErr", + "configs": [ + "all"], + "description": "Supercharger Peak Pressure engine protection activation flag", + "type": "Bool", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP"}}, diff --git a/tests/pybuild/cnfg_files/label_split_cfg.json b/tests/pybuild/cnfg_files/label_split_cfg.json new file mode 100644 index 0000000..302c502 --- /dev/null +++ b/tests/pybuild/cnfg_files/label_split_cfg.json @@ -0,0 +1,29 @@ +{ + "SGP_SYMBOL_GROUPS": { + "HYBRID": 4, + "HEP": 4, + "VEP": 3, + "GEP": 3, + "VED": 2, + "CSP": 4 + }, + "SGP_FILE": { + "cfg_folder": "ConfigDocuments", + "debug": "VcDebug_sgp.xml", + "debug_output": "VcDebugOutput_sgp.xml", + "dep": "VcDebugSafe_sgp.xml", + "dep_output": "VcDebugOutputSafe_sgp.xml" + }, + "security_variables": [ + "sVcModel_D_SecurityOne", + "sVcModel_D_SecurityTwo" + ], + "special_unit_prefixes": ["VcDcl"], + "special_units": { + "VcDclSsCvc": "VcDclSsCvcMdl" + }, + "project_symbols": { + "VED": {"EGE_DATA_VCC_SP_VERSION": "CS_ENGINESYSTEMINFO"}, + "VEP": {"EGE_DATA_VCC_SP_VERSION": "CS_ENGINESYSTEMINFO"} + } +} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_critical.json b/tests/pybuild/cnfg_files/nvm_structs_ref_critical.json new file mode 100644 index 0000000..f5c0058 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_critical.json @@ -0,0 +1,68 @@ +[ + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "sVcTest_t_UInt32", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Int16", + "name": "sVcTest_t_Int16", + "y_size": 1 + }, + { + "x_size": 1, + "type": "UInt8", + "name": "sVcTest_t_UInt8", + "y_size": 1 + } + ], + "name": "NVM_LIST_CRITICAL1", + "default_datatype": "UInt16", + "instanceName": "nvm_list_critical1", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": ["NotApplicable"] + }, + { + "signals": [ + ], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": ["should_be_empty"] + }, + { + "signals": [ + ], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": ["should_be_empty"] + }, + { + "signals": [ + ], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": ["should_be_empty"] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_critical_duplicate.json b/tests/pybuild/cnfg_files/nvm_structs_ref_critical_duplicate.json new file mode 100644 index 0000000..4654f43 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_critical_duplicate.json @@ -0,0 +1,87 @@ +[ + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "sVcTest_t_UInt32", + "y_size": 1 + } + ], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "sVcTest_t_UInt32", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Int16", + "name": "sVcTest_t_Int16", + "y_size": 1 + }, + { + "x_size": 1, + "type": "UInt8", + "name": "sVcTest_t_UInt8", + "y_size": 1 + } + ], + "name": "NVM_LIST_CRITICAL1", + "default_datatype": "UInt16", + "instanceName": "nvm_list_critical1", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": ["NotApplicable"] + }, + { + "signals": [ + { + "x_size": 1, + "type": "Int16", + "name": "sVcTest_t_Int16", + "y_size": 1 + } + ], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [ + ], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": ["should_be_empty"] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_dcl.json b/tests/pybuild/cnfg_files/nvm_structs_ref_dcl.json new file mode 100644 index 0000000..658d84f --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_dcl.json @@ -0,0 +1,109 @@ +[ + { + "signals": [ + { + "x_size": 1, + "type": "UInt8", + "name": "sVcDclOil_D_BadDcysMEM", + "y_size": 1 + }, + { + "x_size": 1, + "type": "UInt8", + "name": "sVcDclEem_D_MvBattChrReqCarModTrp", + "y_size": 1 + }, + { + "x_size": 5, + "type": "UInt8", + "name": "VcDclEem_D_LvBattChrReqDenial", + "y_size": 1 + } + ], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_empty.json b/tests/pybuild/cnfg_files/nvm_structs_ref_empty.json new file mode 100644 index 0000000..96342a1 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_empty.json @@ -0,0 +1,90 @@ +[ + { + "signals": [], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_empty_small.json b/tests/pybuild/cnfg_files/nvm_structs_ref_empty_small.json new file mode 100644 index 0000000..cbb7af3 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_empty_small.json @@ -0,0 +1,90 @@ +[ + { + "signals": [], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 1000, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 1000, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 1, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 1000, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 1000, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 1000, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_single_signal.json b/tests/pybuild/cnfg_files/nvm_structs_ref_single_signal.json new file mode 100644 index 0000000..fc0913d --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_single_signal.json @@ -0,0 +1,97 @@ +[ + { + "signals": [], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "sVcAcCtrl_t_CmprRunTiNVM", + "y_size": 1 + } + ], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_small.json b/tests/pybuild/cnfg_files/nvm_structs_ref_small.json new file mode 100644 index 0000000..9e6ac98 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_small.json @@ -0,0 +1,132 @@ +[ + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "SIG8", + "y_size": 1 + } + ], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "SIG16", + "y_size": 1 + } + ], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "SIG32", + "y_size": 1 + } + ], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "SIG8P", + "y_size": 1 + } + ], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "UInt32", + "name": "SIG16P", + "y_size": 1 + } + ], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals":[ + { + "x_size": 1, + "type": "UInt32", + "name": "SIG32P", + "y_size": 1 + } + ], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_used_positions.json b/tests/pybuild/cnfg_files/nvm_structs_ref_used_positions.json new file mode 100644 index 0000000..ca90e77 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_used_positions.json @@ -0,0 +1,121 @@ +[ + { + "signals": [], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [ + { + "x_size": 1, + "type": "Int32", + "name": "sVcScIn_X_valStrAdaptOdd", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Int32", + "name": "sVcScIn_X_valStrAdaptEven", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Int32", + "name": "Position_8Bit_fix_above", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Int32", + "name": "Position_8Bit_prev_TrboVntDpStsLoCnt", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Int32", + "name": "Position_8Bit_prev_TrboVntDpStsLoCnt", + "y_size": 1 + } + ], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + } +] diff --git a/tests/pybuild/cnfg_files/nvm_structs_ref_wrong_type.json b/tests/pybuild/cnfg_files/nvm_structs_ref_wrong_type.json new file mode 100644 index 0000000..f49dec4 --- /dev/null +++ b/tests/pybuild/cnfg_files/nvm_structs_ref_wrong_type.json @@ -0,0 +1,90 @@ +[ + { + "signals": [], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float1232", + "UInt132", + "Int312" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] diff --git a/tests/pybuild/cnfg_files/rasters.json b/tests/pybuild/cnfg_files/rasters.json new file mode 100644 index 0000000..c79b2f7 --- /dev/null +++ b/tests/pybuild/cnfg_files/rasters.json @@ -0,0 +1,14 @@ +{ + "SampleTimes": { + "2ms": "0.002", + "10ms": "0.010", + "20ms": "0.020" + }, + "2ms": [], + "10ms": [ + "VcScBCoord", + "VcScCVehMtn", + "VcScFeh" + ], + "20ms": [] +} diff --git a/tests/pybuild/cnfg_files/signalinterface.yaml b/tests/pybuild/cnfg_files/signalinterface.yaml new file mode 100644 index 0000000..1c109b8 --- /dev/null +++ b/tests/pybuild/cnfg_files/signalinterface.yaml @@ -0,0 +1,841 @@ +_signals_external_ext_ok: + inports: {} + outports: {} +dp_spec: + VcExt50ms: + consumer: + - default: null + description: Ambient temperature sensor from FIOC + domain: fioc + factor: 1 + group: null + init: 0 + length: null + offset: 0 + property: AmbTMecRimSnsr + property_type: float + range: + max: '-' + min: '-' + unit: deg C + variable: sVcFioc_Te_AmbTMecRimSnsr + variable_type: Float32 + - default: null + description: sVcFioc_D_AmbTMecRimSnsrElecSts + domain: fioc + factor: 1 + group: null + init: 0 + length: null + offset: 0 + property: AmbTMecRimSnsrElecSts + property_type: uint8 + range: + max: '-' + min: '-' + unit: '-' + variable: sVcFioc_D_AmbTMecRimSnsrElecSts + variable_type: UInt8 + producer: + - default: null + description: Circuit Connect Valve Request + domain: fioc + factor: 1 + group: null + init: 0 + length: null + offset: 0 + property: CircCnctVlvReq + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcTestTx_B_CircCnctVlvReq + variable_type: Bool + - default: null + description: Hv battery coolant shut off valve request, 1 = no flow to battery + domain: fioc + factor: 1 + group: null + init: 0 + length: null + offset: 0 + property: HvBattOnOffVlvReq + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcTestTx_B_HvBattOnOffVlvReq + variable_type: Bool +hal_spec: + VcExt1000ms: + consumer: [] + producer: [] + VcExt100ms: + consumer: [] + producer: [] + VcExt50ms: + consumer: + - api: HighVoltageDcDcConverterElectricalMeasurementHal + default: null + description: Actual current at the Low Voltage side of converter + endpoint: CurrentOnHighVoltageSide + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: A + variable: sVcHlcm_I_HvDcDcIHv + variable_type: Float32 + variant: hals + - api: HighVoltageDcDcConverterElectricalMeasurementHal + default: null + description: Actual current at the Low Voltage side of Hconverter + endpoint: CurrentOnLowVoltageSide + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: A + variable: sVcHlcm_I_HvDcDcILv + variable_type: Float32 + variant: hals + - api: HighVoltageDcDcConverterElectricalMeasurementHal + default: null + description: Power parameter that characterizes voltage transients. + endpoint: TransientPower + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: W + variable: sVcHlcm_Pw_HvDcDcTraPwr + variable_type: UInt16 + variant: hals + - api: HighVoltageDcDcConverterElectricalMeasurementHal + default: null + description: The measured voltage on the high voltage side of converter + endpoint: VoltageOnHighVoltageSide + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: V + variable: sVcHlcm_U_HvDcDcUHv + variable_type: Float32 + variant: hals + - api: HighVoltageDcDcConverterElectricalMeasurementHal + default: null + description: The voltage on the low voltage side of Hconverter + endpoint: VoltageOnLowVoltageSide + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: V + variable: sVcHlcm_U_HvDcDcULv + variable_type: Float32 + variant: hals + - api: HighVoltageChargingMonitorHal + default: null + description: 'It provides the temperature of the Onboard charger ' + endpoint: Temperature + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: deg C + variable: sVcHvcc_Te_HvChrgrT + variable_type: Float32 + variant: hals + - api: HighVoltageChargingMonitorHal + default: null + description: It provides an estimated charging time left + endpoint: TimeToFullCharge + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: s + variable: sVcHvcc_t_HvChrgTiToFull + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: High Voltage Battery Climatisation Priority Request + endpoint: ClimatizationPrioritizationRequest + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int8 + range: + max: '-' + min: '-' + unit: '-' + variable: sVcHvec_D_HvBattClimaPrioReq + variable_type: Int8 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: High Voltage Battery Climatisation Energy Request + endpoint: ClimatizationEnergyRequest + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: Wh + variable: sVcHvec_E_HvBattClimaEgyReq + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: High voltage battery allowed cooling energy. The limit is estimated + based on min and max battery temperature and the thermal mass of the battery + pack. Data is used as input for thermal coordinator to use the battery HW + as thermal sink. + endpoint: AllowedCoolingEnergy + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: Wh + variable: sVcHvec_E_HvBattCoolgEgyAllwd + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: Allowed heating energy of the high voltage battery. Input to thermal + coordinator to be able to use high voltage battery as thermal sink. + endpoint: AllowedHeatingEnergy + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: Wh + variable: sVcHvec_E_HvBattHeatgEgyAllwd + variable_type: UInt16 + variant: hals + - api: HVECElectricalPropertiesHal + default: null + description: HV Battery current. Positive current is discharging the battery. + endpoint: Current + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: A + variable: sVcHvec_I_HvBattI + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Climatization power estimation of the high voltage battery based + on the flow of the coolant within the battery pack, the temperature of the + coolant within the battery pack and specific heat capacity for the coolant. ' + endpoint: ClimatizationPowerEstimation + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int16 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattClimaPwrEstimn + variable_type: Int16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'The cooling powers are derived from the respective energy allowed + limitations and based on a calibratable time threshold. ' + endpoint: AllowedCoolingPower + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattCoolgPwrAllwd + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: Cooling power (thermal) for current heating need. + endpoint: CoolingPowerNow + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattCoolgPwrEstimn + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: Cooling power (thermal) for next heating need. + endpoint: CoolingPowerNext + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattCoolgPwrPred + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: Cooling power request of the high voltage battery. + endpoint: CoolingPowerRequest + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattCoolgPwrReq + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Transition phase from current cooling power to the next stationary + cooling power level. ' + endpoint: CoolingPowerTransition + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattCoolgPwrTran + variable_type: Int32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Allowed heating power of the high voltage battery. ' + endpoint: AllowedHeatingPower + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattHeatgPwrAllwd + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Heating power (thermal) for the current cooling need. ' + endpoint: HeatingPowerNow + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattHeatgPwrEstimn + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Heating power (thermal) for the next cooling need. ' + endpoint: HeatingPowerNext + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattHeatgPwrPred + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Heating power request of the high voltage battery. Used to keep + battery within the minimum operating temperature. ' + endpoint: HeatingPowerRequest + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: uint16 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattHeatgPwrReq + variable_type: UInt16 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'Transition phase from current heating power to the next stationary + heating power level. ' + endpoint: HeatingPowerTransition + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: W + variable: sVcHvec_Pw_HvBattHeatgPwrTran + variable_type: Int32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: Minimum flow request of the high voltage battery. Request for coolant + flow. + endpoint: MinimumFlowRequest + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: l/min + variable: sVcHvec_Q_HvBattMinFlowReq + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: The average temperature of the high voltage battery. + endpoint: AverageTemperature + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: deg C + variable: sVcHvec_Te_HvBattTAvg + variable_type: Int32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'The maximum temperature of the high voltage battery. ' + endpoint: MaxTemperature + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: deg C + variable: sVcHvec_Te_HvBattTMax + variable_type: Int32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: The minimum temperature of the high voltage battery. + endpoint: MinTemperature + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: deg C + variable: sVcHvec_Te_HvBattTMin + variable_type: Int32 + variant: hals + - api: HVECElectricalPropertiesHal + default: null + description: Actual HV Battery pack voltage (measured before contactors, i.e. + always giving pack voltage). + endpoint: Voltage + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: float + range: + max: '-' + min: '-' + unit: V + variable: sVcHvec_U_HvBattU + variable_type: Float32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: 'How long the current cooling power is held. ' + endpoint: CoolingPowerTime + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: s + variable: sVcHvec_t_HvBattCoolgPwrTi + variable_type: Int32 + variant: hals + - api: HVECThermalPropertiesHal + default: null + description: How long the current heating power is held. + endpoint: HeatingPowerTime + factor: 1 + init: 0 + length: null + offset: 0 + property: null + property_type: int32 + range: + max: '-' + min: '-' + unit: s + variable: sVcHvec_t_HvBattHeatgPwrTi + variable_type: Int32 + variant: hals + producer: [] +service_spec: + ClimateAndThermalControlInternal: + default: 0 + description: Availability of ClimateAndThermalControlInternal in climate-and-thermal-control-service + factor: 1 + group: null + init: 0 + length: 1 + model: ClimateAndThermalControlInternal + offset: 0 + property: inherent + property_type: bool + range: + max: '1' + min: '0' + service: climate-and-thermal-control-service + unit: '-' + variable: yVcSfw_B_ClimateandthermalcontrolinternalIsAvailable + variable_type: Bool + VehicleModesProvider: + default: 0 + description: Availability of VehicleModesProvider in vehicle_modes_provider + factor: 1 + group: null + init: 0 + length: 1 + model: VehicleModesProvider + offset: 0 + property: inherent + property_type: bool + range: + max: '1' + min: '0' + service: vehicle_modes_provider + unit: '-' + variable: yVcSfw_B_VehiclemodesproviderIsAvailable + variable_type: Bool + VehicleMotionState: + default: 0 + description: Availability of VehicleMotionState in vehiclemotionstate-service + factor: 1 + group: null + init: 0 + length: 1 + model: VehicleMotionState + offset: 0 + property: inherent + property_type: bool + range: + max: '1' + min: '0' + service: vehiclemotionstate-service + unit: '-' + variable: yVcSfw_B_VehiclemotionstateIsAvailable + variable_type: Bool +sfw_spec: + VcExt1000ms: + consumer: [] + producer: [] + VcExt100ms: + consumer: [] + producer: [] + VcExt50ms: + consumer: + - api: VehicleMotionState + default: null + description: Estimate of instantanious longitudinal velocity of vehicle using + wheel rotary encoders, QF + endpoint: VelocityLongitudinal + factor: 1 + init: 0 + length: null + offset: 0 + property: nominal.quality + property_type: int8 + range: + max: '-' + min: '-' + unit: -,$VmsQf + variable: sVcVms_Enm_VehSpdLgtQf + variable_type: Int8 + variant: properties + - api: VehicleMotionState + default: null + description: Estimate of instantanious longitudinal velocity of vehicle using + wheel rotary encoders, the Inertial Measurement Unit and the Global Positioning + System. Vehicle axis system defined by ISO 8855. + endpoint: VelocityLongitudinal + factor: 1 + init: 0 + length: null + offset: 0 + property: nominal.value + property_type: float + range: + max: '-' + min: '-' + unit: m/s + variable: sVcVms_v_VehSpdLgt + variable_type: Float32 + variant: properties + - api: ClimateAndThermalControlInternal + default: null + description: MaxDefOn + endpoint: ControlRequests + factor: 1 + init: 0 + length: null + offset: 0 + property: enable_max_defroster + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcReq_B_MaxDefOn + variable_type: Bool + variant: properties + - api: VehicleModesProvider + default: null + description: '' + endpoint: CrashMode + factor: 1 + init: 0 + length: null + offset: 0 + property: CrashModeIsActivated + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcVmp_B_CrashMod + variable_type: Bool + variant: properties + - api: VehicleModesProvider + default: null + description: '' + endpoint: UsageModeAvailable + factor: 1 + init: 0 + length: null + offset: 0 + property: UsageModeAvailableIsActivated + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcVmp_B_VehModAvl + variable_type: Bool + variant: properties + - api: VehicleModesProvider + default: null + description: '' + endpoint: UsageModeAwake + factor: 1 + init: 0 + length: null + offset: 0 + property: UsageModeAwakeIsActivated + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcVmp_B_VehModAwake + variable_type: Bool + variant: properties + - api: VehicleModesProvider + default: null + description: Vehicle Mode convinience + endpoint: UsageModeConvenience + factor: 1 + init: 0 + length: null + offset: 0 + property: UsageModeConvenienceIsActivated + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcVmp_B_VehModConv + variable_type: Bool + variant: properties + - api: VehicleModesProvider + default: null + description: Vehicle Mode Drive + endpoint: UsageModeDriving + factor: 1 + init: 0 + length: null + offset: 0 + property: UsageModeDrivingIsActivated + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcVmp_B_VehModDrv + variable_type: Bool + variant: properties + - api: VehicleModesProvider + default: null + description: '' + endpoint: UsageModeMovable + factor: 1 + init: 0 + length: null + offset: 0 + property: UsageModeMovableIsActivated + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcVmp_B_VehModMovable + variable_type: Bool + variant: properties + producer: + - api: ClimateAndThermalControlInternal + default: null + description: yVcTestTx_B_MaxDefOnDisp + endpoint: ControlOutput + factor: 1 + init: 0 + length: null + offset: 0 + property: max_defroster_state.is_enabled + property_type: bool + range: + max: '-' + min: '-' + unit: '-' + variable: yVcTestTx_B_MaxDefOnDisp + variable_type: Bool + variant: properties diff --git a/tests/pybuild/cnfg_files/test-repo/ConfigDocuments/BaseConfig.json b/tests/pybuild/cnfg_files/test-repo/ConfigDocuments/BaseConfig.json new file mode 100644 index 0000000..5c3fb6b --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/ConfigDocuments/BaseConfig.json @@ -0,0 +1,28 @@ +{ + "BaseConfigFileVersion": "0.2.1", + "ProjectInfo" : { + "deviceDomains": "./conf.local/DeviceDomains.json", + "serviceInterfaces": "./conf.local/ServiceInterfaces.json", + "didDefFile": "DIDIds_FullRange", + "didCarCom": "./output/CarCom_DIDDefs.csv", + "srcCodeDstDir": "./output/SourceCode", + "reportDstDir": "./output/Reports", + "logDstDir": "./output/logs", + "configDir": "../../ConfigDocuments", + "interfaceCfgDir": "./Config/ActiveInterfaces", + "commonSrcDir": "../../Models/Common/pybuild_src", + "prjUnitSrcDir": "../../Models/*/Vc*/pybuild_src", + "prjUnitCfgDir": "../../Models/*/Vc*/pybuild_cfg", + "prjUnitMdlDir": "../../Models/*/Vc*", + "prjLocalDefs": "*_LocalDefs.h", + "prjCodeswitches": "SPM_Codeswitch_Setup*.csv", + "coreDummyFileName" : "VcCoreDummy", + "featureHeaderName": "VcCodeSwDefines.h", + "tsHeaderName": "VcUnitTsDefines.h", + "useGlobalConst" : "VcConst" + }, + "NvmConfig": { + "fileName" : "vcc_nvm_struct", + "baseNvmStructs" : "./conf.local/nvm_structs.json" + } +} diff --git a/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/VcTestRx.yaml b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/VcTestRx.yaml new file mode 100644 index 0000000..d108260 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/VcTestRx.yaml @@ -0,0 +1,514 @@ +######################################################## +# +# Service for input values of app to VcTestRx model +# +# +######################################################## + +service: + ClimateAndThermalControlInternal: + properties: + - ControlRequests: + - insignal: yVcReq_B_MaxDefOn + property: enable_max_defroster + VehicleModesProvider: + properties: + - UsageModeAvailable: + - insignal: yVcVmp_B_VehModAvl + property: UsageModeAvailableIsActivated + - UsageModeAwake: + - insignal: yVcVmp_B_VehModAwake + property: UsageModeAwakeIsActivated + - UsageModeConvenience: + - insignal: yVcVmp_B_VehModConv + property: UsageModeConvenienceIsActivated + - UsageModeDriving: + - insignal: yVcVmp_B_VehModDrv + property: UsageModeDrivingIsActivated + - UsageModeMovable: + - insignal: yVcVmp_B_VehModMovable + property: UsageModeMovableIsActivated + # - CarMode: + # - insignal: sVcVmp_Enm_CarMode + # property: CarMode + # - CarModeSubtype: # <-- Create a new Enum for this one, it is not same as CarMode + # - insignal: sVcVmp_Enm_CarModeSubtype + # property: Subtype + - CrashMode: + - insignal: yVcVmp_B_CrashMod + property: CrashModeIsActivated + VehicleMotionState: + properties: + - VelocityLongitudinal: + - insignal: sVcVms_v_VehSpdLgt + property: nominal.value + - insignal: sVcVms_Enm_VehSpdLgtQf + property: nominal.quality +######################################################## +# +# Direct connection for input values of app to VcTestRx model +# From HALs +# +######################################################## +hal: + hal-hvec-thermal-properties: + - ClimatizationEnergyRequest: + - insignal: sVcHvec_E_HvBattClimaEgyReq + - ClimatizationPrioritizationRequest: + - insignal: sVcHvec_D_HvBattClimaPrioReq + - ClimatizationPowerEstimation: + - insignal: sVcHvec_Pw_HvBattClimaPwrEstimn + - AllowedCoolingEnergy: + - insignal: sVcHvec_E_HvBattCoolgEgyAllwd + - AllowedCoolingPower: + - insignal: sVcHvec_Pw_HvBattCoolgPwrAllwd + - CoolingPowerRequest: + - insignal: sVcHvec_Pw_HvBattCoolgPwrReq + - AllowedHeatingEnergy: + - insignal: sVcHvec_E_HvBattHeatgEgyAllwd + - AllowedHeatingPower: + - insignal: sVcHvec_Pw_HvBattHeatgPwrAllwd + - HeatingPowerRequest: + - insignal: sVcHvec_Pw_HvBattHeatgPwrReq + - MinimumFlowRequest: + - insignal: sVcHvec_Q_HvBattMinFlowReq + # - CoolantTemperatureSensorStatus: + # - insignal: sVcHvec_Enm_HvBattCooltTSnsrSts + - CoolingPowerNow: + - insignal: sVcHvec_Pw_HvBattCoolgPwrEstimn + - CoolingPowerNext: + - insignal: sVcHvec_Pw_HvBattCoolgPwrPred + - CoolingPowerTime: + - insignal: sVcHvec_t_HvBattCoolgPwrTi + - CoolingPowerTransition: + - insignal: sVcHvec_Pw_HvBattCoolgPwrTran + - HeatingPowerNow: + - insignal: sVcHvec_Pw_HvBattHeatgPwrEstimn + - HeatingPowerNext: + - insignal: sVcHvec_Pw_HvBattHeatgPwrPred + - HeatingPowerTime: + - insignal: sVcHvec_t_HvBattHeatgPwrTi + - HeatingPowerTransition: + - insignal: sVcHvec_Pw_HvBattHeatgPwrTran + - MaxTemperature: + - insignal: sVcHvec_Te_HvBattTMax + - MinTemperature: + - insignal: sVcHvec_Te_HvBattTMin + - AverageTemperature: + - insignal: sVcHvec_Te_HvBattTAvg + # needed? + # electrical_energy_coordinator: + # - PowerLimitClimate: + # - insignal: sVcHlcm_Enm_HvDcDcMod + + hal-hvec-electrical-properties: + - Voltage: + - insignal: sVcHvec_U_HvBattU + - Current: + - insignal: sVcHvec_I_HvBattI + # - DynamicVoltageMaxLimit: + # - insignal: sVcHvec_U_DynamicVoltageMaxLimit + # - DynamicVoltageMinLimit: + # - insignal: sVcHvec_U_DynamicVoltageMinLimit + # - CurrentLimit: + # - insignal: sVcHvec_I_CurrentLimit + + # hal-ihfa: + # - CoolingRequest: + # - insignal: sVcIhfa_Enm_EmFrntCoolgReq + # - CoolantTemperature: + # - insignal: sVcIhfa_Te_EmIvtrFrntCooltT + # - DcCurrent: + # - insignal: sVcIhfa_I_EmIvtrFrntIDc + # - InverterTemperature: + # - insignal: sVcIhfa_Te_EmIvtrFrntT + # # - LimitationIndication: + # # - insignal: sVcIhfa_D_FrntLimInd + # # - OperatingMode: + # # - insignal: sVcIhfa_Enm_EmIvtrFrntMod + # - MotorTemperature: + # - insignal: sVcIhfa_Te_EmMotFrntT + # - Speed: + # - insignal: sVcIhfa_n_EmMotFrntSpd + # property: speed + # - TorqueAvailable: + # - insignal: sVcIhfa_Tq_EmMotFrntTqAvlMax + # property: max + # - insignal: sVcIhfa_Tq_EmMotFrntTqAvlMin + # property: min + # - DcVoltage: + # - insignal: sVcIhfa_U_EmIvtrFrntDcU + # - TorqueEstimated: + # - insignal: sVcIhfa_Tq_EmMotFrntTqEstimn + # property: torque + + # hal-ihra: + # # - CoolingRequest: + # # - insignal: sVcIhra_Enm_EmReCoolgReq + # - CoolantTemperature: + # - insignal: sVcIhra_Te_EmIvtrReCooltT + # - DcCurrent: + # - insignal: sVcIhra_I_EmIvtrReIDc + # - InverterTemperature: + # - insignal: sVcIhra_Te_EmIvtrReT + # # - LimitationIndication: + # # - insignal: sVcIhra_D_ReLimInd + # # - OperatingMode: + # # - insignal: sVcIhra_Enm_EmIvtrReMod + # - MotorTemperature: + # - insignal: sVcIhra_Te_EmMotReT + # - Speed: + # - insignal: sVcIhra_n_EmMotReSpd + # property: speed + # - TorqueAvailable: + # - insignal: sVcIhra_Tq_EmMotReTqAvlMax + # property: max + # - insignal: sVcIhra_Tq_EmMotReTqAvlMin + # property: min + # - DcVoltage: + # - insignal: sVcIhra_U_EmIvtrReDcU + # - TorqueEstimated: + # - insignal: sVcIhra_Tq_EmMotReTqEstimn + # property: torque + + hal-hvcc-monitor: + # - ChargerType: + # - insignal: sVcHvcc_Enm_HvChrgrTyp + # - ConnectionStatus: + # - insignal: sVcHvcc_Enm_HvChrgrCnctnSts + # - ChargingStatus: + # - insignal: sVcHvcc_Enm_HvChrgnSts + - Temperature: + - insignal: sVcHvcc_Te_HvChrgrT + - TimeToFullCharge: + - insignal: sVcHvcc_t_HvChrgTiToFull + + # hal-hvcc-requests: + # - CoolingPower: + # - insignal: sVcHvcc_Enm_HvChrgCoolgReq + + hal-hlcm-electrical-measurement: + - TransientPower: + - insignal: sVcHlcm_Pw_HvDcDcTraPwr + - CurrentOnLowVoltageSide: + - insignal: sVcHlcm_I_HvDcDcILv + - CurrentOnHighVoltageSide: + - insignal: sVcHlcm_I_HvDcDcIHv + - VoltageOnLowVoltageSide: + - insignal: sVcHlcm_U_HvDcDcULv + - VoltageOnHighVoltageSide: + - insignal: sVcHlcm_U_HvDcDcUHv + + # hal-hlcm-system-states: + # - OperationMode: + # - insignal: sVcHlcm_Enm_HvDcDcMod + # - CoolingFlowRequest: + # - insignal: sVcHlcm_Enm_HvDcDcCoolgFlowReq + # - FaultNotification: + # - insignal: sVcHlcm_Enm_HvDcDcFltSts + + # hal-hvec-contactor-status: + # - MainContactorStatus: + # - insignal: sVcHvec_Enm_MaiHvCntctSts + # - DCContactorStatus: + # - insignal: sVcHvec_Enm_HvDcDcCntctSts + +######################################################## +# +# Direct connection for input values of app to VcTestRx model +# From FIOC DP +# +######################################################## +##### FIOC 4/6.0.0 ####### +signals: + fioc: + - insignal: sVcFioc_Te_AmbTMecRimSnsr + property: AmbTMecRimSnsr + - insignal: sVcFioc_D_AmbTMecRimSnsrElecSts + property: AmbTMecRimSnsrElecSts + - insignal: sVcFioc_D_CircCnctVlvElecSts + property: CircCnctVlvElecSts + # - insignal: sVcFioc_D_CircCnctVlvSts + # property: CircCnctVlvSts + # - insignal: sVcFioc_D_CooltLvlElecSts + # property: CooltLvlElecSts + # - insignal: sVcFioc_D_CooltPmpDtElecCpbySts + # property: CooltPmpDtElecCpbySts + # - insignal: sVcFioc_D_CooltPmpHvBattCpbySts + # property: CooltPmpHvBattCpbySts + # - insignal: sVcFioc_D_CooltPmpInClimaCpbySts + # property: CooltPmpInClimaCpbySts + # - insignal: sVcFioc_X_CooltPmpSpdInCircClimaAct + # property: CooltPmpSpdInCircClimaAct + # - insignal: sVcFioc_X_CooltPmpSpdInCircDtElecAct + # property: CooltPmpSpdInCircDtElecAct + # - insignal: sVcFioc_X_CooltPmpSpdInHvBattCircAct + # property: CooltPmpSpdInHvBattCircAct + - insignal: sVcFioc_Te_CooltTAftHvac + property: CooltTAftHvac + - insignal: sVcFioc_D_CooltTAftHvacElecSts + property: CooltTAftHvacElecSts + - insignal: sVcFioc_Te_CooltTAftRadrDtElec + property: CooltTAftRadrDtElec + - insignal: sVcFioc_D_CooltTAftRadrDtElecSts + property: CooltTAftRadrDtElecSts + - insignal: sVcFioc_Te_CooltTAtHvBattOutl + property: CooltTAtHvBattOutl + - insignal: sVcFioc_D_CooltTAtHvBattOutlElecSts + property: CooltTAtHvBattOutlElecSts + - insignal: sVcFioc_Te_CooltTBfrRadrBypVlv + property: CooltTBfrRadrBypVlv + - insignal: sVcFioc_D_CooltTBfrRadrBypVlvElecSts + property: CooltTBfrRadrBypVlvElecSts +# EvaprVlvFrntElecSts +# EvaprVlvRearElecSts +# ExtdIntglAck + # - insignal: sVcFioc_D_FanCpbySts + # property: FanCpbySts + - insignal: sVcFioc_D_FanElecSts + property: FanElecSts + - insignal: sVcFioc_D_FanModSts + property: FanModSts + - insignal: sVcFioc_D_FanRlyElecSts + property: FanRlyElecSts + # - insignal: sVcFioc_D_FanRlySts + # property: FanRlySts + - insignal: sVcFioc_X_FanSpdAct + property: FanSpdAct + - insignal: sVcFioc_D_HvBattOnOffVlvElecSts + property: HvBattOnOffVlvElecSts + # - insignal: sVcFioc_D_HvBattOnOffVlvSts + # property: HvBattOnOffVlvSts + # - insignal: sVcFioc_X_PropVlvToHvBattAct + # property: PropVlvToHvBattAct +# HvCooltHeatrICns2 +# HvCooltHeatrSplyUForCtrlUnitVal2 +# HvCooltHeatrSts2 +# HvCooltWtrHeatrWtrTInIntk2 + - insignal: sVcFioc_Pw_HvHeatrPwrCns2 + property: HvHeatrPwrCns2 + - insignal: sVcFioc_Te_HvCooltWtrHeatrWtrTInOutl2 + property: HvCooltWtrHeatrWtrTInOutl2 +# HvHeatrPwrCns2 +# HvHeatrPwrCnsDes2 + - insignal: sVcFioc_p_PMedChillrOut + property: PMedChillrOut + - insignal: sVcFioc_p_PMedCmprOut + property: PMedCmprOut +# PMedChillrOutElecSts +# PMedCmprOutElecSts + # - insignal: sVcFioc_D_PropVlvToHvBattCpbySts + # property: PropVlvToHvBattCpbySts + # - insignal: sVcFioc_D_PropVlvToHvBattSts + # property: PropVlvToHvBattSts + - insignal: sVcFioc_D_RadrBypVlvElecSts + property: RadrBypVlvElecSts + # - insignal: sVcFioc_D_RadrBypVlvSts + # property: RadrBypVlvSts + # - insignal: sVcFioc_D_RlyForCoolgElecSts + # property: RlyForCoolgElecSts + # - insignal: sVcFioc_D_RlyForCoolgSts + # property: RlyForCoolgSts + # - insignal: sVcFioc_an_SplrShttrAgAct + # property: SplrShttrAgAct + # - insignal: sVcFioc_D_SplrShttrCpbySts + # property: SplrShttrCpbySts + # - insignal: sVcFioc_D_SplrShttrInfoSts + # property: SplrShttrInfoSts + - insignal: sVcFioc_D_StsOfCooltLvl + property: StsOfCooltLvl + - insignal: sVcFioc_Te_TMedChillrOut + property: TMedChillrOut + - insignal: sVcFioc_Te_TMedCmprOut + property: TMedCmprOut +# TMedChillrOutElecSts +# TMedCmprOutElecSts +# CmprDiagStsExtdEepErr +# CmprDiagStsExtdInpOverIErr +# CmprDiagStsExtdMemErr +# CmprDiagStsExtdMotOverIErr +# CmprDiagStsExtdOverTErr +# CmprDiagStsExtdStallErr +# CmprDiagStsExtdSwErr +# CmprDiagcStsCmprCmprSpdErr +# CmprDiagcStsCmprCtrlrErr +# CmprDiagcStsCmprHvSnsr1 +# CmprDiagcStsCmprHvSnsrI +# CmprDiagcStsCmprHvSnsrICrct +# CmprDiagcStsCmprHvSplyErr +# CmprDiagcStsCmprStartUpErr +# CmprDiagcStsCmprT1 +# CmprDiagcStsCmprT2 +# CmprDiagcStsCmprTOperErr +# CmprDiagcStsCmprWdgErr + ccmb: + - insignal: sVcCcmb_X_AirFlapPosnActForCentrForFirstLe + property: AirFlapPosnActForCentrForFirstLe + - insignal: sVcCcmb_X_AirFlapPosnActForDefrst1 + property: AirFlapPosnActForDefrst1 + - insignal: sVcCcmb_X_AirFlapPosnActForFlrForFirstRiLe + property: AirFlapPosnActForFlrForFirstRiLe + - insignal: sVcCcmb_X_AirFlapPosnActForFlrForSecRiLe + property: AirFlapPosnActForFlrForSecRiLe + - insignal: sVcCcmb_X_AirFlapPosnActForOsa1 + property: AirFlapPosnActForOsa1 + - insignal: sVcCcmb_X_AirFlapPosnActForRecirc1 + property: AirFlapPosnActForRecirc1 + - insignal: sVcCcmb_X_AirFlapPosnActForSideForFirstLe + property: AirFlapPosnActForSideForFirstLe + - insignal: sVcCcmb_X_AirFlapPosnActForVentCentrForFirstRi + property: AirFlapPosnActForVentCentrForFirstRi + - insignal: sVcCcmb_X_AirFlapPosnActForVentForSecRiLe + property: AirFlapPosnActForVentForSecRiLe + - insignal: sVcCcmb_X_AirFlapPosnActForVentSideForFirstRi + property: AirFlapPosnActForVentSideForFirstRi + - insignal: sVcCcmb_X_AirFlapPosnTActForFirstLe + property: AirFlapPosnTActForFirstLe + - insignal: sVcCcmb_X_AirFlapPosnTActForFirstRi + property: AirFlapPosnTActForFirstRi + - insignal: sVcCcmb_X_AirFlapPosnTActForSecLe + property: AirFlapPosnTActForSecLe + - insignal: sVcCcmb_X_AirFlapPosnTActForSecRi + property: AirFlapPosnTActForSecRi + +signal_groups: + fioc: + - CmprRunSts: + - property: CmprRunStsCmprIPha + insignal: sVcFioc_I_CmprRunStsCmprIPha + - property: CmprRunStsCmprSpd + insignal: sVcFioc_n_CmprRunStsCmprSpd + - property: CmprRunStsCmprT + insignal: sVcFioc_Te_CmprRunStsCmprT + - property: CmprRunStsCmprU + insignal: sVcFioc_U_CmprRunStsCmprU + - property: CmprRunStsCmprI + insignal: sVcFioc_I_CmprRunStsCmprI +# CmprRunStsCmprSts +# FuHeatrSts0FuHeatrCmbAirFanErrSts +# FuHeatrSts0FuHeatrCmbDetnErrSts +# FuHeatrSts0FuHeatrDiagcSts +# FuHeatrSts0FuHeatrFuPmpErrSts +# FuHeatrSts0FuHeatrGlwPinAct +# FuHeatrSts0FuHeatrGlwPinErrSts +# FuHeatrSts0FuHeatrLockdSts +# FuHeatrSts0FuHeatrOperErrSts +# FuHeatrSts0FuHeatrSnsrCooltTErrSts +# FuHeatrSts0FuHeatrSnsrTHiErrSts +# FuHeatrSts0FuHeatrStsSho +# FuHeatrSts0FuHeatrUpSts +# FuHeatrSts0FuHeatrWtrT +# HvCooltHeatrProtnOfSelfTmp2HwProtn +# HvCooltHeatrProtnOfSelfTmp2Ovrheatg +# HvCooltHeatrProtnOfSelfTmp2ProtnOfSelfTmp +# HvCooltHeatrProtnOfSelfTmp2ProtnOfSelfTmpResd +# HvCooltHeatrSnsrFlt2CooltTInSnsrFlt +# HvCooltHeatrSnsrFlt2CooltTOutSnsrFlt +# HvCooltHeatrSnsrFlt2ResdForSnsrFlt +# HvCooltHeatrSnsrFlt2TInMtrlSnsrFlt +# HvCooltHeatrSrvRqrd2CircForDrvrShoOrOpen +# HvCooltHeatrSrvRqrd2ICnsOutOfRng +# HvCooltHeatrSrvRqrd2MemErr +# HvCooltHeatrSrvRqrd2SrvRqrd +# HvCooltHeatrSrvRqrd2SrvRqrdResd +# HvCooltHeatrWarn2CooltTOutOfRng +# HvCooltHeatrWarn2FltInCom +# HvCooltHeatrWarn2FltPrsnt +# HvCooltHeatrWarn2FltPrsntResd +# HvCooltHeatrWarn2HvOutOfRng +# HvCooltHeatrWarn2ULoOutOfRng + - ElecExpVlvCtrl: + - insignal: sVcFioc_D_ElecExpVlvCtrlErrStsForChillrVlv + property: ElecExpVlvCtrlErrStsForChillrVlv + - insignal: sVcFioc_D_ElecExpVlvCtrlIninStsForChillrVlv + property: ElecExpVlvCtrlIninStsForChillrVlv + - insignal: yVcFioc_B_ElecExpVlvCtrlMotStallStsForChillrVlv + property: ElecExpVlvCtrlMotStallStsForChillrVlv + - insignal: sVcFioc_X_ElecExpVlvCtrlPsnActForChillrVlv + property: ElecExpVlvCtrlPsnActForChillrVlv + - insignal: yVcFioc_B_ElecExpVlvCtrlRunsStsForChillrVlv + property: ElecExpVlvCtrlRunsStsForChillrVlv + - insignal: sVcFioc_D_ElecExpVlvCtrlTWarnStsForChillrVlv + property: ElecExpVlvCtrlTWarnStsForChillrVlv + - insignal: sVcFioc_D_ElecExpVlvCtrlUerrStsForChillrVlv + property: ElecExpVlvCtrlUerrStsForChillrVlv + + ##### THESE SIGNALS DOES NOT EXIST IN THE FIOC-DP YET? ################ + # signal_groups: + # fioc: + # - CooltPmpInHvBattCircSts: + # - insignal: sVcFioc_X_CooltPmpInHvBattCircSts + # property: CooltPmpInHvBattCircSts + # - CooltPmpInDtElecSts: + # - insignal: sVcFioc_D_CooltPmpInDtElecSts + # property: CooltPmpInDtElecSts + # - CltPmpInCircClimaSts: + # - insignal: sVcFioc_D_CltPmpInCircClimaSts + # property: CltPmpInCircClimaSts + # - PropVlvToHvBattFltSts: + # - insignal: sVcFioc_D_PropVlvToHvBattFltSts + # property: PropVlvToHvBattFltSts + # - SplrShttrSts: + # - insignal: sVcFioc_D_SplrShttrSts + # property: SplrShttrSts + # - SplrShttrFltSts: + # - insignal: sVcFioc_D_SplrShttrFltSts + # property: SplrShttrFltSts + # - SplrShttrAgAct: + # + ccmb: + - EvaprTFrnt2: + - insignal: sVcCcmb_Te_EvapTFrnt + property: EvaprTFrnt2EvaprTFrnt + - insignal: yVcCcmb_B_EvapTFrntQf + property: EvaprTFrnt2EvaprTQf + - MtrlSnsrT: + - insignal: sVcCcmb_Te_MtrlSnsrT + property: MtrlSnsrTMtrlSnsrT + - insignal: yVcCcmb_B_MtrlSnsrTQf + property: MtrlSnsrTFacQly + - HvacAirTForHeatrFrnt2: + - insignal: sVcCcmb_Te_HvacAirTForHeatrFrnt + property: HvacAirTForHeatrFrnt2HvacAirTForHeatrFrnt + - insignal: yVcCcmb_B_HvacAirTForHeatrFrntQf + property: HvacAirTForHeatrFrnt2HvacAirTForHeatrFrntQf + - HvacAirTForRowFirstAtFlrRi2: + - insignal: sVcCcmb_Te_HvacAirTForRowFirstAtFlrRi + property: HvacAirTForRowFirstAtFlrRi2HvacAirTForRowFirstAtFlrRi + - insignal: yVcCcmb_B_HvacAirTForRowFirstAtFlrRiQf + property: HvacAirTForRowFirstAtFlrRi2HvacAirTForRowFirstAtFlrRiQf + - HvacAirTForRowFirstAtVentLe2: + - insignal: sVcCcmb_Te_HvacAirTForRowFirstAtVentLe + property: HvacAirTForRowFirstAtVentLe2HvacAirTForRowFirstAtVentLe + - insignal: yVcCcmb_B_HvacAirTForRowFirstAtVentLeQf + property: HvacAirTForRowFirstAtVentLe2HvacAirTForRowFirstAtVentLeQf + - HvacAirTForRowFirstAtVentRi2: + - insignal: sVcCcmb_Te_HvacAirTForRowFirstAtVentRi + property: HvacAirTForRowFirstAtVentRi2HvacAirTForRowFirstAtVentRi + - insignal: yVcCcmb_B_HvacAirTForRowFirstAtVentRiQf + property: HvacAirTForRowFirstAtVentRi2HvacAirTForRowFirstAtVentRiQf + - HvacAirTForRowSecAtFlrLe: + - insignal: sVcCcmb_Te_HvacAirTForRowSecAtFlrLe + property: HvacAirTForRowSecAtFlrLeHvacAirTForRowSecAtFlrLe + - insignal: yVcCcmb_B_HvacAirTForRowSecAtFlrLeQf + property: HvacAirTForRowSecAtFlrLeQf + - HvacAirTForRowSecAtFlrRi: + - insignal: sVcCcmb_Te_HvacAirTForRowSecAtFlrRi + property: HvacAirTForRowSecAtFlrRiHvacAirTForRowSecAtFlrRi + - insignal: yVcCcmb_B_HvacAirTForRowSecAtFlrRiQf + property: HvacAirTForRowSecAtFlrRiQf + - HvacAirTForRowSecAtVentLe: + - insignal: sVcCcmb_Te_HvacAirTForRowSecAtVentLe + property: HvacAirTForRowSecAtVentLeHvacAirTForRowSecAtVentLe + - insignal: yVcCcmb_B_HvacAirTForRowSecAtVentLeQf + property: HvacAirTForRowSecAtVentLeQf + - HvacAirTForRowSecAtVentRi: + - insignal: sVcCcmb_Te_HvacAirTForRowSecAtVentRi + property: HvacAirTForRowSecAtVentRiHvacAirTForRowSecAtVentRi + - insignal: yVcCcmb_B_HvacAirTForRowSecAtVentRiQf + property: HvacAirTForRowSecAtVentRiQf + - HvacAirTForRowFirstAtFlrLe2: + - insignal: sVcCcmb_Te_HvacAirTForRowFirstAtFlrLe + property: HvacAirTForRowFirstAtFlrLe2HvacAirTForRowFirstAtFlrLe + - insignal: yVcCcmb_B_HvacAirTForRowFirstAtFlrLeQf + property: HvacAirTForRowFirstAtFlrLe2HvacAirTForRowFirstAtFlrLeQf diff --git a/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/config_VcTestRx.json b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/config_VcTestRx.json new file mode 100644 index 0000000..b051eef --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestRx/pybuild_cfg/config_VcTestRx.json @@ -0,0 +1,7432 @@ +{ + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": { + "sVcTestRx_Te_AmbTRaw": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out1", + "name": "sVcTestRx_Te_AmbTRaw", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient Temperature Raw", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_MtrlSnsrT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out2", + "name": "sVcTestRx_Te_MtrlSnsrT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Material Temperature sensor", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_VehModConv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out3", + "name": "yVcTestRx_B_VehModConv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Vehicle Mode convinience", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmMotPwrLossEstimdFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out6", + "name": "sVcTestRx_Pw_EmMotPwrLossEstimdFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Motor Power Loss Estimated Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmPwrAddlLossEstimdFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out8", + "name": "sVcTestRx_Pw_EmPwrAddlLossEstimdFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Estimated Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EmIvtrFrntCooltT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out9", + "name": "sVcTestRx_Te_EmIvtrFrntCooltT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant temperature measured in the coolant inlet in inverter", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EmIvtrFrntT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out10", + "name": "sVcTestRx_Te_EmIvtrFrntT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Inverter temperature measured in the inverter front", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EmMotFrntT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out11", + "name": "sVcTestRx_Te_EmMotFrntT", + "configs": "((ALWAYS_ACTIVE))", + "description": "The motor temperature measured at the windings in the electric motor", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_EmFrntCoolgReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out12", + "name": "sVcTestRx_Enm_EmFrntCoolgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request for increased cooling power to both electric machine and inverter ", + "type": "EmCoolgReq", + "unit": "-,$EmCoolgReq", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmIvtrPwrLossEstimdRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out13", + "name": "sVcTestRx_Pw_EmIvtrPwrLossEstimdRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Inverter Power Loss Estimated Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmMotPwrLossEstimdRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out14", + "name": "sVcTestRx_Pw_EmMotPwrLossEstimdRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Motor Power Loss Estimated Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmPwrAddlLossAvlRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out15", + "name": "sVcTestRx_Pw_EmPwrAddlLossAvlRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Available Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmPwrAddlLossEstimdRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out16", + "name": "sVcTestRx_Pw_EmPwrAddlLossEstimdRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Estimated Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EmIvtrReCooltT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out17", + "name": "sVcTestRx_Te_EmIvtrReCooltT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant temperature measured in the coolant inlet in inverter", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EmIvtrReT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out18", + "name": "sVcTestRx_Te_EmIvtrReT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Inverter temperature measured in the inverter rear", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EmMotReT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out19", + "name": "sVcTestRx_Te_EmMotReT", + "configs": "((ALWAYS_ACTIVE))", + "description": "The motor temperature measured at the windings in the electric motor", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_EmReCoolgReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out20", + "name": "sVcTestRx_Enm_EmReCoolgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request for increased cooling power to both electric machine and inverter", + "type": "EmCoolgReq", + "unit": "-,$EmCoolgReq", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_FanModSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out21", + "name": "sVcTestRx_D_FanModSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Mode Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_FanCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out22", + "name": "sVcTestRx_D_FanCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Error", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_FanSpdAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out23", + "name": "sVcTestRx_X_FanSpdAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Speed Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_StsOfCooltLvl": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out24", + "name": "sVcTestRx_D_StsOfCooltLvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Status Of Coolant Level", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_CooltTAftRadrDtElec": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out25", + "name": "sVcTestRx_Te_CooltTAftRadrDtElec", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Radiator Drivetrain Electric", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_CooltTAftHvac": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out26", + "name": "sVcTestRx_Te_CooltTAftHvac", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Hvac", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_CooltTBfrRadrBypVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out27", + "name": "sVcTestRx_Te_CooltTBfrRadrBypVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature Before Radiator Bypass Valve", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_CooltTAtHvBattOutl": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out28", + "name": "sVcTestRx_Te_CooltTAtHvBattOutl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature At High Voltage Battery Outlet", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_FanElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out29", + "name": "sVcTestRx_D_FanElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_FanRlyElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out30", + "name": "sVcTestRx_D_FanRlyElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Relay Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CircCnctVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out31", + "name": "sVcTestRx_D_CircCnctVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Circuit Connect Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_RadrBypVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out32", + "name": "sVcTestRx_D_RadrBypVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Radiator Bypass Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_HvBattOnOffVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out33", + "name": "sVcTestRx_D_HvBattOnOffVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "High Voltage Battery On Off Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltTAftRadrDtElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out34", + "name": "sVcTestRx_D_CooltTAftRadrDtElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Radiator Drivetrain Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltTAftHvacElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out35", + "name": "sVcTestRx_D_CooltTAftHvacElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Hvac Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltTBfrRadrBypVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out36", + "name": "sVcTestRx_D_CooltTBfrRadrBypVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature Before Radiator Bypass Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltTAtHvBattOutlElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out37", + "name": "sVcTestRx_D_CooltTAtHvBattOutlElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature At High Voltage Battery Outlet Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltLvlElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out38", + "name": "sVcTestRx_D_CooltLvlElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Level Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_CooltPmpSpdInHvBattCircAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out39", + "name": "sVcTestRx_X_CooltPmpSpdInHvBattCircAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump Speed In High Voltage Battery Circuit Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_CooltPmpInHvBattCircSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out40", + "name": "sVcTestRx_X_CooltPmpInHvBattCircSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump In High Voltage Battery Circuit Status", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_CooltPmpSpdInCircDtElecAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out41", + "name": "sVcTestRx_X_CooltPmpSpdInCircDtElecAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump Speed In Circuit Drivetrain Electric Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltPmpInDtElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out42", + "name": "sVcTestRx_D_CooltPmpInDtElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump In Drivetrain Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_CooltPmpSpdInCircClimaAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out43", + "name": "sVcTestRx_X_CooltPmpSpdInCircClimaAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump Speed In Circuit Climatisation Actual", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CltPmpInCircClimaSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out44", + "name": "sVcTestRx_D_CltPmpInCircClimaSts", + "configs": "((ALWAYS_ACTIVE))", + "description": " Pump In Circuit Climatisation Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_PropVlvToHvBattAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out45", + "name": "sVcTestRx_X_PropVlvToHvBattAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_PropVlvToHvBattFltSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out46", + "name": "sVcTestRx_D_PropVlvToHvBattFltSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Fault Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_PropVlvToHvBattSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out47", + "name": "sVcTestRx_D_PropVlvToHvBattSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_SplrShttrSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out48", + "name": "sVcTestRx_D_SplrShttrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_SplrShttrFltSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out49", + "name": "sVcTestRx_D_SplrShttrFltSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Fault Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_an_SplrShttrAgAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out50", + "name": "sVcTestRx_an_SplrShttrAgAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Angle Actual", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmPwrAddlLossAvlFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out5", + "name": "sVcTestRx_Pw_EmPwrAddlLossAvlFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Available Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_EmIvtrPwrLossEstimdFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out7", + "name": "sVcTestRx_Pw_EmIvtrPwrLossEstimdFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Inverter Power Loss Estimated Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattHeatgPwrAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out51", + "name": "sVcTestRx_Pw_HvBattHeatgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Allowed heating power of the high voltage battery. ", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattHeatgPwrReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out52", + "name": "sVcTestRx_Pw_HvBattHeatgPwrReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Heating power request of the high voltage battery. Used to keep battery within the minimum operating temperature.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_E_HvBattClimaEgyReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out53", + "name": "sVcTestRx_E_HvBattClimaEgyReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "High Voltage Battery Climatisation Energy Request", + "type": "Float32", + "unit": "Wh", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_HvBattClimaPrioReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out54", + "name": "sVcTestRx_D_HvBattClimaPrioReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "High Voltage Battery Climatisation Priority Request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattClimaPwrEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out55", + "name": "sVcTestRx_Pw_HvBattClimaPwrEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Climatization power estimation of the high voltage battery based on the flow of the coolant within the battery pack, the temperature of the coolant within the battery pack and specific heat capacity for the coolant.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_E_HvBattCoolgEgyAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out56", + "name": "sVcTestRx_E_HvBattCoolgEgyAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "High voltage battery allowed cooling energy. The limit is estimated based on min and max battery temperature and the thermal mass of the battery pack. Data is used as input for thermal coordinator to use the battery HW as thermal sink.", + "type": "Float32", + "unit": "Wh", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattCoolgPwrAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out57", + "name": "sVcTestRx_Pw_HvBattCoolgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "The cooling powers are derived from the respective energy allowed limitations and based on a calibratable time threshold.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattCoolgPwrReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out58", + "name": "sVcTestRx_Pw_HvBattCoolgPwrReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cooling power request of the high voltage battery.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_E_HvBattHeatgEgyAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out59", + "name": "sVcTestRx_E_HvBattHeatgEgyAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Allowed heating energy of the high voltage battery. Input to thermal coordinator to be able to use high voltage battery as thermal sink.", + "type": "Float32", + "unit": "Wh", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Q_HvBattMinFlowReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out60", + "name": "sVcTestRx_Q_HvBattMinFlowReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Minimum flow request of the high voltage battery. Request for coolant flow.", + "type": "Float32", + "unit": "l/min", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvBattCooltTSnsrSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out61", + "name": "sVcTestRx_Enm_HvBattCooltTSnsrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Status of the coolant temperature sensor. Something of a quality flag.", + "type": "HvBattSnsrSts", + "unit": "-,$HvBattSnsrSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattCoolgPwrEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out62", + "name": "sVcTestRx_Pw_HvBattCoolgPwrEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cooling power (thermal) for current heating need.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattCoolgPwrPred": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out63", + "name": "sVcTestRx_Pw_HvBattCoolgPwrPred", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cooling power (thermal) for next heating need.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_VehModDrv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out4", + "name": "yVcTestRx_B_VehModDrv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Vehicle Mode Driving", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_MaxDefOn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out64", + "name": "yVcTestRx_B_MaxDefOn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Max Defroster On from DHU", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_HvBattOnOffVlvSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out65", + "name": "sVcTestRx_D_HvBattOnOffVlvSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcTestRx_D_HvBattOnOffVlvSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_AmbTMecRimSnsr": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out66", + "name": "sVcTestRx_Te_AmbTMecRimSnsr", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient temperature sensor from FIOC", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_AmbTMecRimSnsrElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out67", + "name": "sVcTestRx_D_AmbTMecRimSnsrElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_AmbTMecRimSnsrElecSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CircCnctVlvSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out68", + "name": "sVcTestRx_D_CircCnctVlvSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltPmpDtElecCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out69", + "name": "sVcTestRx_D_CooltPmpDtElecCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltPmpHvBattCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out70", + "name": "sVcTestRx_D_CooltPmpHvBattCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_CooltPmpInClimaCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out71", + "name": "sVcTestRx_D_CooltPmpInClimaCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_FanRlySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out73", + "name": "sVcTestRx_D_FanRlySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_PropVlvToHvBattCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out74", + "name": "sVcTestRx_D_PropVlvToHvBattCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_RadrBypVlvSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out75", + "name": "sVcTestRx_D_RadrBypVlvSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_RlyForCoolgElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out76", + "name": "sVcTestRx_D_RlyForCoolgElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_RlyForCoolgSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out77", + "name": "sVcTestRx_D_RlyForCoolgSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_SplrShttrCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out78", + "name": "sVcTestRx_D_SplrShttrCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_SplrShttrInfoSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out79", + "name": "sVcTestRx_D_SplrShttrInfoSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_p_PMedCmprOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out72", + "name": "sVcTestRx_p_PMedCmprOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_MtrlSnsrTQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out80", + "name": "yVcTestRx_B_MtrlSnsrTQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_VehModAvl": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out81", + "name": "yVcTestRx_B_VehModAvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_VehModAwake": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out82", + "name": "yVcTestRx_B_VehModAwake", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_VehModMovable": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out83", + "name": "yVcTestRx_B_VehModMovable", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_CarMode": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out84", + "name": "sVcTestRx_Enm_CarMode", + "configs": "((ALWAYS_ACTIVE))", + "description": "Product Lifecycle distributes different lifecycle modes of the vehicle which includes Car Mode e.g. (normal, transport, dyno, factory), Crash Mode. ", + "type": "CarModes", + "unit": "-,$CarModes", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_CarModeSubtype": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out85", + "name": "sVcTestRx_Enm_CarModeSubtype", + "configs": "((ALWAYS_ACTIVE))", + "description": "Product Lifecycle distributes different lifecycle modes of the vehicle which includes Car Mode e.g. (normal, transport, dyno, factory), Crash Mode. ", + "type": "CarModes", + "unit": "-,$CarModes", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_CrashMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out86", + "name": "yVcTestRx_B_CrashMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_EvapTFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out87", + "name": "sVcTestRx_Te_EvapTFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Evap Temp Front", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_EvapTFrntQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out88", + "name": "yVcTestRx_B_EvapTFrntQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Evap temp Front QF", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_t_HvBattCoolgPwrTi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out89", + "name": "sVcTestRx_t_HvBattCoolgPwrTi", + "configs": "((ALWAYS_ACTIVE))", + "description": "How long the current cooling power is held. ", + "type": "Float32", + "unit": "s", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattCoolgPwrTran": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out90", + "name": "sVcTestRx_Pw_HvBattCoolgPwrTran", + "configs": "((ALWAYS_ACTIVE))", + "description": "Transition phase from current cooling power to the next stationary cooling power level.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattHeatgPwrEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out91", + "name": "sVcTestRx_Pw_HvBattHeatgPwrEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Heating power (thermal) for the current cooling need.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattHeatgPwrPred": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out92", + "name": "sVcTestRx_Pw_HvBattHeatgPwrPred", + "configs": "((ALWAYS_ACTIVE))", + "description": "Heating power (thermal) for the next cooling need.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_t_HvBattHeatgPwrTi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out93", + "name": "sVcTestRx_t_HvBattHeatgPwrTi", + "configs": "((ALWAYS_ACTIVE))", + "description": "How long the current heating power is held.", + "type": "Float32", + "unit": "s", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvBattHeatgPwrTran": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out94", + "name": "sVcTestRx_Pw_HvBattHeatgPwrTran", + "configs": "((ALWAYS_ACTIVE))", + "description": "Transition phase from current heating power to the next stationary heating power level.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvBattTAvg": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out97", + "name": "sVcTestRx_Te_HvBattTAvg", + "configs": "((ALWAYS_ACTIVE))", + "description": "The average temperature of the high voltage battery.", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_U_HvBattU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out98", + "name": "sVcTestRx_U_HvBattU", + "configs": "((ALWAYS_ACTIVE))", + "description": "The average temperature of the high voltage battery.The average temperature of the high voltage battery.", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_HvBattI": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out99", + "name": "sVcTestRx_I_HvBattI", + "configs": "((ALWAYS_ACTIVE))", + "description": "HV Battery current. Positive current is discharging the battery.", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_EmIvtrFrntIDc": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out100", + "name": "sVcTestRx_I_EmIvtrFrntIDc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current in(+) or out(-) front inverter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_EmIvtrFrntMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out101", + "name": "sVcTestRx_Enm_EmIvtrFrntMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current operating mode", + "type": "EmMod", + "unit": "-,$EmMod", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_n_EmMotFrntSpd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out102", + "name": "sVcTestRx_n_EmMotFrntSpd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current speed of electric axle scaled to wheel axle ", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Tq_EmMotFrntTqAvlMax": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out103", + "name": "sVcTestRx_Tq_EmMotFrntTqAvlMax", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Tq_EmMotFrntTqAvlMin": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out104", + "name": "sVcTestRx_Tq_EmMotFrntTqAvlMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_U_EmIvtrFrntDcU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out105", + "name": "sVcTestRx_U_EmIvtrFrntDcU", + "configs": "((ALWAYS_ACTIVE))", + "description": "DC voltage", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Tq_EmMotFrntTqEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out106", + "name": "sVcTestRx_Tq_EmMotFrntTqEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current estimated torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_EmIvtrReIDc": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out107", + "name": "sVcTestRx_I_EmIvtrReIDc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current in(+) or out(-) front inverter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_EmIvtrReMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out108", + "name": "sVcTestRx_Enm_EmIvtrReMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current operating mode", + "type": "EmMod", + "unit": "-,$EmMod", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_n_EmMotReSpd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out109", + "name": "sVcTestRx_n_EmMotReSpd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current speed of electric axle scaled to wheel axle", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Tq_EmMotReTqAvlMax": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out110", + "name": "sVcTestRx_Tq_EmMotReTqAvlMax", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Tq_EmMotReTqAvlMin": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out111", + "name": "sVcTestRx_Tq_EmMotReTqAvlMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_U_EmIvtrReDcU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out112", + "name": "sVcTestRx_U_EmIvtrReDcU", + "configs": "((ALWAYS_ACTIVE))", + "description": "DC voltage", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Tq_EmMotReTqEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out113", + "name": "sVcTestRx_Tq_EmMotReTqEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current estimated torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvBattTMax": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out95", + "name": "sVcTestRx_Te_HvBattTMax", + "configs": "((ALWAYS_ACTIVE))", + "description": "The maximum temperature of the high voltage battery. ", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvBattTMin": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out96", + "name": "sVcTestRx_Te_HvBattTMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "The minimum temperature of the high voltage battery.", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_v_VehSpdLgt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out114", + "name": "sVcTestRx_v_VehSpdLgt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Estimate of instantanious longitudinal velocity of vehicle using wheel rotary encoders, the Inertial Measurement Unit and the Global Positioning System. Vehicle axis system defined by ISO 8855.", + "type": "Float32", + "unit": "m/s", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_VehSpdLgtQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out115", + "name": "sVcTestRx_Enm_VehSpdLgtQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Estimate of instantanious longitudinal velocity of vehicle using wheel rotary encoders, QF", + "type": "VmsQf", + "unit": "-,$VmsQf", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvChrgrT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out119", + "name": "sVcTestRx_Te_HvChrgrT", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides the temperature of the Onboard charger ", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_t_HvChrgTiToFull": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out120", + "name": "sVcTestRx_t_HvChrgTiToFull", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides an estimated charging time left", + "type": "Float32", + "unit": "s", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Pw_HvDcDcTraPwr": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out122", + "name": "sVcTestRx_Pw_HvDcDcTraPwr", + "configs": "((ALWAYS_ACTIVE))", + "description": "Power parameter that characterizes voltage transients.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_HvDcDcILv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out123", + "name": "sVcTestRx_I_HvDcDcILv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual current at the Low Voltage side of Hconverter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_HvDcDcIHv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out124", + "name": "sVcTestRx_I_HvDcDcIHv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual current at the Low Voltage side of converter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_U_HvDcDcULv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out125", + "name": "sVcTestRx_U_HvDcDcULv", + "configs": "((ALWAYS_ACTIVE))", + "description": "The voltage on the low voltage side of Hconverter", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_U_HvDcDcUHv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out126", + "name": "sVcTestRx_U_HvDcDcUHv", + "configs": "((ALWAYS_ACTIVE))", + "description": "The measured voltage on the high voltage side of converter", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvChrgrTyp": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out116", + "name": "sVcTestRx_Enm_HvChrgrTyp", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides the charging method currently used by the charging system", + "type": "HvChrgrTyp", + "unit": "-,$HvChrgrTyp", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvChrgrCnctnSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out117", + "name": "sVcTestRx_Enm_HvChrgrCnctnSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides connection status between the onboard charger and the Grid", + "type": "HvChrgrCnctnSts", + "unit": "-,$HvChrgrCnctnSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvChrgnSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out118", + "name": "sVcTestRx_Enm_HvChrgnSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides the charging status of the On-Board Charger for AC charging", + "type": "HvChrgnSts", + "unit": "-,$HvChrgnSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvChrgCoolgReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out121", + "name": "sVcTestRx_Enm_HvChrgCoolgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "It requests a change in cooling power on High Voltage Charger. According to the ways of coolling, the ECU will ask a specific type of colling. ", + "type": "HvChrgCoolgReq", + "unit": "-,$HvChrgCoolgReq", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvDcDcMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out127", + "name": "sVcTestRx_Enm_HvDcDcMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current settings and status of the converter", + "type": "HvDcDcMod", + "unit": "-,$HvDcDcMod", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvDcDcCoolgFlowReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out128", + "name": "sVcTestRx_Enm_HvDcDcCoolgFlowReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "The converter has requested extra coolant flow", + "type": "CoolingFlowPower", + "unit": "-,$CoolingFlowPower", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvDcDcFltSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out129", + "name": "sVcTestRx_Enm_HvDcDcFltSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "It indicates that the converter has a fault scenario", + "type": "HvDcDcFltSts", + "unit": "-,$HvDcDcFltSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_MaiHvCntctSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out130", + "name": "sVcTestRx_Enm_MaiHvCntctSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual state of the HV batt contactors.", + "type": "HvCntctSts", + "unit": "-,$HvCntctSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Enm_HvDcDcCntctSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out131", + "name": "sVcTestRx_Enm_HvDcDcCntctSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Status of DC charging contactor pair 1.", + "type": "HvCntctSts", + "unit": "-,$HvCntctSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_ElecExpVlvCtrlPsnActForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out132", + "name": "sVcTestRx_X_ElecExpVlvCtrlPsnActForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual position of the expansion valve", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_ElecExpVlvCtrlIninStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out133", + "name": "sVcTestRx_D_ElecExpVlvCtrlIninStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates status of initializationfor expansion valve 0. Not initialized, 1. Initialization in progress, 2. Initalized", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_ElecExpVlvCtrlTWarnStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out134", + "name": "sVcTestRx_D_ElecExpVlvCtrlTWarnStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual position of the expansion valve", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_ElecExpVlvCtrlUerrStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out135", + "name": "sVcTestRx_D_ElecExpVlvCtrlUerrStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if EXV voltagage error occur. 0. No error(OK), 1=Overvoltage. 2=Undervoltage ", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_D_ElecExpVlvCtrlErrStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out136", + "name": "sVcTestRx_D_ElecExpVlvCtrlErrStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if EXV fault occurs. 0. No error (OK), 1. Motor-coil shorted, 2. Motor-coil open load. 3. Overtemperature shutdown. 5. Status unknown ", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_ElecExpVlvCtrlRunsStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out137", + "name": "yVcTestRx_B_ElecExpVlvCtrlRunsStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if motor is moving. 0=Not moving, 1=Moving ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_ElecExpVlvCtrlMotStallStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out138", + "name": "yVcTestRx_B_ElecExpVlvCtrlMotStallStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if the chiller expansion valve motor has stalled or not. 0=No stall detected 1=Stall detected ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_n_CmprRunStsCmprSpd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out140", + "name": "sVcTestRx_n_CmprRunStsCmprSpd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor speed ", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_CmprRunStsCmprI": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out141", + "name": "sVcTestRx_I_CmprRunStsCmprI", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor input current ", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_I_CmprRunStsCmprIPha": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out142", + "name": "sVcTestRx_I_CmprRunStsCmprIPha", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor phase current ", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_CmprRunStsCmprT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out143", + "name": "sVcTestRx_Te_CmprRunStsCmprT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor inverter termperature ", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_U_CmprRunStsCmprU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out144", + "name": "sVcTestRx_U_CmprRunStsCmprU", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor input voltage ", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_p_PMedChillrOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out139", + "name": "sVcTestRx_p_PMedChillrOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "Refrigerant pressure Chiller Out", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_TMedCmprOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out145", + "name": "sVcTestRx_Te_TMedCmprOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "Refrigerant temperature compressor out", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_TMedChillrOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out146", + "name": "sVcTestRx_Te_TMedChillrOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "Temperature refirgerant chiller out", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvCooltWtrHeatrWtrTInOutl2": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out147", + "name": "sVcTestRx_Te_HvCooltWtrHeatrWtrTInOutl2", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVHC in coolant temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcCatRx_Pw_HvHeatrPwrCns2": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out148", + "name": "sVcCatRx_Pw_HvHeatrPwrCns2", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVCH power consumption", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForCentrForFirstLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out149", + "name": "sVcTestRx_X_AirFlapPosnActForCentrForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForDefrst1": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out150", + "name": "sVcTestRx_X_AirFlapPosnActForDefrst1", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForFlrForFirstRiLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out151", + "name": "sVcTestRx_X_AirFlapPosnActForFlrForFirstRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForFlrForSecRiLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out152", + "name": "sVcTestRx_X_AirFlapPosnActForFlrForSecRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForOsa1": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out153", + "name": "sVcTestRx_X_AirFlapPosnActForOsa1", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForRecirc1": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out154", + "name": "sVcTestRx_X_AirFlapPosnActForRecirc1", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForSideForFirstLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out155", + "name": "sVcTestRx_X_AirFlapPosnActForSideForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForVentCentrForFirstRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out156", + "name": "sVcTestRx_X_AirFlapPosnActForVentCentrForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForVentForSecRiLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out157", + "name": "sVcTestRx_X_AirFlapPosnActForVentForSecRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnActForVentSideForFirstRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out158", + "name": "sVcTestRx_X_AirFlapPosnActForVentSideForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnTActForFirstLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out159", + "name": "sVcTestRx_X_AirFlapPosnTActForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnTActForFirstRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out160", + "name": "sVcTestRx_X_AirFlapPosnTActForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnTActForSecLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out161", + "name": "sVcTestRx_X_AirFlapPosnTActForSecLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_AirFlapPosnTActForSecRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out162", + "name": "sVcTestRx_X_AirFlapPosnTActForSecRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac air flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForHeatrFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out163", + "name": "sVcTestRx_Te_HvacAirTForHeatrFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "HEX temperature sensor", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForHeatrFrntQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out164", + "name": "yVcTestRx_B_HvacAirTForHeatrFrntQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for HEX temperature sensor", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowFirstAtFlrRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out165", + "name": "sVcTestRx_Te_HvacAirTForRowFirstAtFlrRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowFirstAtFlrRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out166", + "name": "yVcTestRx_B_HvacAirTForRowFirstAtFlrRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowFirstAtVentLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out167", + "name": "sVcTestRx_Te_HvacAirTForRowFirstAtVentLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowFirstAtVentLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out168", + "name": "yVcTestRx_B_HvacAirTForRowFirstAtVentLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowFirstAtVentRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out169", + "name": "sVcTestRx_Te_HvacAirTForRowFirstAtVentRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowFirstAtVentRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out170", + "name": "yVcTestRx_B_HvacAirTForRowFirstAtVentRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowSecAtFlrLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out171", + "name": "sVcTestRx_Te_HvacAirTForRowSecAtFlrLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowSecAtFlrLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out172", + "name": "yVcTestRx_B_HvacAirTForRowSecAtFlrLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowSecAtFlrRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out173", + "name": "sVcTestRx_Te_HvacAirTForRowSecAtFlrRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowSecAtFlrRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out174", + "name": "yVcTestRx_B_HvacAirTForRowSecAtFlrRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowSecAtVentLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out175", + "name": "sVcTestRx_Te_HvacAirTForRowSecAtVentLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowSecAtVentLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out176", + "name": "yVcTestRx_B_HvacAirTForRowSecAtVentLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowSecAtVentRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out177", + "name": "sVcTestRx_Te_HvacAirTForRowSecAtVentRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowSecAtVentRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out178", + "name": "yVcTestRx_B_HvacAirTForRowSecAtVentRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_Te_HvacAirTForRowFirstAtFlrLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out179", + "name": "sVcTestRx_Te_HvacAirTForRowFirstAtFlrLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hvac outlet temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestRx_B_HvacAirTForRowFirstAtFlrLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out180", + "name": "yVcTestRx_B_HvacAirTForRowFirstAtFlrLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Quality factor for Hvac outlet temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_HmiReqForRo1VentSideLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out181", + "name": "sVcTestRx_X_HmiReqForRo1VentSideLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hmi Request for vent Side Left (Thumbwheel)", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_HmiReqForRo1VentSideRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out182", + "name": "sVcTestRx_X_HmiReqForRo1VentSideRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hmi Request for vent Side Right (Thumbwheel)", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_HmiReqForRo1VentCenLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out183", + "name": "sVcTestRx_X_HmiReqForRo1VentCenLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hmi Request for vent Center Left (Thumbwheel)", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestRx_X_HmiReqForRo1VentCenRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Out184", + "name": "sVcTestRx_X_HmiReqForRo1VentCenRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hmi Request for vent Center Right (Thumbwheel)", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + } + }, + "inports": { + "yVcVmp_B_VehModConv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In1", + "name": "yVcVmp_B_VehModConv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Vehicle Mode convinience", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmp_B_VehModDrv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In2", + "name": "yVcVmp_B_VehModDrv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Vehicle Mode Drive", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Pw_EmIvtrPwrLossEstimdFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In3", + "name": "sVcIhfa_Pw_EmIvtrPwrLossEstimdFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Inverter Power Loss Estimated Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Pw_EmMotPwrLossEstimdFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In4", + "name": "sVcIhfa_Pw_EmMotPwrLossEstimdFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Motor Power Loss Estimated Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Pw_EmPwrAddlLossAvlFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In5", + "name": "sVcIhfa_Pw_EmPwrAddlLossAvlFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Available Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Pw_EmPwrAddlLossEstimdFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In6", + "name": "sVcIhfa_Pw_EmPwrAddlLossEstimdFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Estimated Front", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Te_EmIvtrFrntCooltT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In7", + "name": "sVcIhfa_Te_EmIvtrFrntCooltT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant temperature measured in the coolant inlet in inverter", + "type": "Int16", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Te_EmIvtrFrntT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In8", + "name": "sVcIhfa_Te_EmIvtrFrntT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Inverter temperature measured in the inverter front", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Te_EmMotFrntT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In9", + "name": "sVcIhfa_Te_EmMotFrntT", + "configs": "((ALWAYS_ACTIVE))", + "description": "The motor temperature measured at the windings in the electric motor", + "type": "Int16", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Enm_EmFrntCoolgReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In10", + "name": "sVcIhfa_Enm_EmFrntCoolgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request for increased cooling power to both electric machine and inverter ", + "type": "Int8", + "unit": "-,$EmCoolgReq", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Pw_EmIvtrPwrLossEstimdRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In11", + "name": "sVcIhra_Pw_EmIvtrPwrLossEstimdRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Inverter Power Loss Estimated Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Pw_EmMotPwrLossEstimdRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In12", + "name": "sVcIhra_Pw_EmMotPwrLossEstimdRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Motor Power Loss Estimated Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Pw_EmPwrAddlLossAvlRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In13", + "name": "sVcIhra_Pw_EmPwrAddlLossAvlRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Available Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Pw_EmPwrAddlLossEstimdRe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In14", + "name": "sVcIhra_Pw_EmPwrAddlLossEstimdRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Power Additional Loss Estimated Rear", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_FanModSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In19", + "name": "sVcFioc_D_FanModSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Mode Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_FanCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In20", + "name": "sVcFioc_D_FanCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Error", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_FanSpdAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In21", + "name": "sVcFioc_X_FanSpdAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Speed Actual", + "type": "UInt8", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_StsOfCooltLvl": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In22", + "name": "sVcFioc_D_StsOfCooltLvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Status Of Coolant Level", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_CooltTAftRadrDtElec": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In23", + "name": "sVcFioc_Te_CooltTAftRadrDtElec", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Radiator Drivetrain Electric", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_CooltTAftHvac": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In24", + "name": "sVcFioc_Te_CooltTAftHvac", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Hvac", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_CooltTBfrRadrBypVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In25", + "name": "sVcFioc_Te_CooltTBfrRadrBypVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature Before Radiator Bypass Valve", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_CooltTAtHvBattOutl": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In26", + "name": "sVcFioc_Te_CooltTAtHvBattOutl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature At High Voltage Battery Outlet", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_FanElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In27", + "name": "sVcFioc_D_FanElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_FanRlyElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In28", + "name": "sVcFioc_D_FanRlyElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Relay Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CircCnctVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In29", + "name": "sVcFioc_D_CircCnctVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Circuit Connect Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_RadrBypVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In30", + "name": "sVcFioc_D_RadrBypVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Radiator Bypass Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_HvBattOnOffVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In31", + "name": "sVcFioc_D_HvBattOnOffVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "High Voltage Battery On Off Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltTAftRadrDtElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In32", + "name": "sVcFioc_D_CooltTAftRadrDtElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Radiator Drivetrain Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltTAftHvacElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In33", + "name": "sVcFioc_D_CooltTAftHvacElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature After Hvac Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltTBfrRadrBypVlvElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In34", + "name": "sVcFioc_D_CooltTBfrRadrBypVlvElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature Before Radiator Bypass Valve Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltTAtHvBattOutlElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In35", + "name": "sVcFioc_D_CooltTAtHvBattOutlElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature At High Voltage Battery Outlet Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltLvlElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In36", + "name": "sVcFioc_D_CooltLvlElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Level Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_CooltPmpSpdInHvBattCircAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In37", + "name": "sVcFioc_X_CooltPmpSpdInHvBattCircAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump Speed In High Voltage Battery Circuit Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_CooltPmpInHvBattCircSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In38", + "name": "sVcFioc_X_CooltPmpInHvBattCircSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump In High Voltage Battery Circuit Status", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_CooltPmpSpdInCircDtElecAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In39", + "name": "sVcFioc_X_CooltPmpSpdInCircDtElecAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump Speed In Circuit Drivetrain Electric Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltPmpInDtElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In40", + "name": "sVcFioc_D_CooltPmpInDtElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump In Drivetrain Electric Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_CooltPmpSpdInCircClimaAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In41", + "name": "sVcFioc_X_CooltPmpSpdInCircClimaAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Pump Speed In Circuit Climatisation Actual", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CltPmpInCircClimaSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In42", + "name": "sVcFioc_D_CltPmpInCircClimaSts", + "configs": "((ALWAYS_ACTIVE))", + "description": " Pump In Circuit Climatisation Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_PropVlvToHvBattAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In43", + "name": "sVcFioc_X_PropVlvToHvBattAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Actual", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_PropVlvToHvBattFltSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In44", + "name": "sVcFioc_D_PropVlvToHvBattFltSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Fault Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_PropVlvToHvBattSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In45", + "name": "sVcFioc_D_PropVlvToHvBattSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_SplrShttrSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In46", + "name": "sVcFioc_D_SplrShttrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_SplrShttrFltSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In47", + "name": "sVcFioc_D_SplrShttrFltSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Fault Status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_an_SplrShttrAgAct": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In48", + "name": "sVcFioc_an_SplrShttrAgAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Angle Actual", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattHeatgPwrAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In49", + "name": "sVcHvec_Pw_HvBattHeatgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Allowed heating power of the high voltage battery. ", + "type": "UInt16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattHeatgPwrReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In50", + "name": "sVcHvec_Pw_HvBattHeatgPwrReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Heating power request of the high voltage battery. Used to keep battery within the minimum operating temperature. ", + "type": "UInt16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_E_HvBattClimaEgyReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In51", + "name": "sVcHvec_E_HvBattClimaEgyReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "High Voltage Battery Climatisation Energy Request", + "type": "UInt16", + "unit": "Wh", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_D_HvBattClimaPrioReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In52", + "name": "sVcHvec_D_HvBattClimaPrioReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "High Voltage Battery Climatisation Priority Request", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattClimaPwrEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In53", + "name": "sVcHvec_Pw_HvBattClimaPwrEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Climatization power estimation of the high voltage battery based on the flow of the coolant within the battery pack, the temperature of the coolant within the battery pack and specific heat capacity for the coolant. ", + "type": "Int16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_E_HvBattCoolgEgyAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In54", + "name": "sVcHvec_E_HvBattCoolgEgyAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "High voltage battery allowed cooling energy. The limit is estimated based on min and max battery temperature and the thermal mass of the battery pack. Data is used as input for thermal coordinator to use the battery HW as thermal sink.", + "type": "UInt16", + "unit": "Wh", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattCoolgPwrAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In55", + "name": "sVcHvec_Pw_HvBattCoolgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "The cooling powers are derived from the respective energy allowed limitations and based on a calibratable time threshold. ", + "type": "UInt16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattCoolgPwrReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In56", + "name": "sVcHvec_Pw_HvBattCoolgPwrReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cooling power request of the high voltage battery.", + "type": "UInt16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_E_HvBattHeatgEgyAllwd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In57", + "name": "sVcHvec_E_HvBattHeatgEgyAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Allowed heating energy of the high voltage battery. Input to thermal coordinator to be able to use high voltage battery as thermal sink.", + "type": "UInt16", + "unit": "Wh", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Q_HvBattMinFlowReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In58", + "name": "sVcHvec_Q_HvBattMinFlowReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Minimum flow request of the high voltage battery. Request for coolant flow.", + "type": "Float32", + "unit": "l/min", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Enm_HvBattCooltTSnsrSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In59", + "name": "sVcHvec_Enm_HvBattCooltTSnsrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Status of the coolant temperature sensor. Something of a quality flag.", + "type": "Int8", + "unit": "-,$HvBattSnsrSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattCoolgPwrEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In60", + "name": "sVcHvec_Pw_HvBattCoolgPwrEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cooling power (thermal) for current heating need.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattCoolgPwrPred": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In61", + "name": "sVcHvec_Pw_HvBattCoolgPwrPred", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cooling power (thermal) for next heating need.", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcReq_B_MaxDefOn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In62", + "name": "yVcReq_B_MaxDefOn", + "configs": "((ALWAYS_ACTIVE))", + "description": "MaxDefOn", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_HvBattOnOffVlvSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In63", + "name": "sVcFioc_D_HvBattOnOffVlvSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_HvBattOnOffVlvSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_AmbTMecRimSnsr": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In64", + "name": "sVcFioc_Te_AmbTMecRimSnsr", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient temperature sensor from FIOC", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_AmbTMecRimSnsrElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In65", + "name": "sVcFioc_D_AmbTMecRimSnsrElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_AmbTMecRimSnsrElecSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CircCnctVlvSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In66", + "name": "sVcFioc_D_CircCnctVlvSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_CircCnctVlvSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltPmpDtElecCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In67", + "name": "sVcFioc_D_CooltPmpDtElecCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_CooltPmpDtElecCpbySts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltPmpHvBattCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In68", + "name": "sVcFioc_D_CooltPmpHvBattCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_CooltPmpHvBattCpbySts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_CooltPmpInClimaCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In69", + "name": "sVcFioc_D_CooltPmpInClimaCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_CooltPmpInClimaCpbySts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_FanRlySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In71", + "name": "sVcFioc_D_FanRlySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_FanRlySts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_PropVlvToHvBattCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In73", + "name": "sVcFioc_D_PropVlvToHvBattCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_PropVlvToHvBattCpbySts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_RadrBypVlvSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In74", + "name": "sVcFioc_D_RadrBypVlvSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_RadrBypVlvSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_RlyForCoolgElecSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In75", + "name": "sVcFioc_D_RlyForCoolgElecSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_RlyForCoolgElecSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_RlyForCoolgSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In76", + "name": "sVcFioc_D_RlyForCoolgSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_RlyForCoolgSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_SplrShttrCpbySts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In77", + "name": "sVcFioc_D_SplrShttrCpbySts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_SplrShttrCpbySts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_SplrShttrInfoSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In78", + "name": "sVcFioc_D_SplrShttrInfoSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_D_SplrShttrInfoSts", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_p_PMedCmprOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In70", + "name": "sVcFioc_p_PMedCmprOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "sVcFioc_Z_PMedCmprOut", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_EvapTFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In72", + "name": "sVcCcmb_Te_EvapTFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_MtrlSnsrT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In79", + "name": "sVcCcmb_Te_MtrlSnsrT", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_MtrlSnsrTQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In80", + "name": "yVcCcmb_B_MtrlSnsrTQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_EvapTFrntQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In81", + "name": "yVcCcmb_B_EvapTFrntQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmp_B_VehModAvl": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In82", + "name": "yVcVmp_B_VehModAvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmp_B_VehModAwake": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In83", + "name": "yVcVmp_B_VehModAwake", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmp_B_VehModMovable": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In84", + "name": "yVcVmp_B_VehModMovable", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmp_Enm_CarMode": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In85", + "name": "sVcVmp_Enm_CarMode", + "configs": "((ALWAYS_ACTIVE))", + "description": "Product Lifecycle distributes different lifecycle modes of the vehicle which includes Car Mode e.g. (normal, transport, dyno, factory), Crash Mode. ", + "type": "Int8", + "unit": "-,$CarModes", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmp_Enm_CarModeSubtype": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In86", + "name": "sVcVmp_Enm_CarModeSubtype", + "configs": "((ALWAYS_ACTIVE))", + "description": "Product Lifecycle distributes different lifecycle modes of the vehicle which includes Car Mode e.g. (normal, transport, dyno, factory), Crash Mode", + "type": "Int8", + "unit": "-,$CarModes", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmp_B_CrashMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In87", + "name": "yVcVmp_B_CrashMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_t_HvBattCoolgPwrTi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In88", + "name": "sVcHvec_t_HvBattCoolgPwrTi", + "configs": "((ALWAYS_ACTIVE))", + "description": "How long the current cooling power is held. ", + "type": "Int32", + "unit": "s", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattCoolgPwrTran": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In89", + "name": "sVcHvec_Pw_HvBattCoolgPwrTran", + "configs": "((ALWAYS_ACTIVE))", + "description": "Transition phase from current cooling power to the next stationary cooling power level. ", + "type": "Int32", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattHeatgPwrEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In90", + "name": "sVcHvec_Pw_HvBattHeatgPwrEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Heating power (thermal) for the current cooling need. ", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattHeatgPwrPred": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In91", + "name": "sVcHvec_Pw_HvBattHeatgPwrPred", + "configs": "((ALWAYS_ACTIVE))", + "description": "Heating power (thermal) for the next cooling need. ", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_t_HvBattHeatgPwrTi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In92", + "name": "sVcHvec_t_HvBattHeatgPwrTi", + "configs": "((ALWAYS_ACTIVE))", + "description": "How long the current heating power is held.", + "type": "Int32", + "unit": "s", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Pw_HvBattHeatgPwrTran": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In93", + "name": "sVcHvec_Pw_HvBattHeatgPwrTran", + "configs": "((ALWAYS_ACTIVE))", + "description": "Transition phase from current heating power to the next stationary heating power level. ", + "type": "Int32", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Te_HvBattTAvg": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In96", + "name": "sVcHvec_Te_HvBattTAvg", + "configs": "((ALWAYS_ACTIVE))", + "description": "The average temperature of the high voltage battery.", + "type": "Int32", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_U_HvBattU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In97", + "name": "sVcHvec_U_HvBattU", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual HV Battery pack voltage (measured before contactors, i.e. always giving pack voltage).", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_I_HvBattI": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In98", + "name": "sVcHvec_I_HvBattI", + "configs": "((ALWAYS_ACTIVE))", + "description": "HV Battery current. Positive current is discharging the battery.", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_I_EmIvtrFrntIDc": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In99", + "name": "sVcIhfa_I_EmIvtrFrntIDc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current in(+) or out(-) front inverter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Enm_EmIvtrFrntMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In100", + "name": "sVcIhfa_Enm_EmIvtrFrntMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current operating mode", + "type": "Int8", + "unit": "-,$EmMod", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_n_EmMotFrntSpd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In101", + "name": "sVcIhfa_n_EmMotFrntSpd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current speed of electric axle scaled to wheel axle ", + "type": "Int16", + "unit": "rpm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Tq_EmMotFrntTqAvlMax": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In102", + "name": "sVcIhfa_Tq_EmMotFrntTqAvlMax", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Int16", + "unit": "Nm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Tq_EmMotFrntTqAvlMin": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In103", + "name": "sVcIhfa_Tq_EmMotFrntTqAvlMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Int16", + "unit": "Nm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_U_EmIvtrFrntDcU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In104", + "name": "sVcIhfa_U_EmIvtrFrntDcU", + "configs": "((ALWAYS_ACTIVE))", + "description": "DC voltage", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhfa_Tq_EmMotFrntTqEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In105", + "name": "sVcIhfa_Tq_EmMotFrntTqEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current estimated torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Int16", + "unit": "Nm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Te_EmIvtrReCooltT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In15", + "name": "sVcIhra_Te_EmIvtrReCooltT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant temperature measured in the coolant inlet in inverter", + "type": "Int16", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Te_EmIvtrReT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In16", + "name": "sVcIhra_Te_EmIvtrReT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Inverter temperature measured in the inverter rear", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Enm_EmReCoolgReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In18", + "name": "sVcIhra_Enm_EmReCoolgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request for increased cooling power to both electric machine and inverter", + "type": "Int8", + "unit": "-,$EmCoolgReq", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Te_EmMotReT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In17", + "name": "sVcIhra_Te_EmMotReT", + "configs": "((ALWAYS_ACTIVE))", + "description": "The motor temperature measured at the windings in the electric motor", + "type": "Int16", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_I_EmIvtrReIDc": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In106", + "name": "sVcIhra_I_EmIvtrReIDc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current in(+) or out(-) front inverter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Enm_EmIvtrReMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In107", + "name": "sVcIhra_Enm_EmIvtrReMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current operating mode ", + "type": "Int8", + "unit": "-,$EmMod", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_n_EmMotReSpd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In108", + "name": "sVcIhra_n_EmMotReSpd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current speed of electric axle scaled to wheel axle", + "type": "Int16", + "unit": "rpm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Tq_EmMotReTqAvlMax": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In109", + "name": "sVcIhra_Tq_EmMotReTqAvlMax", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction ", + "type": "Int16", + "unit": "Nm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Tq_EmMotReTqAvlMin": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In110", + "name": "sVcIhra_Tq_EmMotReTqAvlMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "Available torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Int16", + "unit": "Nm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_U_EmIvtrReDcU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In111", + "name": "sVcIhra_U_EmIvtrReDcU", + "configs": "((ALWAYS_ACTIVE))", + "description": "DC voltage", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIhra_Tq_EmMotReTqEstimn": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In112", + "name": "sVcIhra_Tq_EmMotReTqEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current estimated torque referred to the wheel axle. The torque is positive in the forward rotation direction", + "type": "Int16", + "unit": "Nm", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Te_HvBattTMax": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In94", + "name": "sVcHvec_Te_HvBattTMax", + "configs": "((ALWAYS_ACTIVE))", + "description": "The maximum temperature of the high voltage battery. ", + "type": "Int32", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Te_HvBattTMin": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In95", + "name": "sVcHvec_Te_HvBattTMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "The minimum temperature of the high voltage battery.", + "type": "Int32", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVms_v_VehSpdLgt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In113", + "name": "sVcVms_v_VehSpdLgt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Estimate of instantanious longitudinal velocity of vehicle using wheel rotary encoders, the Inertial Measurement Unit and the Global Positioning System. Vehicle axis system defined by ISO 8855.", + "type": "Float32", + "unit": "m/s", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVms_Enm_VehSpdLgtQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In114", + "name": "sVcVms_Enm_VehSpdLgtQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "Estimate of instantanious longitudinal velocity of vehicle using wheel rotary encoders, QF", + "type": "Int8", + "unit": "-,$VmsQf", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvcc_Te_HvChrgrT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In118", + "name": "sVcHvcc_Te_HvChrgrT", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides the temperature of the Onboard charger ", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvcc_t_HvChrgTiToFull": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In119", + "name": "sVcHvcc_t_HvChrgTiToFull", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides an estimated charging time left", + "type": "UInt16", + "unit": "s", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_Pw_HvDcDcTraPwr": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In121", + "name": "sVcHlcm_Pw_HvDcDcTraPwr", + "configs": "((ALWAYS_ACTIVE))", + "description": "Power parameter that characterizes voltage transients.", + "type": "UInt16", + "unit": "W", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_I_HvDcDcILv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In122", + "name": "sVcHlcm_I_HvDcDcILv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual current at the Low Voltage side of Hconverter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_I_HvDcDcIHv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In123", + "name": "sVcHlcm_I_HvDcDcIHv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual current at the Low Voltage side of converter", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_U_HvDcDcULv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In124", + "name": "sVcHlcm_U_HvDcDcULv", + "configs": "((ALWAYS_ACTIVE))", + "description": "The voltage on the low voltage side of Hconverter", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_U_HvDcDcUHv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In125", + "name": "sVcHlcm_U_HvDcDcUHv", + "configs": "((ALWAYS_ACTIVE))", + "description": "The measured voltage on the high voltage side of converter", + "type": "Float32", + "unit": "V", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvcc_Enm_HvChrgrTyp": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In115", + "name": "sVcHvcc_Enm_HvChrgrTyp", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides the charging method currently used by the charging system", + "type": "Int8", + "unit": "-,$HvChrgrTyp", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvcc_Enm_HvChrgrCnctnSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In116", + "name": "sVcHvcc_Enm_HvChrgrCnctnSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides connection status between the onboard charger and the Grid", + "type": "Int8", + "unit": "-,$HvChrgrCnctnSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvcc_Enm_HvChrgnSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In117", + "name": "sVcHvcc_Enm_HvChrgnSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "It provides the charging status of the On-Board Charger for AC charging", + "type": "Int8", + "unit": "-,$HvChrgnSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_Enm_HvDcDcMod": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In120", + "name": "sVcHlcm_Enm_HvDcDcMod", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current settings and status of the converter", + "type": "Int8", + "unit": "-,$HvDcDcMod", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_Enm_HvDcDcCoolgFlowReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In126", + "name": "sVcHlcm_Enm_HvDcDcCoolgFlowReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "The converter has requested extra coolant flow", + "type": "Int8", + "unit": "-,$CoolingFlowPower", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHlcm_Enm_HvDcDcFltSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In127", + "name": "sVcHlcm_Enm_HvDcDcFltSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "It indicates that the converter has a fault scenario", + "type": "Int8", + "unit": "-,$HvDcDcFltSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Enm_MaiHvCntctSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In128", + "name": "sVcHvec_Enm_MaiHvCntctSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual state of the HV batt contactors.", + "type": "Int8", + "unit": "-,$HvCntctSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvec_Enm_HvDcDcCntctSts": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In129", + "name": "sVcHvec_Enm_HvDcDcCntctSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Status of DC charging contactor pair 1.", + "type": "Int8", + "unit": "-,$HvCntctSts", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcHvcc_Enm_HvChrgCoolgReq": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In130", + "name": "sVcHvcc_Enm_HvChrgCoolgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "It requests a change in cooling power on High Voltage Charger. According to the ways of coolling, the ECU will ask a specific type of colling.", + "type": "Int8", + "unit": "-,$HvChrgCoolgReq", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_X_ElecExpVlvCtrlPsnActForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In131", + "name": "sVcFioc_X_ElecExpVlvCtrlPsnActForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual position of the expansion valve", + "type": "UInt16", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 576, + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_ElecExpVlvCtrlIninStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In132", + "name": "sVcFioc_D_ElecExpVlvCtrlIninStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates status of initializationfor expansion valve 0. Not initialized, 1. Initialization in progress, 2. Initalized", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_ElecExpVlvCtrlTWarnStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In133", + "name": "sVcFioc_D_ElecExpVlvCtrlTWarnStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if overheat occurs. 0=No overheat(OK) 1=Overheat ", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_ElecExpVlvCtrlUerrStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In134", + "name": "sVcFioc_D_ElecExpVlvCtrlUerrStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if EXV voltagage error occur. 0. No error(OK), 1=Overvoltage. 2=Undervoltage ", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_D_ElecExpVlvCtrlErrStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In135", + "name": "sVcFioc_D_ElecExpVlvCtrlErrStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if EXV fault occurs. 0. No error (OK), 1. Motor-coil shorted, 2. Motor-coil open load. 3. Overtemperature shutdown. 5. Status unknown ", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFioc_B_ElecExpVlvCtrlRunsStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In136", + "name": "yVcFioc_B_ElecExpVlvCtrlRunsStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if motor is moving. 0=Not moving, 1=Moving ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFioc_B_ElecExpVlvCtrlMotStallStsForChillrVlv": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In137", + "name": "yVcFioc_B_ElecExpVlvCtrlMotStallStsForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Indicates if the chiller expansion valve motor has stalled or not. 0=No stall detected 1=Stall detected ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_n_CmprRunStsCmprSpd": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In138", + "name": "sVcFioc_n_CmprRunStsCmprSpd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor speed ", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_I_CmprRunStsCmprI": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In139", + "name": "sVcFioc_I_CmprRunStsCmprI", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor input current ", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_I_CmprRunStsCmprIPha": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In140", + "name": "sVcFioc_I_CmprRunStsCmprIPha", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor phase current", + "type": "Float32", + "unit": "A", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_CmprRunStsCmprT": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In141", + "name": "sVcFioc_Te_CmprRunStsCmprT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor inverter termperature", + "type": "Float32", + "unit": "C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_U_CmprRunStsCmprU": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In142", + "name": "sVcFioc_U_CmprRunStsCmprU", + "configs": "((ALWAYS_ACTIVE))", + "description": "Compressor input voltage", + "type": "Float32", + "unit": "Volt", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_p_PMedChillrOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In143", + "name": "sVcFioc_p_PMedChillrOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "Refrigerant pressure Chiller Out", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_TMedChillrOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In144", + "name": "sVcFioc_Te_TMedChillrOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "Temperature refirgerant chiller out", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_TMedCmprOut": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In145", + "name": "sVcFioc_Te_TMedCmprOut", + "configs": "((ALWAYS_ACTIVE))", + "description": "Refrigerant temperature compressor out", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Te_HvCooltWtrHeatrWtrTInOutl2": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In146", + "name": "sVcFioc_Te_HvCooltWtrHeatrWtrTInOutl2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Int16", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcFioc_Pw_HvHeatrPwrCns2": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In147", + "name": "sVcFioc_Pw_HvHeatrPwrCns2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Int16", + "unit": "deg C", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForCentrForFirstLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In149", + "name": "sVcCcmb_X_AirFlapPosnActForCentrForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForDefrst1": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In150", + "name": "sVcCcmb_X_AirFlapPosnActForDefrst1", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForFlrForFirstRiLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In151", + "name": "sVcCcmb_X_AirFlapPosnActForFlrForFirstRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForFlrForSecRiLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In152", + "name": "sVcCcmb_X_AirFlapPosnActForFlrForSecRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForOsa1": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In153", + "name": "sVcCcmb_X_AirFlapPosnActForOsa1", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForRecirc1": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In154", + "name": "sVcCcmb_X_AirFlapPosnActForRecirc1", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForSideForFirstLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In155", + "name": "sVcCcmb_X_AirFlapPosnActForSideForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForVentCentrForFirstRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In156", + "name": "sVcCcmb_X_AirFlapPosnActForVentCentrForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForVentForSecRiLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In157", + "name": "sVcCcmb_X_AirFlapPosnActForVentForSecRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnActForVentSideForFirstRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In158", + "name": "sVcCcmb_X_AirFlapPosnActForVentSideForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnTActForFirstLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In159", + "name": "sVcCcmb_X_AirFlapPosnTActForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnTActForFirstRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In160", + "name": "sVcCcmb_X_AirFlapPosnTActForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnTActForSecLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In161", + "name": "sVcCcmb_X_AirFlapPosnTActForSecLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_X_AirFlapPosnTActForSecRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In162", + "name": "sVcCcmb_X_AirFlapPosnTActForSecRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Air Flap position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForHeatrFrnt": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In148", + "name": "sVcCcmb_Te_HvacAirTForHeatrFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForHeatrFrntQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In163", + "name": "yVcCcmb_B_HvacAirTForHeatrFrntQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowFirstAtFlrRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In164", + "name": "sVcCcmb_Te_HvacAirTForRowFirstAtFlrRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowFirstAtFlrRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In165", + "name": "yVcCcmb_B_HvacAirTForRowFirstAtFlrRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowFirstAtVentLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In166", + "name": "sVcCcmb_Te_HvacAirTForRowFirstAtVentLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowFirstAtVentLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In167", + "name": "yVcCcmb_B_HvacAirTForRowFirstAtVentLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowFirstAtVentRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In168", + "name": "sVcCcmb_Te_HvacAirTForRowFirstAtVentRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowFirstAtVentRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In169", + "name": "yVcCcmb_B_HvacAirTForRowFirstAtVentRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowSecAtFlrLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In170", + "name": "sVcCcmb_Te_HvacAirTForRowSecAtFlrLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowSecAtFlrLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In171", + "name": "yVcCcmb_B_HvacAirTForRowSecAtFlrLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowSecAtFlrRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In172", + "name": "sVcCcmb_Te_HvacAirTForRowSecAtFlrRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowSecAtFlrRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In173", + "name": "yVcCcmb_B_HvacAirTForRowSecAtFlrRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowSecAtVentLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In174", + "name": "sVcCcmb_Te_HvacAirTForRowSecAtVentLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowSecAtVentLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In175", + "name": "yVcCcmb_B_HvacAirTForRowSecAtVentLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowSecAtVentRi": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In176", + "name": "sVcCcmb_Te_HvacAirTForRowSecAtVentRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowSecAtVentRiQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In177", + "name": "yVcCcmb_B_HvacAirTForRowSecAtVentRiQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcmb_Te_HvacAirTForRowFirstAtFlrLe": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In178", + "name": "sVcCcmb_Te_HvacAirTForRowFirstAtFlrLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCcmb_B_HvacAirTForRowFirstAtFlrLeQf": { + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/In179", + "name": "yVcCcmb_B_HvacAirTForRowFirstAtFlrLeQf", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": { + "rVcTestRx_Z_Version": { + "type": "Float32", + "unit": "-", + "description": "Version of the VcTestRx SPM", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/Gain1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + } + }, + "calib_consts": { + "cVcTestRx_B_EmFrntCoolgReqSwi": { + "type": "Bool", + "unit": "-", + "description": "Wheel Motor System Front Cooling Request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmFrntCoolgReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmIvtrFrntCooltTSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Inverter Coolant Temperature Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmIvtrFrntCooltTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmIvtrFrntTSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Inverter Temperature Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmIvtrFrntTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmIvtrPwrLossEstimdFrntSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Inverter Power Loss Estimated Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmIvtrPwrLossEstimdFrntSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmMotFrntTSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Motor Temperature Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmMotFrntTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmMotPwrLossEstimdFrntSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Motor Power Loss Estimated Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmMotPwrLossEstimdFrntSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmPwrAddlLossAvlFrntSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Power Additional Loss Available Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmPwrAddlLossAvlFrntSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmPwrAddlLossEstimdFrntSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Power Additional Loss Estimated Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/B_EmPwrAddlLossEstimdFrntSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Enm_EmFrntCoolgReqDbi": { + "type": "EmCoolgReq", + "unit": "-,$EmCoolgReq", + "description": "Request for increased cooling power to both electric machine and inverter debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Enm_EmFrntCoolgReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmIvtrPwrLossEstimdFrntDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Inverter Power Loss Estimated Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Pw_EmIvtrPwrLossEstimdFrntDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmMotPwrLossEstimdFrntDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Motor Power Loss Estimated Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Pw_EmMotPwrLossEstimdFrntDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmPwrAddlLossAvlFrntDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Power Additional Loss Available Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Pw_EmPwrAddlLossAvlFrntDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmPwrAddlLossEstimdFrntDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Power Additional Loss Estimated Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Pw_EmPwrAddlLossEstimdFrntDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EmIvtrFrntCooltTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "EM Inverter Coolant Temperature Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Te_EmIvtrFrntCooltTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EmIvtrFrntTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "EM Inverter Temperature Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Te_EmIvtrFrntTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EmMotFrntTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "EM Motor Temperature Front", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/1_From_ihfa/Te_EmMotFrntTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmIvtrPwrLossEstimdReSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Inverter Power Loss Estimated Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmIvtrPwrLossEstimdReSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmIvtrReCooltTSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Inverter Coolant Temperature Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmIvtrReCooltTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmIvtrReTSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Inverter Temperature Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmIvtrReTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmMotPwrLossEstimdReSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Motor Power Loss Estimated Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmMotPwrLossEstimdReSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmMotReTSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Motor Temperature Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmMotReTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmPwrAddlLossAvlReSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Power Additional Loss Available Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmPwrAddlLossAvlReSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmPwrAddlLossEstimdReSwi": { + "type": "Bool", + "unit": "-", + "description": "EM Power Additional Loss Estimated Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmPwrAddlLossEstimdReSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EmReCoolgReqSwi": { + "type": "Bool", + "unit": "-", + "description": "Wheel Motor System Rear Cooling Request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/B_EmReCoolgReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Enm_EmReCoolgReqDbi": { + "type": "EmCoolgReq", + "unit": "-,$EmCoolgReq", + "description": "Request for increased cooling power to both electric machine and inverter debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Enm_EmReCoolgReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmIvtrPwrLossEstimdReDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Inverter Power Loss Estimated Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Pw_EmIvtrPwrLossEstimdReDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmMotPwrLossEstimdReDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Motor Power Loss Estimated Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Pw_EmMotPwrLossEstimdReDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmPwrAddlLossAvlReDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Power Additional Loss Available Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Pw_EmPwrAddlLossAvlReDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_EmPwrAddlLossEstimdReDbi": { + "type": "Float32", + "unit": "W", + "description": "EM Power Additional Loss Estimated Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Pw_EmPwrAddlLossEstimdReDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EmIvtrReCooltTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "EM Inverter Coolant Temperature Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Te_EmIvtrReCooltTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EmIvtrReTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "EM Inverter Temperature Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Te_EmIvtrReTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EmMotReTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "EM Motor Temperature Rear", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/2_From_ihra/Te_EmMotReTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_AmbTRawSwi": { + "type": "Bool", + "unit": "-", + "description": "Ambient Temperature Raw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_AmbTRawSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CircCnctVlvElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Circuit Connect Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CircCnctVlvElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CltPmpInCircClimaStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Pump In Circuit Climatisation Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CltPmpInCircClimaStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CmprRunStsCmprIPhaSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CmprRunStsCmprIPhaSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CmprRunStsCmprISwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CmprRunStsCmprISwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CmprRunStsCmprSpdSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CmprRunStsCmprSpdSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CmprRunStsCmprTSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CmprRunStsCmprTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CmprRunStsCmprUSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CmprRunStsCmprUSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltLvlElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Level Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltLvlElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltPmpInDtElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Pump In Drivetrain Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltPmpInDtElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltPmpInHvBattCircStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Pump In High Voltage Battery Circuit Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltPmpInHvBattCircStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltPmpSpdInCircClimaActSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Pump Speed In Circuit Climatisation Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltPmpSpdInCircClimaActSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltPmpSpdInCircDtElecActSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Pump Speed In Circuit Drivetrain Electric Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltPmpSpdInCircDtElecActSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltPmpSpdInHvBattCircActSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Pump Speed In High Voltage Battery Circuit Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltPmpSpdInHvBattCircActSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTAftHvacElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature After Hvac Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTAftHvacElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTAftHvacSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature After Hvac", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTAftHvacSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTAftRadrDtElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature After Radiator Drivetrain Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTAftRadrDtElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTAftRadrDtElecSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature After Radiator Drivetrain Electric", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTAftRadrDtElecSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTAtHvBattOutlElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature At High Voltage Battery Outlet Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTAtHvBattOutlElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTAtHvBattOutlSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature At High Voltage Battery Outlet", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTAtHvBattOutlSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTBfrRadrBypVlvElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature Before Radiator Bypass Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTBfrRadrBypVlvElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_CooltTBfrRadrBypVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "Coolant Temperature Before Radiator Bypass Valve", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_CooltTBfrRadrBypVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlErrStsForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlErrStsForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlIninStsForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlIninStsForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlMotStallStsForChillrVlvDbi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlMotStallStsForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlMotStallStsForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlMotStallStsForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlPsnActForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlPsnActForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlRunsStsForChillrVlvDbi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlRunsStsForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlRunsStsForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlRunsStsForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlTWarnStsForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlTWarnStsForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_ElecExpVlvCtrlUerrStsForChillrVlvSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_ElecExpVlvCtrlUerrStsForChillrVlvSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_FanElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Fan Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_FanElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_FanModStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Fan Mode Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_FanModStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_FanRlyElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Fan Relay Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_FanRlyElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_FanSpdActSwi": { + "type": "Bool", + "unit": "-", + "description": "Fan Speed Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_FanSpdActSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattOnOffVlvElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "High Voltage Battery On Off Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_HvBattOnOffVlvElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattOnOffVlvStsSwi": { + "type": "Bool", + "unit": "-", + "description": "HvBattOnOffVlvSts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_HvBattOnOffVlvStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvCooltWtrHeatrWtrTInOutl2Swi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_HvCooltWtrHeatrWtrTInOutl2Swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvHeatrPwrCns2Swi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_HvHeatrPwrCns2Swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_PMedChillrOutSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_PMedChillrOutSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_PMedCmprOutSwi": { + "type": "Bool", + "unit": "-", + "description": "PMedCmprOutSwi", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_PMedCmprOutSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_PropVlvToHvBattActSwi": { + "type": "Bool", + "unit": "-", + "description": "Proportional Valve To High Voltage Battery Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_PropVlvToHvBattActSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_PropVlvToHvBattFltStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Proportional Valve To High Voltage Battery Fault Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_PropVlvToHvBattFltStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_PropVlvToHvBattStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Proportional Valve To High Voltage Battery Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_PropVlvToHvBattStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_RadrBypVlvElecStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Radiator Bypass Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_RadrBypVlvElecStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_SplrShttrAgActSwi": { + "type": "Bool", + "unit": "-", + "description": "Spoiler Shutter Angle Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_SplrShttrAgActSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_SplrShttrFltStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Spoiler Shutter Fault Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_SplrShttrFltStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_SplrShttrStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Spoiler Shutter Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_SplrShttrStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_StsOfCooltLvlSwi": { + "type": "Bool", + "unit": "-", + "description": "Status Of Coolant Level", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_StsOfCooltLvlSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_TMedChillrOutSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_TMedChillrOutSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_TMedCmprOutSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/B_TMedCmprOutSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CircCnctVlvElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Circuit Connect Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CircCnctVlvElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CltPmpInCircClimaStsqDbi": { + "type": "UInt8", + "unit": "-", + "description": "Pump In Circuit Climatisation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CltPmpInCircClimaStsqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CooltLvlElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Level Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CooltLvlElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CooltPmpInDtElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Pump In Drivetrain Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CooltPmpInDtElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CooltTAftHvacElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Temperature After Hvac Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CooltTAftHvacElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CooltTAftRadrDtElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Temperature After Radiator Drivetrain Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CooltTAftRadrDtElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CooltTAtHvBattOutlElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Temperature At High Voltage Battery Outlet Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CooltTAtHvBattOutlElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_CooltTBfrRadrBypVlvElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Temperature Before Radiator Bypass Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_CooltTBfrRadrBypVlvElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_ElecExpVlvCtrlErrStsForChillrVlvDbi": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_ElecExpVlvCtrlErrStsForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_ElecExpVlvCtrlIninStsForChillrVlvDbi": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_ElecExpVlvCtrlIninStsForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_ElecExpVlvCtrlTWarnStsForChillrVlvDbi": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_ElecExpVlvCtrlTWarnStsForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_ElecExpVlvCtrlUerrStsForChillrVlvDbi": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_ElecExpVlvCtrlUerrStsForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_FanCpbyStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Fan Capability Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_FanCpbyStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_FanCpbyStsSwi": { + "type": "Bool", + "unit": "-", + "description": "Fan Capability Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_FanCpbyStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_FanElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Fan Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_FanElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_FanModStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Fan Mode Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_FanModStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_FanRlyElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Fan Relay Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_FanRlyElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_HvBattOnOffVlvElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "High Voltage Battery On Off Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_HvBattOnOffVlvElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_HvBattOnOffVlvStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "HvBattOnOffVlvSts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_HvBattOnOffVlvStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_PropVlvToHvBattFltStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Proportional Valve To High Voltage Battery Fault Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_PropVlvToHvBattFltStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_PropVlvToHvBattStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Proportional Valve To High Voltage Battery Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_PropVlvToHvBattStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_RadrBypVlvElecStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Radiator Bypass Valve Electric Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_RadrBypVlvElecStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_SplrShttrFltStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Spoiler Shutter Fault Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_SplrShttrFltStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_SplrShttrStsDbi": { + "type": "UInt8", + "unit": "-", + "description": "Spoiler Shutter Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_SplrShttrStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_StsOfCooltLvlDbi": { + "type": "UInt8", + "unit": "-", + "description": "Status Of Coolant Level", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/D_StsOfCooltLvlDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_I_CmprRunStsCmprIDbi": { + "type": "Float32", + "unit": "A", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/I_CmprRunStsCmprIDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_I_CmprRunStsCmprIPhaDbi": { + "type": "Float32", + "unit": "A", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/I_CmprRunStsCmprIPhaDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvHeatrPwrCns2Dbi": { + "type": "Float32", + "unit": "W", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Pw_HvHeatrPwrCns2Dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_AmbTRawDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient Temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_AmbTRawDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_CmprRunStsCmprTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_CmprRunStsCmprTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_CooltTAftHvacDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Coolant Temperature After Hvac", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_CooltTAftHvacDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_CooltTAftRadrDtElecDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Coolant Temperature After Radiator Drivetrain Electric", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_CooltTAftRadrDtElecDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_CooltTAtHvBattOutlDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Coolant Temperature At High Voltage Battery Outlet", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_CooltTAtHvBattOutlDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_CooltTBfrRadrBypVlvDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Coolant Temperature Before Radiator Bypass Valve", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_CooltTBfrRadrBypVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_HvCooltWtrHeatrWtrTInOutl2Dbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_HvCooltWtrHeatrWtrTInOutl2Dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_TMedChillrOutDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_TMedChillrOutDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_TMedCmprOutDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/Te_TMedCmprOutDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_U_CmprRunStsCmprUDbi": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/U_CmprRunStsCmprUDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_CooltPmpInHvBattCircStsDbi": { + "type": "Float32", + "unit": "%", + "description": "Coolant Pump In High Voltage Battery Circuit Status", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_CooltPmpInHvBattCircStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_CooltPmpSpdInCircClimaActDbi": { + "type": "UInt8", + "unit": "-", + "description": "Coolant Pump Speed In Circuit Climatisation Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_CooltPmpSpdInCircClimaActDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_CooltPmpSpdInCircDtElecActDbi": { + "type": "Float32", + "unit": "%", + "description": "Coolant Pump Speed In Circuit Drivetrain Electric Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_CooltPmpSpdInCircDtElecActDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_CooltPmpSpdInHvBattCircActDbi": { + "type": "Float32", + "unit": "%", + "description": "Coolant Pump Speed In High Voltage Battery Circuit Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_CooltPmpSpdInHvBattCircActDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_ElecExpVlvCtrlPsnActForChillrVlvDbi": { + "type": "UInt16", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_ElecExpVlvCtrlPsnActForChillrVlvDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_FanSpdActDbi": { + "type": "UInt8", + "unit": "%", + "description": "Fan Speed Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_FanSpdActDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_PropVlvToHvBattActDbi": { + "type": "Float32", + "unit": "%", + "description": "Proportional Valve To High Voltage Battery Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/X_PropVlvToHvBattActDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_an_SplrShttrAgActDbi": { + "type": "Float32", + "unit": "deg", + "description": "Spoiler Shutter Angle Actual", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/an_SplrShttrAgActDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_n_CmprRunStsCmprSpdDbi": { + "type": "Float32", + "unit": "rpm", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/n_CmprRunStsCmprSpdDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_p_PMedChillrOutDbi": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/p_PMedChillrOutDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_p_PMedCmprOutDbi": { + "type": "Float32", + "unit": "-", + "description": "PMedCmprOutDbi", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/3_From_fioc/p_PMedCmprOutDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattClimaEgyReqSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattClimaEgyReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattClimaPrioReqSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattClimaPrioReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattClimaPwrEstimnSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattClimaPwrEstimnSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattCoolgEgyAllwdSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattCoolgEgyAllwdSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattCoolgPwrAllwdSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattCoolgPwrAllwdSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattCoolgPwrEstimnSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattCoolgPwrEstimnSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattCoolgPwrPredSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattCoolgPwrPredSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattCoolgPwrReqSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattCoolgPwrReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattCooltTSnsrStsSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattCooltTSnsrStsSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattHeatgEgyAllwdSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattHeatgEgyAllwdSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattHeatgPwrAllwdSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattHeatgPwrAllwdSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattHeatgPwrReqSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattHeatgPwrReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattMinFlowReqSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattMinFlowReqSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HvBattTAvgSwi": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/B_HvBattTAvgSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_D_HvBattClimaPrioReqDbi": { + "type": "Float32", + "unit": "W", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/D_HvBattClimaPrioReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_E_HvBattClimaEgyReqDbi": { + "type": "Float32", + "unit": "J", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/E_HvBattClimaEgyReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_E_HvBattCoolgEgyAllwdDbi": { + "type": "Float32", + "unit": "J", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/E_HvBattCoolgEgyAllwdDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_E_HvBattHeatgEgyAllwdDbi": { + "type": "Float32", + "unit": "l/s", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/E_HvBattHeatgEgyAllwdDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Enm_HvBattCooltTSnsrStsDbi": { + "type": "HvBattSnsrSts", + "unit": "-,$HvBattSnsrSts", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Enm_HvBattCooltTSnsrStsDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattClimaPwrEstimnDbi": { + "type": "Float32", + "unit": "W", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattClimaPwrEstimnDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattCoolgPwrAllwdDbi": { + "type": "Float32", + "unit": "W", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattCoolgPwrAllwdDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattCoolgPwrEstimnDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattCoolgPwrEstimnDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattCoolgPwrPredDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattCoolgPwrPredDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattCoolgPwrReqDbi": { + "type": "Float32", + "unit": "J", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattCoolgPwrReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattHeatgPwrAllwdDbi": { + "type": "Float32", + "unit": "W", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattHeatgPwrAllwdDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Pw_HvBattHeatgPwrReqDbi": { + "type": "Float32", + "unit": "W", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Pw_HvBattHeatgPwrReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Q_HvBattMinFlowReqDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Q_HvBattMinFlowReqDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_HvBattTAvgDbi": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/4_From_hvbm/Te_HvBattTAvgDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HmiReqForRo1VentCenLeSwi": { + "type": "Bool", + "unit": "-", + "description": "Thumbwheel Vent Center Left Switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/B_HmiReqForRo1VentCenLeSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HmiReqForRo1VentCenRiSwi": { + "type": "Bool", + "unit": "-", + "description": "Thumbwheel Vent Center Right Switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/B_HmiReqForRo1VentCenRiSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HmiReqForRo1VentSideLeSwi": { + "type": "Bool", + "unit": "-", + "description": "Thumbwheel Vent Side Left Switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/B_HmiReqForRo1VentSideLeSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_HmiReqForRo1VentSideRiSwi": { + "type": "Bool", + "unit": "-", + "description": "Thumbwheel Vent Side Right Switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/B_HmiReqForRo1VentSideRiSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_MaxDefOnDbi": { + "type": "Bool", + "unit": "-", + "description": "MaxDefOnDbi", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/B_MaxDefOnDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_MaxDefOnSwi": { + "type": "Bool", + "unit": "-", + "description": "MaxDefOnSwi", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/B_MaxDefOnSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_HmiReqForRo1VentCenLeDbi": { + "type": "UInt8", + "unit": "-", + "description": "Thumbwheel Vent Center Left", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/X_HmiReqForRo1VentCenLeDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_HmiReqForRo1VentCenRiDbi": { + "type": "UInt8", + "unit": "%", + "description": "Thumbwheel Vent Center Right", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/X_HmiReqForRo1VentCenRiDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_HmiReqForRo1VentSideLeDbi": { + "type": "UInt8", + "unit": "%", + "description": "Thumbwheel Vent Side Left", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/X_HmiReqForRo1VentSideLeDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_X_HmiReqForRo1VentSideRiDbi": { + "type": "UInt8", + "unit": "%", + "description": "Thumbwheel Vent Side Right", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/5_From_DHU/X_HmiReqForRo1VentSideRiDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EvapTFrntQfDbi": { + "type": "Bool", + "unit": "-", + "description": "Evaporative Temperature Front Qualityfactor debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/B_EvapTFrntQfDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EvapTFrntQfSwi": { + "type": "Bool", + "unit": "-", + "description": "Evaporative Temperature Front Qualityfactor debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/B_EvapTFrntQfSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_EvapTFrntSwi": { + "type": "Bool", + "unit": "-", + "description": "Evaporative Temperature Front debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/B_EvapTFrntSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_MtrlSnsrTQfDbi": { + "type": "Bool", + "unit": "-", + "description": "Mathematical Sensor Temperature Qualityfactor debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/B_MtrlSnsrTQfDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_MtrlSnsrTQfSwi": { + "type": "Bool", + "unit": "-", + "description": "Mathematical Sensor Temperature Qualityfactor debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/B_MtrlSnsrTQfSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_B_MtrlSnsrTSwi": { + "type": "Bool", + "unit": "-", + "description": "Material Sensor Temperature debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/B_MtrlSnsrTSwi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_EvapTFrntDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Evaporative Temperature Front debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/Te_EvapTFrntDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestRx_Te_MtrlSnsrTDbi": { + "type": "Float32", + "unit": "deg C", + "description": "Mathematical Sensor Temperature debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestRx/VcTestRx/Subsystem/VcTestRx/VcTestRx/8_From_CCMB/Te_MtrlSnsrTDbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + } + } +} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/VcTestTx.yaml b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/VcTestTx.yaml new file mode 100644 index 0000000..4e911e5 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/VcTestTx.yaml @@ -0,0 +1,237 @@ +######################################################## +# +# Service for output values from VcTestTx model +# +# +######################################################## +service: + ClimateAndThermalControlInternal: + properties: + - ControlOutput: + - outsignal: yVcTestTx_B_MaxDefOnDisp + property: max_defroster_state.is_enabled + # - outsignal: sVcTestTx_D_MaxDefState + # property: max_defroster_state.availability + # - outsignal: sVcTestTx_Te_AmbTMecRimSnsr + # property: AmbTMecRimSnsr.Value + # - outsignal: sVcTestTx_D_AmbTMecRimSnsrSts + # property: AmbTMecRimSnsr.Status +# # service: +# # ThermalSystemPropertiesToBattery: +# # properties: +# - CoolantTemperatureAtHighVoltageBatteryOutlet: +# - outsignal: sVcTestTx_Te_CooltTAtHvBattOutl +# - HighVoltageBatteryCoolingPowerAllowed: +# - outsignal: sVcTestTx_Pw_HvBattCoolgPwrAllwd +# - HighVoltageBatteryHeatingPowerAllowed: +# - outsignal: sVcTestTx_Pw_HvBattHeatgPwrAllwd +# - HighVoltageBatteryClimatisationEnergyAllowed: +# - outsignal: sVcTestTx_E_HvBattClimaEgyAllwd +# - TimeLeftForHighVoltageBatteryPreConditioning: +# - outsignal: sVcTestTx_t_TiLeForHvBattPreCdng +# # Add enums later +# # - HighVoltageBatteryCircuitCoolingPerformance: +# # - outsignal: sVcTestTx_Enm_HvBattCircCoolgPfmnc +# - HighVoltageBatteryActualFlow: +# - outsignal: sVcTestTx_Q_HvBattActFlow +# # Add enums later +# # - HighVoltageBatteryThermalStateActual: +# # - outsignal: sVcTestTx_Enm_HvBattThermStAct +# # service: +# # ThermalSystemPropertiesToElectricMachines: +# # properties: +# - CoolantTemperatureAfterRadiatorDrivetrainElectric: +# - outsignal: sVcTestTx_Te_CooltTAftRadrDtElec +# - CoolantFlowEstimatedInEMCircuitFront: +# - outsignal: sVcTestTx_Q_CooltFlowEstimdInEmCircFrnt +# - CoolantFlowEstimatedInEMCircuitRear: +# - outsignal: sVcTestTx_Q_CooltFlowEstimdInEmCircRe +# # Add enums later +# # - EMCircuitCoolingPerformance: +# # - outsignal: sVcTestTx_Enm_EmCircCoolgPfmnc +# - EMPowerAdditionalLossRequestFront: +# - outsignal: sVcTestTx_Pw_EmPwrAddlLossReqFrnt +# - EMPowerAdditionalLossRequestRear: +# - outsignal: sVcTestTx_Pw_EmPwrAddlLossReqRe +# # service: +# # ThermalSystemPropertiesToElectricEnergyCoordinator: +# # properties: +# - ThermalHighVoltagePowerConsumptionRequest: +# - outsignal: sVcTestTx_Pw_ThermHvPwrCnsReq +# # - LowVoltagePowerRequest: +# # - outsignal: sVcTestTx_Pw_LvElecPwrReq +# - ThermalHighVoltagePowerConsumptionEstimation: +# - outsignal: sVcTestTx_Pw_ThermHvPwrCnsEstimn +# - ThermalHighVoltageEnergyRequest: +# - outsignal: sVcTestTx_E_ThermHvEgyReq +# # - CurrentThroughLowVoltageLoads: +# # - outsignal: sVcTestTx_I_LvLoadEstimn +# service: +# ThermalSystemPropertiesToVechileEnergyManagement: +# properties: +# - PredictedHVElectricalPowerForCooling: +# - outsignal: sVcTestTx_Pw_PredHvElecPwrForCoolg +# - PredictedHVElectricalPowerForHeating: +# - outsignal: sVcTestTx_Pw_PredHvElecPwrForHeatg +# - PredictedLVElectricalPowerforThermalManagement: +# - outsignal: sVcTestTx_Pw_PredHvElecPwrForThermMngt +######################################################## +# +# Direct connection for output values of app from VcTestTx model +# To different DPs +# +# Please correct the list below with correct domains and properties +# Group signals that match together? +# +######################################################## +signals: + ##### FIOC 4/6.0.0 ####### + fioc: + - outsignal: yVcTestTx_B_CircCnctVlvReq + property: CircCnctVlvReq + - outsignal: yVcTestTx_B_HvBattOnOffVlvReq + property: HvBattOnOffVlvReq + - outsignal: sVcTestTx_Q_CooltFlowInCmptmtCirc2 + property: CooltFlowInCmptmtCirc2 + - outsignal: sVcTestTx_X_CooltPmpSpdInCircClimaReq + property: CooltPmpSpdInCircClimaReq + - outsignal: sVcTestTx_X_CooltPmpSpdInCircDtElecReq + property: CooltPmpSpdInCircDtElecReq + - outsignal: sVcTestTx_X_CooltPmpSpdInHvBattCircReq + property: CooltPmpSpdInHvBattCircReq +# DstTrvld +# EvaprVlvFrntReq +# EvaprVlvRearReq +# ExtdIntgReq + - outsignal: sVcTestTx_D_FanModReq + property: FanModReq + - outsignal: sVcTestTx_X_FanSpdReq + property: FanSpdReq +# FuHeatrTRqrd +# HvBattOnOffVlvReq + - outsignal: sVcTestTx_U_HvBattUDynMinLim2 + property: HvBattUDynMinLim2 + - outsignal: yVcTestTx_B_HvCooltHeatrEnad2 + property: HvCooltHeatrEnad2 + - outsignal: sVcTestTx_Pw_HvCooltHeatrPwrCnsAllwd2 + property: HvCooltHeatrPwrCnsAllwd2 + - outsignal: sVcTestTx_Te_HvCooltHeatrWtrTDes2 + property: HvCooltHeatrWtrTDes2 + - outsignal: sVcTestTx_X_PropVlvToHvBattReq + property: PropVlvToHvBattReq + - outsignal: yVcTestTx_B_RadrBypVlvReq + property: RadrBypVlvReq + - outsignal: yVcTestTx_B_RlyForCoolgActvnReq + property: RlyForCoolgActvnReq + - outsignal: sVcTestTx_an_SplrShttrAgReq + property: SplrShttrAgReq + - outsignal: yVcTestTx_B_SplrShttrEnaReq + property: SplrShttrEnaReq +#UsageMode + - outsignal: sVcTestTx_D_UsgModSts + property: UsgModStsForTherm + ccmb: + - outsignal: sVcTestTx_X_AirFlapPosnReqForDefrst1 + property: AirFlapPosnReqForDefrst1 + - outsignal: sVcTestTx_X_AirFlapPosnReqForSideForFirstLe + property: AirFlapPosnReqForSideForFirstLe + - outsignal: sVcTestTx_X_AirFlapPosnReqForVentSideForFirstRi + property: AirFlapPosnReqForVentSideForFirstRi + - outsignal: sVcTestTx_X_AirFlapPosnReqForCentrForFirstLe + property: AirFlapPosnReqForCentrForFirstLe + - outsignal: sVcTestTx_X_AirFlapPosnReqForVentCentrForFirstRi + property: AirFlapPosnReqForVentCentrForFirstRi + - outsignal: sVcTestTx_X_AirFlapPosnReqForFlrForFirstRiLe + property: AirFlapPosnReqForFlrForFirstRiLe + - outsignal: sVcTestTx_X_AirFlapPosnReqForFlrForSecRiLe + property: AirFlapPosnReqForFlrForSecRiLe + - outsignal: sVcTestTx_X_AirFlapPosnTReqForFirsLe + property: AirFlapPosnTReqForFirsLe + - outsignal: sVcTestTx_X_AirFlapPosnTReqForFirstRi + property: AirFlapPosnTReqForFirstRi + - outsignal: sVcTestTx_X_AirFlapPosnTReqForSecLe + property: AirFlapPosnTReqForSecLe + - outsignal: sVcTestTx_X_AirFlapPosnTReqForSecRi + property: AirFlapPosnTReqForSecRi + - outsignal: sVcTestTx_X_AirFlapPosnReqForRecirc1 + property: AirFlapPosnReqForRecirc1 + - outsignal: sVcTestTx_X_AirFlapPosnReqForOsa + property: AirFlapPosnReqForOsa + - outsignal: sVcTestTx_X_AirFlapPosnReqForVentForSecRiLe + property: AirFlapPosnReqForVentForSecRiLe + - outsignal: sVcTestTx_D_AirFlapSpdReqForAirDistbn + property: AirFlapSpdReqForAirDistbn + - outsignal: sVcTestTx_D_AirFlapSpdReqForRecirc + property: AirFlapSpdReqForRecirc + - outsignal: sVcTestTx_D_AirFlapSpdReqForTFrnt + property: AirFlapSpdReqForTFrnt + - outsignal: sVcTestTx_D_HvacActrStReq + property: HvacActrStReq + hvacsys: + - outsignal: sVcTestTx_n_HvcFanRq + property: HvacFanSet1HvacFanSpd1 + - outsignal: sVcTestTx_n_HvcFanRamp + property: HvacFanSet1HvacFanRamp1 +signal_groups: + ##### FIOC 6.0.0 ####### + fioc: + - CmprAirCdnCtrl: + - outsignal: sVcTestTx_Pw_CmprPwrLim + property: CmprAirCdnCtrlCmprPwrLim + - outsignal: yVcTestTx_B_CmprRunReq + property: CmprAirCdnCtrlCmprRunReq + - outsignal: sVcTestTx_n_CmprSpdReq + property: CmprAirCdnCtrlCmprSpdReq + - ElecExpVlvCtrl2: + - outsignal: yVcTestTx_B_EmgyModEnaForChillrVlv + property: ElecExpVlvCtrl2EmgyModEnaForChillrVlv + - outsignal: sVcTestTx_n_ChillerVlvEmgyPosReq + property: ElecExpVlvCtrl2EmgyPosnRqrdForChillrVlv + - outsignal: sVcTestTx_D_EmgyStrtDlyForChillrVlv + property: ElecExpVlvCtrl2EmgyStrtDlyForChillrVlv + - outsignal: sVcTestTx_D_IninReqForChillrVlv + property: ElecExpVlvCtrl2IninReqForChillrVlv + - outsignal: sVcTestTx_D_MotStallDetnEnaForChillrVlv + property: ElecExpVlvCtrl2MotStallDetnEnaForChillrVlv + - outsignal: yVcTestTx_B_MoveEnaForChillrVlv + property: ElecExpVlvCtrl2MoveEnaForChillrVlv + - outsignal: sVcTestTx_X_PosnReqForChillerVlv + property: ElecExpVlvCtrl2PsnRqrdForChillrVlv + # - FuelHeaterCtrl: + # - outsignal: sVcTestTx_X_ + # property: FuelHeaterCtrlFuHeatrAmbAirP + # - outsignal: sVcTestTx_X_ + # property: FuelHeaterCtrlFuHeatrDiagRqrd + # - outsignal: sVcTestTx_X_ + # property: FuelHeaterCtrlFuHeatrErrResdVal + # - outsignal: sVcTestTx_X_ + # property: FuelHeaterCtrlFuHeatrErrStsReqd + # - outsignal: sVcTestTx_X_ + # property: FuelHeaterCtrlFuHeatrFuTyp + # - outsignal: sVcTestTx_X_ + # property: FuelHeaterCtrlFuHeatrMod + # - OutdT: + # - outsignal: sVcTestTx_X_ + # property: OutdTAmbTVal + # - outsignal: sVcTestTx_X_ + # property: OutdTQly + # - VehBattU: + # - outsignal: sVcTestTx_X_ + # property: VehBattUSysU + # - outsignal: sVcTestTx_X_ + # property: VehBattUSysUQf + # - VehSpdSafe: + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeChks + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeCntr + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeMax + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeMin + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeMinMaxQf + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeNom + # - outsignal: sVcTestTx_X_ + # property: VehSpdSafeNomQf diff --git a/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/config_VcTestTx.json b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/config_VcTestTx.json new file mode 100644 index 0000000..6a1cb31 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Models/IF/VcTestTx/pybuild_cfg/config_VcTestTx.json @@ -0,0 +1,3308 @@ +{ + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": { + "sVcTestTx_X_AirFlapPosnReqForDefrst1": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out1", + "name": "sVcTestTx_X_AirFlapPosnReqForDefrst1", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForSideForFirstLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out2", + "name": "sVcTestTx_X_AirFlapPosnReqForSideForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForVentSideForFirstRi": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out3", + "name": "sVcTestTx_X_AirFlapPosnReqForVentSideForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForCentrForFirstLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out4", + "name": "sVcTestTx_X_AirFlapPosnReqForCentrForFirstLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForVentCentrForFirstRi": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out5", + "name": "sVcTestTx_X_AirFlapPosnReqForVentCentrForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForFlrForFirstRiLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out6", + "name": "sVcTestTx_X_AirFlapPosnReqForFlrForFirstRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForFlrForSecRiLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out7", + "name": "sVcTestTx_X_AirFlapPosnReqForFlrForSecRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnTReqForFirsLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out8", + "name": "sVcTestTx_X_AirFlapPosnTReqForFirsLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnTReqForFirstRi": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out9", + "name": "sVcTestTx_X_AirFlapPosnTReqForFirstRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnTReqForSecLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out10", + "name": "sVcTestTx_X_AirFlapPosnTReqForSecLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnTReqForSecRi": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out11", + "name": "sVcTestTx_X_AirFlapPosnTReqForSecRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForRecirc1": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out12", + "name": "sVcTestTx_X_AirFlapPosnReqForRecirc1", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForOsa": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out13", + "name": "sVcTestTx_X_AirFlapPosnReqForOsa", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_AirFlapPosnReqForVentForSecRiLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out15", + "name": "sVcTestTx_X_AirFlapPosnReqForVentForSecRiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_n_HvcFanRq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out14", + "name": "sVcTestTx_n_HvcFanRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC Fan speed request", + "type": "UInt8", + "unit": "rpm", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Te_AmbTMecRimSnsr": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out16", + "name": "sVcTestTx_Te_AmbTMecRimSnsr", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient temperatute raw from FIOC to DHU", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_AmbTMecRimSnsrSts": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out17", + "name": "sVcTestTx_D_AmbTMecRimSnsrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient temperatute status from FIOC to DHU", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_MaxDefOnDisp": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out18", + "name": "yVcTestTx_B_MaxDefOnDisp", + "configs": "((ALWAYS_ACTIVE))", + "description": "yVcTestTx_B_MaxDefOnDisp", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_MaxDefState": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out19", + "name": "sVcTestTx_D_MaxDefState", + "configs": "((ALWAYS_ACTIVE))", + "description": "MaxDefState", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_CircCnctVlvReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out20", + "name": "yVcTestTx_B_CircCnctVlvReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Circuit Connect Valve Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_CooltPmpSpdInCircClimaReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out21", + "name": "sVcTestTx_X_CooltPmpSpdInCircClimaReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_CooltPmpSpdInCircDtElecReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out22", + "name": "sVcTestTx_X_CooltPmpSpdInCircDtElecReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_CooltPmpSpdInHvBattCircReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out23", + "name": "sVcTestTx_X_CooltPmpSpdInHvBattCircReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_FanModReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out24", + "name": "sVcTestTx_D_FanModReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Mode Request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_FanSpdReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out25", + "name": "sVcTestTx_X_FanSpdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan speed request", + "type": "UInt8", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_PropVlvToHvBattReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out26", + "name": "sVcTestTx_X_PropVlvToHvBattReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Request", + "type": "UInt8", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_RadrBypVlvReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out27", + "name": "yVcTestTx_B_RadrBypVlvReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Radiator Bypass Valve Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_RlyForCoolgActvnReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out28", + "name": "yVcTestTx_B_RlyForCoolgActvnReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_an_SplrShttrAgReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out29", + "name": "sVcTestTx_an_SplrShttrAgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Shutter position request", + "type": "UInt8", + "unit": "deg", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 90, + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_SplrShttrEnaReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out30", + "name": "yVcTestTx_B_SplrShttrEnaReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Enable Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Te_CooltTAtHvBattOutl": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out31", + "name": "sVcTestTx_Te_CooltTAtHvBattOutl", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_HvBattCoolgPwrAllwd": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out32", + "name": "sVcTestTx_Pw_HvBattCoolgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_HvBattHeatgPwrAllwd": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out33", + "name": "sVcTestTx_Pw_HvBattHeatgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_E_HvBattClimaEgyAllwd": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out34", + "name": "sVcTestTx_E_HvBattClimaEgyAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "Wh", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_t_TiLeForHvBattPreCdng": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out35", + "name": "sVcTestTx_t_TiLeForHvBattPreCdng", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Enm_HvBattCircCoolgPfmnc": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out36", + "name": "sVcTestTx_Enm_HvBattCircCoolgPfmnc", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "CoolgPfmnc", + "unit": "-,$CoolgPfmnc", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Q_HvBattActFlow": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out37", + "name": "sVcTestTx_Q_HvBattActFlow", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Enm_HvBattThermStAct": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out38", + "name": "sVcTestTx_Enm_HvBattThermStAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "HV Battery coolant circuit actual thermal state:Unknown,HvBattOff,HvBattBal,HvBattPasCoolg,HvBattPasActvCoolg,HvBattActvCoolg,HvBattPasHeatg,HvBattPasActvHeatgFromClima,HvBattPasActvHeatgFromDtElecAndClima,HvBattActvHeatgFromClima,Degas,FailSafe", + "type": "HvBattThermSt", + "unit": "-,$HvBattThermSt", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_PredHvElecPwrForCoolg": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out39", + "name": "sVcTestTx_Pw_PredHvElecPwrForCoolg", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_PredHvElecPwrForHeatg": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out40", + "name": "sVcTestTx_Pw_PredHvElecPwrForHeatg", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_PredHvElecPwrForThermMngt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out41", + "name": "sVcTestTx_Pw_PredHvElecPwrForThermMngt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Q_CooltFlowEstimdInEmCircRe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out42", + "name": "sVcTestTx_Q_CooltFlowEstimdInEmCircRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "l/min", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Te_CooltTAftRadrDtElec": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out43", + "name": "sVcTestTx_Te_CooltTAftRadrDtElec", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Q_CooltFlowEstimdInEmCircFrnt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out44", + "name": "sVcTestTx_Q_CooltFlowEstimdInEmCircFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "l/min", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Enm_EmCircCoolgPfmnc": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out45", + "name": "sVcTestTx_Enm_EmCircCoolgPfmnc", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Circuit Cooling Performance", + "type": "CoolgPfmnc", + "unit": "-,$CoolgPfmnc", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_EmPwrAddlLossReqRe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out46", + "name": "sVcTestTx_Pw_EmPwrAddlLossReqRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_EmPwrAddlLossReqFrnt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out47", + "name": "sVcTestTx_Pw_EmPwrAddlLossReqFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_ThermHvPwrCnsReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out48", + "name": "sVcTestTx_Pw_ThermHvPwrCnsReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_ThermHvPwrCnsEstimn": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out50", + "name": "sVcTestTx_Pw_ThermHvPwrCnsEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_E_ThermHvEgyReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out51", + "name": "sVcTestTx_E_ThermHvEgyReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "Wh", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_n_CmprSpdReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out49", + "name": "sVcTestTx_n_CmprSpdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_CmprRunReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out52", + "name": "yVcTestTx_B_CmprRunReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_CmprPwrLim": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out53", + "name": "sVcTestTx_Pw_CmprPwrLim", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Pw_HvCooltHeatrPwrCnsAllwd2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out54", + "name": "sVcTestTx_Pw_HvCooltHeatrPwrCnsAllwd2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Te_HvCooltHeatrWtrTDes2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out55", + "name": "sVcTestTx_Te_HvCooltHeatrWtrTDes2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_HvCooltHeatrEnad2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out56", + "name": "yVcTestTx_B_HvCooltHeatrEnad2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_UsgModSts": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out57", + "name": "sVcTestTx_D_UsgModSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "UsageMode to FIOC", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_X_PosnReqForChillerVlv": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out58", + "name": "sVcTestTx_X_PosnReqForChillerVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Requested EXV position", + "type": "UInt16", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_MoveEnaForChillrVlv": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out59", + "name": "yVcTestTx_B_MoveEnaForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Enable the movement for the EXV. 0=Ignore commanded position. 1=Move to commanded position ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_MotStallDetnEnaForChillrVlv": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out60", + "name": "sVcTestTx_D_MotStallDetnEnaForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Enable the stall detect function for chiller expansion valve", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_IninReqForChillrVlv": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out61", + "name": "sVcTestTx_D_IninReqForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Initialization request. 0=No request, 1=Start initialization. 2=Waiting for Initialization.", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_EmgyStrtDlyForChillrVlv": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out62", + "name": "sVcTestTx_D_EmgyStrtDlyForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Start delay for emergency mode", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_EmgyModEnaForChillrVlv": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out63", + "name": "yVcTestTx_B_EmgyModEnaForChillrVlv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Enable the emergency limp home function. 0=Off, 1=On", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_U_HvBattUDynMinLim2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out64", + "name": "sVcTestTx_U_HvBattUDynMinLim2", + "configs": "((ALWAYS_ACTIVE))", + "description": "Start delay for emergency mode", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_Q_CooltFlowInCmptmtCirc2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out65", + "name": "sVcTestTx_Q_CooltFlowInCmptmtCirc2", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant flow compartment circuit", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_n_ChillerVlvEmgyPosReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out66", + "name": "sVcTestTx_n_ChillerVlvEmgyPosReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Enable the emergency limp home function. 0=Off, 1=On", + "type": "UInt16", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_n_HvcFanRamp": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out67", + "name": "sVcTestTx_n_HvcFanRamp", + "configs": "((ALWAYS_ACTIVE))", + "description": "Enable the emergency limp home function. 0=Off, 1=On", + "type": "UInt16", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_AirFlapSpdReqForAirDistbn": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out68", + "name": "sVcTestTx_D_AirFlapSpdReqForAirDistbn", + "configs": "((ALWAYS_ACTIVE))", + "description": "Requested first row mode distribution actuator speed", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_AirFlapSpdReqForRecirc": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out69", + "name": "sVcTestTx_D_AirFlapSpdReqForRecirc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Requested REC actuator speed", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_AirFlapSpdReqForTFrnt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out70", + "name": "sVcTestTx_D_AirFlapSpdReqForTFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Requested temperature actuator speed", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcTestTx_B_HvBattOnOffVlvReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out71", + "name": "yVcTestTx_B_HvBattOnOffVlvReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hv battery coolant shut off valve request, 1 = no flow to battery", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcTestTx_D_HvacActrStReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Out72", + "name": "sVcTestTx_D_HvacActrStReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Climate control controls state of actuators with this signal. ", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcCcHvcTx_X_ActRqRo1Def": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In1", + "name": "sVcCcHvcTx_X_ActRqRo1Def", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo1VntSiLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In2", + "name": "sVcCcHvcTx_X_ActRqRo1VntSiLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo1VntSiRi": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In3", + "name": "sVcCcHvcTx_X_ActRqRo1VntSiRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo1VntCLe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In4", + "name": "sVcCcHvcTx_X_ActRqRo1VntCLe", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo1VntCRi": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In5", + "name": "sVcCcHvcTx_X_ActRqRo1VntCRi", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo1Flr": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In6", + "name": "sVcCcHvcTx_X_ActRqRo1Flr", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo2Flr": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In7", + "name": "sVcCcHvcTx_X_ActRqRo2Flr", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqTRo1Le": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In8", + "name": "sVcCcHvcTx_X_ActRqTRo1Le", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqTRo1Ri": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In9", + "name": "sVcCcHvcTx_X_ActRqTRo1Ri", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqTRo2Le": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In10", + "name": "sVcCcHvcTx_X_ActRqTRo2Le", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqTRo2Ri": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In11", + "name": "sVcCcHvcTx_X_ActRqTRo2Ri", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRec": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In12", + "name": "sVcCcHvcTx_X_ActRqRec", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqOsa": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In13", + "name": "sVcCcHvcTx_X_ActRqOsa", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_n_HvcFanRq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In14", + "name": "sVcCcHvcTx_n_HvcFanRq", + "configs": "(NEVER_ACTIVE)", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 4200, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcHvcTx_X_ActRqRo2Vnt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In16", + "name": "sVcCcHvcTx_X_ActRqRo2Vnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "HVAC actuator request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Te_AmbTMecRimSnsr": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In15", + "name": "sVcTcTx_Te_AmbTMecRimSnsr", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient temperature sensor from FIOC to DHU", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_D_AmbTMecRimSnsrSts": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In17", + "name": "sVcTcTx_D_AmbTMecRimSnsrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ambient temperature sensor status from FIOC to DHU", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcHmiTx_D_MaxDefState": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In18", + "name": "sVcAcHmiTx_D_MaxDefState", + "configs": "((ALWAYS_ACTIVE))", + "description": "Test signal to check in unittests", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcAcHmiTx_B_MaxDefOnDisp": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In19", + "name": "yVcAcHmiTx_B_MaxDefOnDisp", + "configs": "((ALWAYS_ACTIVE))", + "description": "Test signal to check in unittests", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcTx_B_CircCnctVlvReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In20", + "name": "yVcTcTx_B_CircCnctVlvReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Circuit Connect Valve Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_X_CooltPmpSpdInCircClimaReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In21", + "name": "sVcTcTx_X_CooltPmpSpdInCircClimaReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_X_CooltPmpSpdInCircDtElecReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In22", + "name": "sVcTcTx_X_CooltPmpSpdInCircDtElecReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_X_CooltPmpSpdInHvBattCircReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In23", + "name": "sVcTcTx_X_CooltPmpSpdInHvBattCircReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_D_FanModReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In24", + "name": "sVcTcTx_D_FanModReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan Mode Request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_X_FanSpdReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In25", + "name": "sVcTcTx_X_FanSpdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fan speed request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_X_PropVlvToHvBattReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In26", + "name": "sVcTcTx_X_PropVlvToHvBattReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Proportional Valve To High Voltage Battery Request", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcTx_B_RadrBypVlvReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In27", + "name": "yVcTcTx_B_RadrBypVlvReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Radiator Bypass Valve Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcTx_B_RlyForCoolgActvnReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In28", + "name": "yVcTcTx_B_RlyForCoolgActvnReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_an_SplrShttrAgReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In29", + "name": "sVcTcTx_an_SplrShttrAgReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Shutter position request", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 90, + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcTx_B_SplrShttrEnaReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In30", + "name": "yVcTcTx_B_SplrShttrEnaReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Enable Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Te_CooltTAtHvBattOutl": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In53", + "name": "sVcTcTx_Te_CooltTAtHvBattOutl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Coolant Temperature At High Voltage Battery Outlet", + "type": "Float32", + "unit": "deg C-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_HvBattCoolgPwrAllwd": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In31", + "name": "sVcTcTx_Pw_HvBattCoolgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hv Batt Cooling Power Allowed", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_HvBattHeatgPwrAllwd": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In32", + "name": "sVcTcTx_Pw_HvBattHeatgPwrAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_E_HvBattClimaEgyAllwd": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In33", + "name": "sVcTcTx_E_HvBattClimaEgyAllwd", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_t_TiLeForHvBattPreCdng": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In34", + "name": "sVcTcTx_t_TiLeForHvBattPreCdng", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Enm_HvBattCircCoolgPfmnc": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In35", + "name": "sVcTcTx_Enm_HvBattCircCoolgPfmnc", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "CoolgPfmnc", + "unit": "-,$CoolgPfmnc", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Q_HvBattActFlow": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In36", + "name": "sVcTcTx_Q_HvBattActFlow", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Enm_HvBattThermStAct": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In37", + "name": "sVcTcTx_Enm_HvBattThermStAct", + "configs": "((ALWAYS_ACTIVE))", + "description": "HV Battery coolant circuit actual thermal state:'HvBattOff', 'HvBattActvHeatgFromClima', 'HvBattBal', 'HvBattActvCoolg', 'HvBattPasCoolg', 'HvBattPasActvCoolg', 'HvBattPasHeatg', 'HvBattPasActvHeatgFromClima', 'HvBattPasActvHeatgFromDtElecAndClima', 'Degas', 'FailSafe'", + "type": "HvBattThermSt", + "unit": "-,$HvBattThermSt", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_PredHvElecPwrForCoolg": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In38", + "name": "sVcTcTx_Pw_PredHvElecPwrForCoolg", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_PredHvElecPwrForHeatg": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In39", + "name": "sVcTcTx_Pw_PredHvElecPwrForHeatg", + "configs": "((ALWAYS_ACTIVE))", + "description": "Spoiler Shutter Enable Request", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_PredHvElecPwrForThermMngt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In40", + "name": "sVcTcTx_Pw_PredHvElecPwrForThermMngt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Q_CooltFlowEstimdInEmCircRe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In41", + "name": "sVcTcTx_Q_CooltFlowEstimdInEmCircRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Te_CooltTAftRadrDtElec": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In42", + "name": "sVcTcTx_Te_CooltTAftRadrDtElec", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Q_CooltFlowEstimdInEmCircFrnt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In43", + "name": "sVcTcTx_Q_CooltFlowEstimdInEmCircFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Enm_EmCircCoolgPfmnc": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In44", + "name": "sVcTcTx_Enm_EmCircCoolgPfmnc", + "configs": "((ALWAYS_ACTIVE))", + "description": "EM Circuit Cooling Performance", + "type": "CoolgPfmnc", + "unit": "-,$CoolgPfmnc", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_EmPwrAddlLossReqRe": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In45", + "name": "sVcTcTx_Pw_EmPwrAddlLossReqRe", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_EmPwrAddlLossReqFrnt": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In46", + "name": "sVcTcTx_Pw_EmPwrAddlLossReqFrnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_ThermHvPwrCnsReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In47", + "name": "sVcTcTx_Pw_ThermHvPwrCnsReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_Pw_ThermHvPwrCnsEstimn": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In49", + "name": "sVcTcTx_Pw_ThermHvPwrCnsEstimn", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "W", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcTx_E_ThermHvEgyReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In50", + "name": "sVcTcTx_E_ThermHvEgyReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "Wh", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_n_CmprSpdReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In51", + "name": "sVcAcTx_n_CmprSpdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcAcTx_B_CmprRunReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In52", + "name": "yVcAcTx_B_CmprRunReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Pw_CmprPwrLim": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In54", + "name": "sVcAcTx_Pw_CmprPwrLim", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Pw_HvCooltHeatrPwrCnsAllwd2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In55", + "name": "sVcAcTx_Pw_HvCooltHeatrPwrCnsAllwd2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Te_HvCooltHeatrWtrTDes2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In56", + "name": "sVcAcTx_Te_HvCooltHeatrWtrTDes2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcAcTx_B_HvCooltHeatrEnad2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In57", + "name": "yVcAcTx_B_HvCooltHeatrEnad2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTdSigHub_D_UsgModSts": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In48", + "name": "sVcTdSigHub_D_UsgModSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_U_HvBattUDynMinLim2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In58", + "name": "sVcAcTx_U_HvBattUDynMinLim2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Q_CooltFlowInCmptmtCirc2": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In59", + "name": "sVcAcTx_Q_CooltFlowInCmptmtCirc2", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcAcTx_B_ChillrVlvMoveEna": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In60", + "name": "yVcAcTx_B_ChillrVlvMoveEna", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Z_ChillerVlvMotStallDetnEna": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In61", + "name": "sVcAcTx_Z_ChillerVlvMotStallDetnEna", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcAcTx_B_ChillrVlvEmgyModEna": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In62", + "name": "yVcAcTx_B_ChillrVlvEmgyModEna", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Z_ChillrVlvIninReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In63", + "name": "sVcAcTx_Z_ChillrVlvIninReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_Z_ChillerVlvEmgyStartDly": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In64", + "name": "sVcAcTx_Z_ChillerVlvEmgyStartDly", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_n_ChillerVlvEmgyPosReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In65", + "name": "sVcAcTx_n_ChillerVlvEmgyPosReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Float32", + "unit": "", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAcTx_n_ChillerVlvPosReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In66", + "name": "sVcAcTx_n_ChillerVlvPosReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "", + "type": "Int16", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcTx_B_HvBattOnOffVlvReq": { + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/In67", + "name": "yVcTcTx_B_HvBattOnOffVlvReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hv battery coolant shut off valve request, 1 = no flow to battery", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": { + "rVcTestTx_Z_Version": { + "type": "Float32", + "unit": "-", + "description": "Version of the VcTestTx SPM", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/Gain1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + } + }, + "calib_consts": { + "cVcTestTx_B_HvcFanRampSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_To_HBMF/B_HvcFanRampSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvcFanRqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_To_HBMF/B_HvcFanRqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_n_HvcFanRqDb": { + "type": "Float32", + "unit": "rpm", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_To_HBMF/n_HvcFanRqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_nd_HvcFanRampDb": { + "type": "UInt16", + "unit": "rpm/s", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_To_HBMF/nd_HvcFanRampDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForCentrForFirstLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForCentrForFirstLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForDefrst1Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForDefrst1Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForFlrForFirstRiLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForFlrForFirstRiLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForFlrForSecRiLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForFlrForSecRiLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForOsaSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForOsaSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForRecirc1Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForRecirc1Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForSideForFirstLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForSideForFirstLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForVentCentrForFirstRiSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForVentCentrForFirstRiSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForVentForSecRiLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForVentForSecRiLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnReqForVentSideForFirstRiSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnReqForVentSideForFirstRiSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnTReqForFirsLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnTReqForFirsLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnTReqForFirstRiSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnTReqForFirstRiSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnTReqForSecLeSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnTReqForSecLeSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapPosnTReqForSecRiSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapPosnTReqForSecRiSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapSpdReqForAirDistbnSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapSpdReqForAirDistbnSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapSpdReqForRecircSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapSpdReqForRecircSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AirFlapSpdReqForTFrntSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_AirFlapSpdReqForTFrntSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvacActrStReqSw1": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/B_HvacActrStReqSw1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_AirFlapSpdReqForAirDistbnDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/D_AirFlapSpdReqForAirDistbnDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_AirFlapSpdReqForRecircDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/D_AirFlapSpdReqForRecircDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_AirFlapSpdReqForTFrntDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/D_AirFlapSpdReqForTFrntDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_HvacActrStReqDb1": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/D_HvacActrStReqDb1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForCentrForFirstLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForCentrForFirstLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForDefrst1Db": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForDefrst1Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForFlrForFirstRiLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForFlrForFirstRiLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForFlrForSecRiLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForFlrForSecRiLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForOsaDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForOsaDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForRecirc1Db": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForRecirc1Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForSideForFirstLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForSideForFirstLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForVentCentrForFirstRiDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForVentCentrForFirstRiDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForVentForSecRiLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForVentForSecRiLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnReqForVentSideForFirstRiDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnReqForVentSideForFirstRiDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnTReqForFirsLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnTReqForFirsLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnTReqForFirstRiDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnTReqForFirstRiDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnTReqForSecLeDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnTReqForSecLeDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_AirFlapPosnTReqForSecRiDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/HvcTx_to_CCMB/X_AirFlapPosnTReqForSecRiDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AmbTMecRimSnsrStsSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_DriverInfo/B_AmbTMecRimSnsrStsSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_AmbTMecRimSnsrSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_DriverInfo/B_AmbTMecRimSnsrSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_Te_AmbTMecRimSnsrDb": { + "type": "Float32", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_DriverInfo/Te_AmbTMecRimSnsrDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_Te_AmbTMecRimSnsrStsDb": { + "type": "UInt8", + "unit": "deg C", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_DriverInfo/Te_AmbTMecRimSnsrStsDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_ChillerVlvEmgyPosReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_ChillerVlvEmgyPosReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CircCnctVlvReqDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CircCnctVlvReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CircCnctVlvReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CircCnctVlvReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CmprPwrLimSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CmprPwrLimSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CmprRunReqDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CmprRunReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CmprRunReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CmprRunReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CmprSpdReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CmprSpdReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CooltFlowInCmptmtCirc2Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CooltFlowInCmptmtCirc2Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CooltPmpSpdInCircClimaReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CooltPmpSpdInCircClimaReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CooltPmpSpdInCircDtElecReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CooltPmpSpdInCircDtElecReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_CooltPmpSpdInHvBattCircReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_CooltPmpSpdInHvBattCircReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_EmgyModEnaForChillrVlvDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_EmgyModEnaForChillrVlvDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_EmgyModEnaForChillrVlvSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_EmgyModEnaForChillrVlvSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_EmgyStrtDlyForChillrVlvSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_EmgyStrtDlyForChillrVlvSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_FanModReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_FanModReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_FanSpdReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_FanSpdReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvBattOnOffVlvReqDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvBattOnOffVlvReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvBattOnOffVlvReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvBattOnOffVlvReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvBattUDynMinLim2Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvBattUDynMinLim2Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvCooltHeatrEnad2Db": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvCooltHeatrEnad2Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvCooltHeatrEnad2Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvCooltHeatrEnad2Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvCooltHeatrPwrCnsAllwd2Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvCooltHeatrPwrCnsAllwd2Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_HvCooltHeatrWtrTDes2Sw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_HvCooltHeatrWtrTDes2Sw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_IninReqForChillrVlvSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_IninReqForChillrVlvSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_MotStallDetnEnaForChillrVlvSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_MotStallDetnEnaForChillrVlvSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_MoveEnaForChillrVlvDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_MoveEnaForChillrVlvDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_MoveEnaForChillrVlvSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_MoveEnaForChillrVlvSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_PosnReqForChillerVlvSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_PosnReqForChillerVlvSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_PropVlvToHvBattReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_PropVlvToHvBattReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_RadrBypVlvReqDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_RadrBypVlvReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_RadrBypVlvReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_RadrBypVlvReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_RlyForCoolgActvnReqDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_RlyForCoolgActvnReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_RlyForCoolgActvnReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_RlyForCoolgActvnReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_SplrShttrAgReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_SplrShttrAgReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_SplrShttrEnaReqDb": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_SplrShttrEnaReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_SplrShttrEnaReqSw": { + "type": "Bool", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/B_SplrShttrEnaReqSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_EmgyStrtDlyForChillrVlvDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/D_EmgyStrtDlyForChillrVlvDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_FanModReqDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/D_FanModReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_IninReqForChillrVlvDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/D_IninReqForChillrVlvDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_MotStallDetnEnaForChillrVlvDb": { + "type": "UInt8", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/D_MotStallDetnEnaForChillrVlvDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_Pw_CmprPwrLimDb": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/Pw_CmprPwrLimDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_Pw_HvCooltHeatrPwrCnsAllwd2Db": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/Pw_HvCooltHeatrPwrCnsAllwd2Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_Q_CooltFlowInCmptmtCirc2Db": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/Q_CooltFlowInCmptmtCirc2Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_Te_HvCooltHeatrWtrTDes2Db": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/Te_HvCooltHeatrWtrTDes2Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_U_HvBattUDynMinLim2Db": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/U_HvBattUDynMinLim2Db", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_CooltPmpSpdInCircClimaReqDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/X_CooltPmpSpdInCircClimaReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_CooltPmpSpdInCircDtElecReqDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/X_CooltPmpSpdInCircDtElecReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_CooltPmpSpdInHvBattCircReqDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/X_CooltPmpSpdInHvBattCircReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_FanSpdReqDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/X_FanSpdReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_PosnReqForChillerVlvDb": { + "type": "Int16", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/X_PosnReqForChillerVlvDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_X_PropVlvToHvBattReqDb": { + "type": "Float32", + "unit": "%", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/X_PropVlvToHvBattReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_an_SplrShttrAgReqDb": { + "type": "Float32", + "unit": "deg", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/an_SplrShttrAgReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_n_ChillerVlvEmgyPosReqDb": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/n_ChillerVlvEmgyPosReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_n_CmprSpdReqDb": { + "type": "Float32", + "unit": "-", + "description": "", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_FIOC/n_CmprSpdReqDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_MaxDefOnDispDb": { + "type": "Bool", + "unit": "-", + "description": "MaxDefOnDispDb", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_HMI/B_MaxDefOnDispDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_MaxDefOnDispSw": { + "type": "Bool", + "unit": "-", + "description": "MaxDefOnDispSw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_HMI/B_MaxDefOnDispSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_B_MaxDefStateSw": { + "type": "Bool", + "unit": "-", + "description": "MaxDefStateSw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_HMI/B_MaxDefStateSw", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcTestTx_D_MaxDefStateDb": { + "type": "Int8", + "unit": "-", + "description": "MaxDefStateDb", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcTestTx/VcTestTx/Subsystem/VcTestTx/VcTestTx/TcTx_To_HMI/D_MaxDefStateDb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + } + } +} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup.csv new file mode 100644 index 0000000..fd2fb01 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup.csv @@ -0,0 +1,636 @@ +Swich name;Description;ClimCtr +Vc.Ac.Ctrl.B_Codegen;Only used for ME9 special AC module;0 +Vc.Ac.Ctrl.B_CodeGenMecAC;Generate code for mechanical AC;0 +Vc.Ac.Ctrl.B_CodeGenELAC;Generate code for Electrical AC;1 +Vc.Ac.Ctrl.B_CodeGenFixDisplacementAc;Fix displacement AC (handled by calibration for EDC17);0 +Vc.Ac.Ctrl.B_CodeGenTorqueEstOff;Disables AcCtrl torque estimation;1 +Vc.Ac.Ctrl.B_CodeGenTorqueEstOn;Enables AcCtrl torque estimation;1 +Vc.Ac.Ctrl.B_CodeGenVariableDisplacementAc;Variable displacement AC (handled by calibration for EDC17);1 +Vc.Ac.Ctrl.B_CodeGenEnaOldRearVacSig;Use old CAN signalling for enable Rear VAC;1 +Vc.Ac.Fan.B_Codegen;Only used for ME9 special AC module;0 +Vc.Ac.Ovr.B_Codegen;Only used for ME9 special AC module;0 +Vc.AcReg.B_CodegenPHEV;;0 +Vc.Aes.B_CodeGenBasCalDsl;Diesel configuration for air system;0 +Vc.Aes.B_CodeGenDiesel;Diesel configuration for air system;0 +Vc.Aes.B_CodeGenDsl;Diesel configuration for air system;0 +Vc.Aes.B_CodeGenEgr;Egr system;0 +Vc.Aes.B_CodeGenEgrLongRoute;Long route EGR functionality active;0 +Vc.Aes.B_CodeGenGEP3;Code switch on if torque/fuel functions are in SPM instead of supplier' SW.;0 +Vc.Aes.B_CodeGenGsl;Gasoline configuration for air system;0 +Vc.Aes.B_CodeGenSC;Supercharger functions;0 +Vc.Aes.Bc.B_CodeGenBaseModes;Configure setpoint structure to use base modes;0 +Vc.Aes.Bc.B_CodeGenBoostAvl;Max available boost pressure function;0 +Vc.Aes.Bc.B_CodeGenBoostMaxRgn;Max boost limit dedicated for regneration mode;0 +Vc.Aes.Bc.B_CodeGenEgrCoolr;Oscillator function for robustness tests;0 +Vc.Aes.Ch.B_CodeGenCcv;Code switch for Crank Case Ventilation flow estimation;0 +Vc.Aes.Ch.B_CodeGenLocalThrMon;Local throttle monitor for max torque guard;0 +Vc.Aes.Ch.B_CodeGenThrIdleMax;Max limitation of idle throttle;0 +Vc.Aes.Co.B_CodeGenDrvModIdleNvh;Drive mode conditions for NVH idle throttle control;0 +Vc.Aes.Co.B_CodeGenDrvModSignal;Use new Drive mode signal for AES;0 +Vc.Aes.Co.B_CodeGenIntkFil;Intake manifold pressure filter;0 +Vc.Aes.Co.B_CodeGenMafBasCmp;MAF base compensation;0 +Vc.Aes.Co.B_CodeGenMafPlsCmp;MAF pulsation compensation;0 +Vc.Aes.Co.B_CodeGenOscr;Oscillator function for robustness tests;0 +Vc.Aes.Co.B_CodeGenPresAdpn;Pressure adaptation from ambient at ignition;0 +Vc.Aes.Ct.B_CodeGenBoostCtrl;Extra boost control coordination functions;0 +Vc.Aes.Ct.B_CodeGenLoadTran;Transient load detection for EGR/VNT control coordination, VcAesCt/9_LoadTran;0 +Vc.Aes.Ct.B_CodeGenTqTran;Transient torque detection for EGR compensation, VcAesCt/4_TqTran;0 +Vc.Aes.EgrM.B_CodeGenEgr;Generate code for Egr monitor;0 +Vc.Aes.EgrM.B_CodeGenEgrClr;Generate code for Egr cooler monitor;0 +Vc.Aes.Hw.B_CodeGenAirBypVlv;Present logic for air bypass valve;0 +Vc.Aes.Hw.B_CodeGenVntGvnr;VNT position controller (vacuum);0 +Vc.Aes.Mo.B_CodeGenMafLrng;MAF learning adaptation of modeled cylinder charge;0 +Vc.Aes.Mo.B_CodeGenMafLrngLam;MAF learning adaptation from lambda sensor;0 +Vc.Aes.Mo.B_CodeGenMafLrngNvm;NVM memory storage for MAF learning adaptations;0 +Vc.Aes.Obd.B_CodeGenExhP;Exhaust pressure monitor present;0 +Vc.Aes.Obd.B_CodeGenMaf;Activate the Maf monitoring.;0 +Vc.Aes.Sc.B_CodeGenISG;ISG functionality for SC engagement;0 +Vc.Aes.Sp.B_BoostScav;Boost controlled scavenging operation;0 +Vc.Aes.Sp.B_CodeGenBoostAvl;Use available boost functionality;0 +Vc.Aes.Sp.B_CodeGenBoostOperMod;Individual combustion operating mode setpoint;0 +Vc.Aes.Sp.B_CodeGenBoostProtnT;Model-based temperature boost protection;0 +Vc.Aes.Sp.B_CodeGenCylReqMaxTq;Max load calculation;0 +Vc.Aes.Sp.B_CodeGenCylReqMin;Min load for combustion stability;0 +Vc.Aes.Sp.B_CodeGenPresOperMod;Individual combustion operating mode setpoint;0 +Vc.Aes.Sp.B_CodeGenRvsFlowOvlp;Fuel-cut overlap strategy load request;0 +Vc.Aes.Sp.B_CodeGenTargetPres;Inverse volumetric target pressure calculations;0 +Vc.Aes.Sp.B_CodeGenVolmcNom;Nominal voleff model for transient use;0 +Vc.Aes.SupM.B_CodeGenSprChrg;Generate code for supercharger monitors;0 +Vc.Aes.Tc.B_CodeGen2TMdl;Two stage model based boost control;0 +Vc.Aes.Tc.B_CodeGenConvBoostCtl;Select boost control, old model-based selection switch;0 +Vc.Aes.Tc.B_CodeGenConvCtrl;Conventional boost control (PID);0 +Vc.Aes.Tc.B_CodeGenStatFF;Use StatFF model for wastegate (VEP);0 +Vc.Aes.Tc.B_ExhPresFb;EMAPS based actuator feed back;0 +Vc.Aes.TrboM.B_CodeGen2Trbo;Config turbo monitor for 2T config.;0 +Vc.Aes.TrboM.B_CodeGenCACP;Generate code for CAC pressure monitor;0 +Vc.Aes.TrboM.B_CodeGenPowerPulse;Code switch for power pulse monitor;0 +Vc.Aes.TrboM.B_CodeGenTrbo;Generate code for turbo monitor;0 +Vc.Aes.TrboM.B_CodeGenTrboMode06;Code switch for activating mode 06 turbo monitoring;0 +Vc.Aes.TrboM.B_CodeGenVacVnt;Code switch for vacuum VNT monitor;0 +Vc.Aes.Ve.B_CodeGenRvsFlowOvlp;Use available boost functionality;0 +Vc.Aes.Ve.B_CodeGenVolmcMapDsl;Code gen for map based voleff modell diesel;0 +Vc.Aes.Ve.B_CodeGenVolmcMapGsl;Map based voleff for gasoline;0 +Vc.Aes.Ve.B_CodeGenVolmcMdl;Code gen for voleff model;0 +Vc.At.Te.B_CodeGenTeScr2;Activate SCR 2 temperature logic;0 +Vc.B_CodeGen_7DCT_Gbx;7DCT gearbox;1 +Vc.B_CodeGen_AW_Gbx;AW gearbox;0 +Vc.B_CodeGen_EuCD_Platform;EuCD platform , incl C1MCA;0 +Vc.B_CodeGen_SPA_Platform;SPA platform, incl CMA;1 +Vc.B_CodeGen25LT;ME9 old interface (AT06) variable declaration;0 +Vc.B_CodeGen7DCT;7DCT specific;1 +Vc.B_CodeGenAccStopAndGo;AccStopAndGo signals generation;1 +Vc.B_CodeGenBrakeFootOnOffPedal;Brake foot on/off pedal generation;1 +Vc.B_CodeGenCGEA;CGEA;0 +Vc.B_CodeGenCMA;Generate code for CMA;1 +Vc.B_CodeGenConvImpTq;;1 +Vc.B_CodegenDISI;I4 DISI only;0 +Vc.B_CodeGenDv6c;;0 +Vc.B_CodeGenECLUTCH;Activate E-clutch functionality;0 +Vc.B_CodegenEcoMode;Eco mode;1 +Vc.B_CodeGenEDC17;Vcc EDC17. Add offset to BaseTorque signals. ;0 +Vc.B_CodegenExtAsIntervent;Not used;1 +Vc.B_CodeGenGearBoxLoss;;1 +Vc.B_CodeGenGtdi;;0 +Vc.B_CodeGenI5T;;0 +Vc.B_CodegenIdleCoast;Idle coast functionality activated;1 +Vc.B_CodegenLowRangeMode;Lowrange mode for Australian SUV;0 +Vc.B_CodeGenPEV;;0 +Vc.B_CodeGenPnG;Pulse and glide;1 +Vc.B_CodeGenReverseSwitch;To enbable selection of reverse gear signals;0 +Vc.B_CodeGenSI6;Denso project special;0 +Vc.B_CodeGenSPA;Generate code for ;1 +Vc.B_CodegenSportMode;Sport mode;1 +Vc.B_CodeGenTrafficSignSpeed;Generation of dummy value for traffic sign recognition system;0 +Vc.B_CodeGenVEA;VEA shiftpoint;1 +Vc.B_CodeGenVED4;Generate code only for VED;0 +Vc.B_CodeGenVEP4;Generate code only for VEP;1 +Vc.B_PistonCoolingRename;;1 +Vc.D_CodegenByPass;Es910 ByPass interface;1 +Vc.D_CodegenHev;0=NoHev, 1=MicroHev, 2=FullHev ;2 +Vc.D_CodegenHev12VStarter;HEV with 12V starter;0 +Vc.D_CodegenPhevUH61inX1;Only temporary fix for phev. UH61T1 sw in X1 veh;1 +Vc.Dcl.B_CodeGenOilLevel;Histogram over engine oil level;0 +Vc.Dcl.B_EMSTorque;Torque signal produced in EMS;0 +Vc.Dcl.B_EuCDC1MCA;Use EMS torque signal;0 +Vc.Dcl.B_Hybrid;Hybrid specific logg;0 +Vc.Dcl.B_SPA;Use SPM torque signal;1 +Vc.Dcl.B_SPMTorque;Torque signal produced in SPM;1 +Vc.Dcl.B_VED;This is a VED engine;0 +Vc.Dcl.B_VEP;obsolete;1 +Vc.Dcl.B_BoschSystem;This is a Bosch unit;1 +Vc.Dcl.B_DensoSystem;This is a Denso unit;1 +Vc.Dcl.Dep.B_CodeGenAccMon;Logger for acceleration monitor;0 +Vc.Dcl.Ptrl.B_CodeGenCylDeact;Logger for Cylinder deactivation;0 +Vc.Dcl.Ptrl.B_CodeGenECharger;Logger for E-Charger;0 +Vc.Dcl.Dpf.B_CodeGenDiffPressHistogram;obsolete;0 +Vc.Dcl.Dpf.B_CodeGenRegenCauseHistogram;obsolete;1 +Vc.Dcl.Dpf.B_CodeGenRegenInjSum;obsolete;1 +Vc.Dcl.Dpf.B_CodeGenRegenMilage;obsolete;1 +Vc.Dcl.Dpf.B_CodeGenRegenOnOff;obsolete;1 +Vc.Dcl.Dpf.B_CodeGenRegenTime;obsolete;1 +Vc.Dcl.Dpf.B_CodeGenSootMass;obsolete;1 +Vc.Dcl.Dsl.B_CodeGenBoostAir;obsolete;0 +Vc.Dcl.Dsl.B_CodeGenHeatProtection;obsolete;0 +Vc.Dcl.Dsl.B_CodeGenInjectorSystem;obsolete;0 +Vc.Dcl.Dsl.B_CodeGenThermalLoading;obsolete;0 +Vc.Dcl.IcPnG.B_CodeGenIdleCoast;Logger of IdleCoast;0 +Vc.Dcl.IcPnG.B_CodeGenPnG;Logger of Pulse and Glide;0 +Vc.Dcl.Iupr.B_CATM;CATM logger;0 +Vc.Dcl.Iupr.B_EVAP;Evaporation logger;0 +Vc.Dcl.Iupr.B_Markow;Vehicle Speed and acceleration markow statistics;1 +Vc.Dcl.Iupr.B_MOXH;MOXH logger;0 +Vc.Dcl.Iupr.B_MOXT;MOXT logger;0 +Vc.Dcl.Iupr.B_StContTrq;Continous Steady State Engine torque and Engine speed logger;1 +Vc.Dcl.Iupr.B_StTrq;Steady State Engine torque and Engine speed logger;0 +Vc.Dcl.Iupr.B_UOXS;UOXS logger;0 +Vc.Dcl.Iupr.B_VehSpd;Vehicle Speed per DCY logger;1 +Vc.Dcl.Pc.B_CodeGenPC;obsolete;0 +Vc.Dcl.Phev.B_IceInhibitedStop;Inhibited Stops logger;1 +Vc.Dcl.Phev.B_IceRunningPercentage;ICE running percentage logger;1 +Vc.Dcl.Phev.B_IceSystemInducedStarts;System induced starts logger;1 +Vc.Dcl.Phev.B_ISG;Miscellenous ISG loggers;1 +Vc.Dcl.Phev.B_LOS;LOS reconfiguration loggers;1 +Vc.Dcl.Phev.B_ModeManager;PHEV Mode manager logger (EUCD/C1MCA);0 +Vc.Dcl.Phev.B_ModeManagerSPA;Mode manager logger (SPA);0 +Vc.Dcl.Vu1.B_ModeManagerSPA;Mode manager logger (SPA);1 +Vc.Dcl.Phev.B_PHEV;Logger of all hybridspecific data;1 +Vc.Dcl.Phev.B_RunDry;Run dry logger;1 +Vc.Dcl.Phev.B_TorqueManager;Torque manager logger;0 +Vc.Dcl.Phev.B_VehSpd;Engine off vehicle speed histogram;1 +Vc.Dcl.Phev.B_VemDistance;Vehicle Energy Manager distance logger;0 +Vc.Dcl.Pt.B_CodeGemPurgingTime;Logger of purging times;0 +Vc.Dcl.Pt.B_CodeGenCatTempHistogram;Logger of Catalyst Temperature histogram;0 +Vc.Dcl.Pt.B_CodeGenFuelCutHist;Logger of fuel cuts;0 +Vc.Dcl.Pt.B_CodeGenFuelMassIncrease;Logger of Fuelmass increase;0 +Vc.Dcl.Pt.B_CodeGenFuelMassLoss;Logger of Fuelmass Loss;0 +Vc.Dcl.Pt.B_CodeGenLowCatTemp;Logger of low catalyst temperatures;0 +Vc.Dcl.Pt.B_CodeGenLVGStartHist;Logger of LVG;0 +Vc.Dcl.Pt.B_CodeGenMisfireHist;Logger of misfires;0 +Vc.Dcl.Pt.B_KnockCtrlAdaptTime;Logger of knock control adaptation value;0 +Vc.Dcl.Soot.B_CodeGenPowerPulse;Power Pulse logger;0 +Vc.Dcl.Soot.B_CodeGenScrTemp;SCR temperature logger;0 +Vc.Dcl.Soot.B_CodeGenScrAgingSeverity;SCR aging severity logger;0 +Vc.Dcl.Soot.B_CodeGenScrAdaption;SCR adaption logger;0 +Vc.Dcl.Soot.B_CodeGenScrAmmonia;SCR ammonia logger;0 +Vc.Dcl.Soot.B_CodeGenEmCoMode;EmCO logger;0 +Vc.Dcl.Soot.B_CodeGenEoNoxModel;EoNox logger;0 +Vc.Dcl.Soot.B_CodeGenScrNoxConcentration;SCR Nox concentraion logger;0 +Vc.Dcl.Soot.B_CodeGenLntNoxConcentration;LNT Nox concentraion logger;0 +Vc.Dcl.Soot.B_CodeGenScrDef;SCR Adblue Consumption logger;0 +Vc.Dcl.Soot.B_CodeGenScrRde;SCR RDP Nox vs drive cycle dist logger;0 +Vc.Dcl.Soot.B_CodeGenDpfRegenDuration;DPF regeneration duration logger;0 +Vc.Dcl.Soot.B_CodeGenSoxLoad;Sox load logger;0 +Vc.Dcl.Soot.B_CodeGenDpfRegenMileage;DPF regeneration mileage logger;0 +Vc.Dcl.Soot.B_CodeGenGlowTemp;Glow temperature logger;0 +Vc.Dcl.Soot.B_CodeGenScrTank;Misc loggers for SCR Tank;0 +Vc.Dcl.Ss.B_CodeGenChangeOfMind;Start/Stop Change of minds logger;0 +Vc.Dcl.Ss.B_CodeGenDieselStopStart;Diesel unique Stop/Start logger (regen);0 +Vc.Dcl.Ss.B_CodeGenEgRailPressTempTime;obsolete;0 +Vc.Dcl.Ss.B_CodeGenEgRailPressureAtSS;obsolete;0 +Vc.Dcl.Ss.B_CodeGenEgStartAmbPressSS;Engine start and ambient pressure logger;0 +Vc.Dcl.Ss.B_CodeGenEgStartTempTime;Engine start temperature and time logger;0 +Vc.Dcl.Ss.B_CodeGenEgStopLoadTime;obsolete;0 +Vc.Dcl.Ss.B_CodeGenEgStopPosition;obsolete;0 +Vc.Dcl.Ss.B_CodeGenEgStopTimeSS;obsolete;0 +Vc.Dcl.Ss.B_CodeGenHistory;Stop/Start histograms;1 +Vc.Dcl.Ss.B_CodeGenInhibitStart;Counters for inhibited starts;1 +Vc.Dcl.Ss.B_CodeGenInhibitStop;Counters for inhibited stops;1 +Vc.Dcl.Ss.B_CodeGenInhibitStopDsl;Counter for inhibited stops, dieselspecific causes;0 +Vc.Dcl.Ss.B_CodeGenStartCounts;Misc start counters;1 +Vc.Dcl.Ss.B_CodeGenStopIntakePressure;obsolete;0 +Vc.Dcl.Ss.B_CodeGenSystemStart;Counters for system induced starts;1 +Vc.Dcl.Ss.B_CodeGenTempIgnOn;obsolete;0 +Vc.Dcl.Ss.B_CodeGenTimeToDriveEngagedAutomatic;obsolete;0 +Vc.Dcl.Strt.B_CodeGenVEA;This is a VEA Engine;1 +Vc.Dcl.Vu1.B_CodeGenAmbTempAmbPressHistogram;Ambient temperature and ambient pressure logger;1 +Vc.Dcl.Vu1.B_CodeGenCanBusHEVOff;CAN bus HEV Off logger;1 +Vc.Dcl.Vu1.B_CodeGenCanBusOff;CAN bus Off logger;1 +Vc.Dcl.Vu1.B_CodeGenDCLRemoteStart;Logger of Remote starts;0 +Vc.Dcl.Vu1.B_CodeGenDrCycle;Logger of Drive cycle times;1 +Vc.Dcl.Vu1.B_CodeGenEgStartTempAmbHistogram;Engine start time vs ambient temperature logger;1 +Vc.Dcl.Vu1.B_CodeGenEngClntTemp;Engine coolant temperature logger;1 +Vc.Dcl.Vu1.B_CodeGenI5Ttest;obsolete;0 +Vc.Dcl.Vu1.B_CodeGenIdleCoast;Idle Coast loggers;1 +Vc.Dcl.Vu1.B_CodeGenPedalActiveTime;Pedal active time loggers;1 +Vc.Dcl.Vu1.B_CodeGenPowertrainModeHistogram;Power train mode logger;0 +Vc.Dcl.Vu1.B_CodeGenShiftProt;Shift protection logger;0 +Vc.Dcl.Vu1.B_CodeGenSoakHistogram;Soak time histogram;1 +Vc.Dcl.Vu1.B_CodeGenTakeOffGear;Take off gear logger;0 +Vc.Dcl.Vu1.B_CodeGenTempHistogram;Temperature histogram;1 +Vc.Dcl.Vu1.B_CodeGenTorqueMonitoring;Generation of torque monitor logging;1 +Vc.Dcl.Vu1.B_CodeGenTotFuelMass;obsolete;0 +Vc.Dcl.Vu1.B_CodeGenTrailerCnt;Trailer logger;0 +Vc.Dcl.Vu1.B_CodeGenTrimCnt;Trimming buster logger;0 +Vc.Dcl.Vu1.B_CodeGenGPF;GPF logger;0 +Vc.Dcl.Vu2.B_CodeGenDistance;Driving distance logger;1 +Vc.Dcl.Vu2.B_CodeGenEnergy;Energy consumption logger;1 +Vc.Dcl.Vu2.B_CodeGenFuel;Fuel consumption logger;1 +Vc.Dcl.Vu2.B_CodeGenLoadRpmHistogram;obsolete;1 +Vc.Dcl.Vu2.B_CodeGenLoadRpmSteadyHistogram;obsolete;1 +Vc.Dcl.Vu2.B_CodeGenEMSTorque;Use EMS torque signal;0 +Vc.Dcl.Vu2.B_CodeGenModelTorque;Use model torque signal;1 +Vc.Dcl.Vu2.B_CodeGenRefuel;Refuel logger;0 +Vc.Dcl.Vu2.B_CodeGenVehAccHistogram;Vehicle acceleration logger;1 +Vc.Dcl.Vu2.B_CodeGenVehSpeedHistogram;Vehicle speed logger;1 +Vc.Dcl.Vu2.B_CodeGenSpeedLimitVehSpeedHistogram;Speed limiter speed logger;0 +Vc.Dcl.Vu2.B_CodeGenVehSpeedSteadyHistogram;obsolete;1 +Vc.Dcl.Vu2.B_DcyTimeWithHighOilTemp;Drive time with high oil temperature logger;1 +Vc.Dcl.Vu2.B_EngOilTemp;Engine oil temperature logger;1 +Vc.Dcl.Vu2.B_OilDilution;Oil dulution logger;1 +Vc.Dcl.Vu2.B_OilLvlVsMileageSinceLastService;Oil level vs mileage since last service logger;1 +Vc.Dcl.Vu2.B_OilPressureVsTorque;Oil pressure vs torque;1 +Vc.Dcl.Vu2.B_OilTempAtStartVsDrivCycleTime;Oil temperature at start vs Drive cycle time;1 +Vc.De.As.B_CodegenOldGain;Used in VCC projects;1 +Vc.De.Da.B_Codegen;Driving analysis (EcoMeter, EcoGrade, SportMeter);1 +Vc.De.Da.B_CodeGenEcoGrade;Enables EcoGrade;0 +Vc.De.Da.B_CodegenEcoGrDenso;EcoGrade: NVM Denso;1 +Vc.De.Da.B_CodegenEcoGrOther;EcoGrade: NVM other;0 +Vc.De.Da.B_CodeGenExtRng;Enables Extended Range;1 +Vc.De.Da.B_CodeGenPerfMeter;Enables Performance Meter;0 +Vc.De.Da.B_CodeGenRefDrv;Enables Reference Driver;1 +Vc.De.Dmm.CodeGenAT;Automatic transmission;1 +Vc.De.Dmm.CodeGenFSiD;Freeroll SiD, Below AT;1 +Vc.De.Dmm.CodeGenFSiG;Freeroll SiG, Below MT;1 +Vc.De.Dmm.CodeGenFSiN;Freeroll SiN, Below MT;1 +Vc.De.Dmm.CodeGenMT;Manual transmission;1 +Vc.De.Dmm.CodeGenSiD;Stop in Drive, Below AT;1 +Vc.De.Dmm.CodeGenSiG;Stop In Gear Below MT;1 +Vc.De.Dmm.CodeGenSiN;Stop In Neutral, Below MT;1 +Vc.De.Dmm.CodeGenSteerActive;Extra steering conditions detection, reduce S/S;1 +Vc.De.Gsi.B_Codegen;Gear Shift Indication;1 +Vc.De.Gsi.B_CodegenCoolshift;Coolshift;0 +Vc.De.PnG.B_CodeGenGlideTimeModel;Glide Time calculation from model;0 +Vc.De.Scl.B_CodeGenASL;Adjustable speed limiter;1 +Vc.De.Scl.B_CodeGenNewSetSpeed;New CC/ACC/ASL set speed function;1 +Vc.De.Scl.B_CodeGenOldSetSpeed;Old CC/ACC/ASL set speed function;0 +Vc.De.Scl.B_CodeGenTSSL;Traffic sign speed limiter;0 +Vc.De.Tfr.B_Codegen2Maps;Addition from Ford (VF9x track, only DV6C);0 +Vc.De.Tfr.B_Codegen4Maps;Choose 4 or 6 pedal maps;1 +Vc.De.Tfr.B_Codegen6Maps;Choose 4 or 6 pedal maps;0 +Vc.De.Tfr.B_CodegenAccPedRcf;Possibility to request pedal reconfiguration. DENSO only.;1 +Vc.De.Tfr.B_CodegenConvComp;Compensate pedalmap torque with converter gain;1 +Vc.De.Tfr.B_CodegenForceMap;1 = use traction force map without hybrid;1 +Vc.De.Tfr.B_CodegenHDC ;Pedal interpretation with only HDC (simple VCC implementation). Will include blending.;1 +Vc.De.Tfr.B_CodegenHDCTOS;The complete implementation. Will include blending.;0 +Vc.De.Tfr.B_CodegenHighAltMaps;Use high altipude pedal maps;0 +Vc.De.Tfr.B_CodegenIdleSpeedMod;Enable the idle speed modification for the support line (= idle speed controller feed forward).;1 +Vc.De.Tfr.B_CodegenLowRangeMode;Lowrange mode for Australian SUV;0 +Vc.De.Tfr.B_CodegenMaxTrqAdapt;Adapt max torque (LGF);0 +Vc.De.Tfr.B_CodegenNoHDCTOS;The simplest implementation. Will NOT include blending.;0 +Vc.De.Tfr.B_CodeGenPedalTrim;Pedal trim function. Is used with Feed Forward Launch.;0 +Vc.De.Tfr.B_CodegenPedMapMult;Pedal map multiplication (FNA brand DNA);0 +Vc.De.Tfr.B_CodegenTqMax;Generate engine speed for max torque (JLR signal);0 +Vc.Debug.B_CodeGenCGEA;Not used;0 +Vc.Debug.B_CodeGenLevel1;;1 +Vc.Debug.B_CodeGenLevel2;;1 +Vc.Debug.B_CodeGenLevel3;;1 +Vc.Debug.B_CodeGenLevel4;Db oil sensor SPM;1 +Vc.Debug.B_CodeGenLevel5;Max speed signal. Should be 0 in production.;0 +Vc.Dia.Dcl.B_CodeGenAmbTempAmbPressHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenCanBusOff;obsolete;0 +Vc.Dia.Dcl.B_CodeGenCPSDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenCustomConfigDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenDiffPressHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenDPFDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenEgStartTempAmbHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenHistory;obsolete;0 +Vc.Dia.Dcl.B_CodeGenICEDieselDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenICEPetrolDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenInhibitStart;obsolete;0 +Vc.Dia.Dcl.B_CodeGenInhibitStop;obsolete;0 +Vc.Dia.Dcl.B_CodeGenLoadRpmHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenLoadRpmSteadyHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenPedalActiveTime;obsolete;0 +Vc.Dia.Dcl.B_CodeGenPistonCoolingDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenPowertrainModeHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenPwrTrainCoolingSystemDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenRegenCauseHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenRegenInjSum;obsolete;0 +Vc.Dia.Dcl.B_CodeGenRegenMilage;obsolete;0 +Vc.Dia.Dcl.B_CodeGenRegenOnOff;obsolete;0 +Vc.Dia.Dcl.B_CodeGenRegenTime;obsolete;0 +Vc.Dia.Dcl.B_CodeGenScavengingDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenSoakHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenSootMass;obsolete;0 +Vc.Dia.Dcl.B_CodeGenStartCounts;obsolete;0 +Vc.Dia.Dcl.B_CodeGenStopStartDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenSuperChargerDataLog;obsolete;0 +Vc.Dia.Dcl.B_CodeGenSystemStart;obsolete;0 +Vc.Dia.Dcl.B_CodeGenTempHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenTotFuelMass;obsolete;0 +Vc.Dia.Dcl.B_CodeGenVehSpeedHistogram;obsolete;0 +Vc.Dia.Dcl.B_CodeGenVehSpeedSteadyHistogram;obsolete;0 +Vc.DIDApi.Enable;Code gen of DID API;1 +Vc.Dtc.Ajc.B_CodegenCcCancel;Cruise control cancel;1 +Vc.Dtc.Ajc.B_CodegenDpBase;Only gasoline.;1 +Vc.Dtc.Ajc.B_CodegenDpBaseLPFilter;LowPass filter on base torque (used in V8 application);0 +Vc.Dtc.Ajc.B_CodegenDpClutch;Clutch;1 +Vc.Dtc.Ajc.B_CodegenDpRegenGain;Fast and slow dashpot gain depending on EGT and gear.;1 +Vc.Dtc.Ajc.B_CodegenDpSportMode;Used in SI6T, must have an sportmoide input in to CVC from CAN;1 +Vc.Dtc.Ajc.B_CodegenDpTosHDC;Fast and slow dp gain depending on TOS and HDC. ;0 +Vc.Dtc.Ajc.B_CodegenDpZeroCrossComp;Compensate feedback torque to move zero cross passing. Only used in EDC16;1 +Vc.Dtc.Ajc.B_CodegenLowTrqDetect;Only gasoline use.;1 +Vc.Dtc.Ajc.B_CodegenNewAjc;New Ajc layout;0 +Vc.Dtc.Ajc.B_CodegenTiAccPedComp;Should be used together with torque based tipin.;1 +Vc.Dtc.Ajc.B_CodegenTiAccPedRate;Accelerator pedal rate;1 +Vc.Dtc.Ajc.B_CodegenTiAtmoPres;Fast tipin dependant on atmospheric pressure;1 +Vc.Dtc.Ajc.B_CodegenTiConvComp;Fast and slow tipin depending on converter slip;1 +Vc.Dtc.Ajc.B_CodegenTiConvLim;Decrease tipin torque rate depending on lockup slip. ;1 +Vc.Dtc.Ajc.B_CodegenTiEGTGain;Fast and slow tipin gain depending on EGT(regen) and gear. Only old system is EDC16. ;1 +Vc.Dtc.Ajc.B_CodegenTiLP;Only used in 20V8 project;1 +Vc.Dtc.Ajc.B_CodegenTiOverrunGain;Only used in ME9 system;0 +Vc.Dtc.Ajc.B_CodegenTiSportMode;Used in SI6T, must have an sportmode CAN input from TCM into CVC;1 +Vc.Dtc.Ajc.B_CodegenTiTemp;Fast and slow tipin gain depending on ambient temperature. Only old system is EDC16. ;1 +Vc.Dtc.Ajc.B_CodegenTiTosHDC;Fast and slow tipin gain depending on TOS and HDC. ;0 +Vc.Dtc.Ajc.B_CodegenTiTqRsv;Only used in gasoline applications;1 +Vc.Dtc.Ajc.B_CodegenTiZeroCrossComp;Compensate feedback torque to move zero cross passing. Only used in EDC16;1 +Vc.Dtc.Ajc.B_CodegenTosHDC;Fast and slow tipin gain depending on TOS and HDC. ;0 +Vc.Dtc.Ajc.B_CodegenTrailerLim;Should be equal to Vc.Dtc.Ajc.B_CodegenTiLP;0 +Vc.Dtc.As.B_Codegen6thOrderFilt_Ndiff;6-pole filter for Ndiff;0 +Vc.Dtc.Atf.B_CodeGenAcCut;AC cut;0 +Vc.Dtc.Atf.B_CodeGenAltCut;Enable Alternator Cut flag generation;0 +Vc.Dtc.Atf.B_CodeGenCGEA;Not used;0 +Vc.Dtc.Cta.B_CodegenAT;AT or PS;1 +Vc.Dtc.Cta.B_CodegenBTL;Interface to F21 gearbox in SI6T;0 +Vc.Dtc.Cta.B_CodegenInertia;Code for inertia compensation;1 +Vc.Dtc.Cta.B_CodegenMT;MT;1 +Vc.Dtc.Cta.B_CodegenShaftProt;Possibility to use driveshaft torque protection;1 +Vc.Dtc.Dc.B_CodegenAT;AT;1 +Vc.Dtc.Esc.B_CodegenAT;AT or PS;1 +Vc.Dtc.Esc.B_CodegenMonAT;AT;1 +Vc.Dtc.Esc.B_CodegenMonPS;PS;0 +Vc.Dtc.Esc.B_CodegenMT;MT;1 +Vc.Dtc.Ffl.B_CodegenFfl;Feed forward launch;1 +Vc.Dtc.Ffl.B_CodegenFflInertia;Generate inertia compensation part of Ffl;0 +Vc.Dtc.Isc.B_CodegenPIDBase;ISC airpath (petrol only);1 +Vc.Dtc.Isc.B_CodegenTorqueReserve;ISC torque reserve (petrol only);1 +Vc.Dtc.Tc.B_CodegenOilTorqueLimit;Oil Torque Limit;1 +Vc.Dtc.Tc.B_CodegenTqRsv;Not used;1 +Vc.Dtc.Tc.B_CodgenACTrqRsvReq;Create torque reserve during A/C on (denso);1 +Vc.Ext.In.B_CanMod;Codeswitch for temporary CAN-fix;1 +Vc.Ext.In.B_CodeGenASLTestButton;Possible to use CcOnOff and CcOnOffCancel to activate both ASL and Cc;0 +Vc.Ext.In.B_CodeGenHack;;0 +Vc.Ext.In.B_PhevHighIdle;Increase idle speed from DtcTc;1 +Vc.Ext.In.B_VEATestinSI6;To be able to test VEA shiftpoint models in SI6;0 +Vc.Ext.Out.B_CodeGenAccDistCtlActv;;0 +Vc.Ext.Out.B_CodeGenAesVEAX0b;VEA specific;1 +Vc.Ext.Out.B_CodeGenASLUseCcLamp;Possible to CCLamp to both Sl and Cc (Test purpose);0 +Vc.Ext.Out.B_CodegenVEA;VEA specific;1 +Vc.ExtVar.B_CodeGenCGEA;Not used;0 +Vc.ExtVar.B_CodeGenOilLevSens;Oil sensor SPM is used;1 +Vc.ExtVar.B_CodeGenRegenCharge;Regen charge SPM is used;0 +Vc.ExtVar.B_CodeGenTOC;TOC SPM is used;0 +Vc.Fsd.Pc.B_CodeGenAntiClogging;Use anti clogging functionality only for diesel;0 +Vc.Ftiv.Mon.B_Ftiv;Fuel tank isolation valve monitoring;0 +Vc.Lin.CptM.B_Alternator12V;Code gen for 12V alternator;0 +Vc.Lin.CptM.B_EDWaterPump;Code gen for electrical water pump for electric drive circuit;0 +Vc.Lin.CptM.B_EcpEmgyRun;Code gen for coolant pump emergency run;0 +Vc.Lin.CptM.B_ElAC;Code gen for electrical Air Condition;0 +Vc.Lin.CptM.B_EWaterPump;Code gen for electric water pump for ICE;0 +Vc.Lin.CptM.B_GrillShutter;Code gen when Grillshutter shall be used;1 +Vc.Lin.GrlShttr.B_GrillShutter;Code gen when Grillshutter shall be used;1 +Vc.Lin.CptM.B_SPA;Modelparts that shall be used in SPA;1 +Vc.Lin.CptM.B_SpoilerShutter;Code gen when Spoiler shutter shall be used;1 +Vc.Lin.SplrShttr.B_SpoilerShutter;Code gen when Spoiler shutter shall be used;1 +Vc.Lin.CptM.B_VEP;Patrol config;1 +Vc.Lin.CptM.B_VEP315H;Modelparts that shall be used in S315H;0 +Vc.NewDiagnosticCoreIF;Use New Diagnostic Core Interface;1 +Vc.Nvm.B_CodeGenNvmSync;;1 +Vc.Nvm.B_CodeGenNvmSyncDebug;;0 +Vc.Nvm.Codegen;Non-Volatile Memory;1 +Vc.Obd.Cmn.B_CodeGenAmbT;Generate code for Ambient temperature related monitors;1 +Vc.Obd.Cmn.B_CodeGenBoostT;Generate code for Boost temperature related monitors;1 +Vc.Obd.Cmn.B_CodeGenCisgT;Generate code for Crank ISG temperature related monitors;0 +Vc.Obd.Cmn.B_CodeGenClntT;Generate code for Coolant temperature related monitors;1 +Vc.Obd.Cmn.B_CodeGenInManiT;Generate code for Intake Manifold temperature related monitors;1 +Vc.Obd.Cmn.B_CodeGenIntkT;Generate code for Intake air temperature related monitors;0 +Vc.Obd.Cmn.B_CodeGenObdExe;Activate ObdExe module;1 +Vc.Obd.Cmn.B_CodeGenOilT;Generate code for Oil temperature related monitors;1 +Vc.Obd.Cmn.B_CodeGenPreHeatDet;Activate preheater detection module;1 +Vc.Obd.Cmn.B_CodeGenTempAve;Activate average temp calc at key on;0 +Vc.Obd.Cmn.B_CodeGenEChargerT;Generate code for ECharger temperature related monitors;0 +Vc.Obd.Cmn.B_CodeGenWcacUsAirT;Generate code for Wcac upstream air temperature related monitors;0 +Vc.Obd.Cmn.B_CodeGenLPFuelT;Generate code for LP Fuel temperature related monitors;0 +Vc.Oil.Lvl.B_CodeGenPHEV;Generation of PHEV-specific logic;0 +Vc.Oil.Lvl.B_CodeGenVEA;Generation of VEA-specific logic;1 +Vc.Oil.Lvl.B_CodeGenStck;Activate Oil Level Sensor Stuck diagnose;0 +Vc.Oil.LvlM.B_CodeGenVEA;Generation of VEA-specific logic;0 +Vc.Oil.LvlM.B_CodeGenStck;Activate Oil Level Sensor Stuck diagnose;0 +Vc.Oil.Pr.B_CodeGenPIDCtrl;PID controller for oil pump;0 +Vc.Oil.Pr.B_CodeGenResetCtrl;Reset PID controller for oil pump;0 +Vc.Oil.Pr.B_CodeGenVEP;VVT for VEP;1 +Vc.Oil.Pr.B_CodeGenVvtPwmBst;Extra PWM signal for oil pressure req during VVT transient;0 +Vc.Oil.PrMon.B_CodeGen2ModOilPmp;Activate stuck monitor for solenoid in two-mode oil pump;0 +Vc.Pem.Alc.B_Codegen_AcCut;Not found in model. Investigation ongoing on how to remove them.;1 +Vc.Pem.Alc.B_Codegen_AltCut;Not found in model. Investigation ongoing on how to remove them.;1 +Vc.Pem.Alc.B_Codegen_Controller;Not found in model. Investigation ongoing on how to remove them.;1 +Vc.Pem.Alc.B_CodegenDpfRegen;Electrical load increase for DPF-regen ;1 +Vc.Pem.Alc.B_CodegenFastCat;Electrical load increase for Cat-heating;1 +Vc.Pem.Alc.B_CodegenStart;StartCut enable;1 +Vc.Ppm.B_CodegenRemoteStart;Remote Start;1 +Vc.Ppm.Imob.B_ImobSkipAllowed;Allow bypassing immobiliser through calibration.;1 +Vc.Ppm.Psm.D_CodegenSysRly;System Relay control in WakeUp / afterrun state;1 +Vc.Ppm.Rc.B_Glow;Glow sync with starter motor in StopStart;0 +Vc.Ppm.St.B_CodeGenEmsPowerPackStatus;Use PowerPackStatus generated in EMS instead of the one in VcPpmSt;0 +Vc.Reg.Ch.B_CodegenAltCut;Alternator cut implemented;1 +Vc.Reg.Ch.B_CodegenCostEms;Cost-function in EMS;1 +Vc.Reg.Ch.B_CodegenCostSpm;Cost-function in SPM;0 +Vc.Reg.Ch.B_CodeGenDID;Code gen for writing regen state to readable DID;1 +Vc.Reg.Ch.B_CodegenDpfRegen;Voltage boost for DPF-regen (2 add load);1 +Vc.Reg.Ch.B_CodegenFastCat;Cat-heating by el-load;1 +Vc.Reg.Ch.B_CodegenFuelpumpBoost;Voltage boost for fuel pump;1 +Vc.Reg.Ch.B_CodegenInjComp;Voltage increase to boost injection;1 +Vc.Sc.Dep.B_CodeGenDepPropAllowed;Generate dependability logic for Remote Start vehicles;1 +Vc.Sc.Dep.B_CodegenEngPosition;;0 +Vc.Sc.Dep.B_GenDepAccPedalPosition;Switch to enable code generation for AccPedal logic in ScDep. Select for Denso I5T, VEA and PHEV where RAM is not an issue.;1 +Vc.Sc.Dep.B_UseEMSClutchPedalPosition;Switch to use EMS clutch pedal signal, instead of signal from VcScDep. Select for all variants apart from Denso I5T and VEA.;1 +Vc.Sc.In.RegenByPaddles;Function for selecting brake regen level using paddles (HRE);1 +Vc.Sp.B_CruiseDownHill;Cruise Down Hill functionality;NA +Vc.Sp.B_DriverEvaluator;Driver Evaluator;1 +Vc.Sp.B_FanRequest;FanRequest;NA +Vc.Sp.B_GLMMonitor;GLMMonitor;NA +Vc.Sp.B_GradeEstimator;Grade Estimation Calculation;NA +Vc.Sp.B_HEV;HEV;NA +Vc.Sp.B_IntermediateGear;Intermediate Gear for FreeWheel;1 +Vc.Sp.B_LTS;LTS functionality;1 +Vc.Sp.B_OpenLUEngSpeed;LU in VcSpCC;0 +Vc.Sp.B_PredictiveUpShift;Usage of Predictive Upshift;1 +Vc.Sp.B_SportInit;Usage of Sport Init.;1 +Vc.Sp.B_NICIdle;NICIdle functionality;0 +Vc.Sp.B_TransMode;TransMode for FreeWheel;1 +Vc.Temp.StkM.B_CodeGenBoost;Activate temp stuck diag for boost temp;0 +Vc.Temp.StkM.B_CodeGenClnt;Activate temp stuck diag for coolant temp;0 +Vc.Temp.StkM.B_CodeGenInMani;Activate temp stuck diag for intake manifold temp;0 +Vc.Temp.StkM.B_CodeGenMaf;Activate temp stuck diag for inairtemp/maftemp;0 +Vc.Temp.StkM.B_CodeGenEChrgr;Activate temp stuck diag for Echarger;0 +Vc.Temp.StkM.B_CodeGenOil;Activate temp stuck diag for Oil;0 +Vc.Temp.StkM.B_CodeGenWcacUsAir;Activate temp stuck diag for Wcac upstream air temp;0 +Vc.Temp.StkM.B_CodeGenLPFuelT;Activate temp stuck diag for LP Fuel temperature;0 +Vc.Temp.ThM.B_CodeGenThms;Activate THMS diagnostics;0 +Vc.Tm.Af.B_CodeGenMovCtrDenso;NVM for movement ctr Denso;1 +Vc.Tm.Efl.B_CodeGenAuxWtrPmpReqHandler;Auxillary water pump request in VcTmEfl;0 +Vc.Tm.Efl.B_CodeGenClntFlwFb;Coolant flow feedback;1 +Vc.Tm.Efl.B_CodeGenClntFlwRequestHandler;Use with electrical waterpump;0 +Vc.Tm.Efl.B_CodeGenClntSetpoint;Function for two coolant setpoints;0 +Vc.Tm.Efl.B_CodeGenCwpHvac;FailSafe function for CWP and HVAC;0 +Vc.Tm.Efl.B_CodeGenEgrPmpHandler;EGR coolant flow requst;0 +Vc.Tm.Efl.B_CodeGenEwpRly;FailSafe function for EWP ;0 +Vc.Tm.Efl.B_CodeGenRadClntFlowRequest;Use with electrical waterpump;0 +Vc.Tm.Efl.B_CodeGenSpoilerShutter;Function for spoilershutter variant;1 +Vc.Tm.Efl.B_CodeGenThermostatOpenRequest;Use with electrical thermostat;0 +Vc.Tm.Efl.B_CodeGenValveHandler;Use with electrical controled valves in coolant system;0 +Vc.Tm.Efl.B_CodeGenWtrPmpAftRun;Function for EWP after run;0 +Vc.Vmc.Ajc.B_CodegenCcCancel;Cruise control cancel;1 +Vc.Vmc.Ajc.B_CodegenDpBase;Only gasoline.;1 +Vc.Vmc.Ajc.B_CodegenDpBaseLPFilter;LowPass filter on base torque (used in V8 application);0 +Vc.Vmc.Ajc.B_CodegenDpClutch;Clutch;1 +Vc.Vmc.Ajc.B_CodegenDpRegenGain;Fast and slow dashpot gain depending on EGT and gear.;1 +Vc.Vmc.Ajc.B_CodegenDpSlowFast;0 = 12maps (FoE), 1 = 2maps (Volvo), 2 = Frequency based (under development);1 +Vc.Vmc.Ajc.B_CodegenDpSlowFast12Maps;FoE project use 12 maps, Vcc projects use 2 maps (not used after V80, use Vc.Vmc.Ajc.B_CodegenDpSlowFast instead);0 +Vc.Vmc.Ajc.B_CodegenDpSportMode;Used in SI6T, must have an sportmoide input in to CVC from CAN;1 +Vc.Vmc.Ajc.B_CodegenDpTosHDC;Fast and slow dp gain depending on TOS and HDC. ;0 +Vc.Vmc.Ajc.B_CodegenDpZeroCrossComp;Compensate feedback torque to move zero cross passing. Only used in EDC16;1 +Vc.Vmc.Ajc.B_CodegenLowTrqDetect;Only gasoline use.;1 +Vc.Vmc.Ajc.B_CodegenTiAccPedRate;Accelerator pedal rate;1 +Vc.Vmc.Ajc.B_CodegenTiAtmoPres;Fast tipin dependant on atmospheric pressure;1 +Vc.Vmc.Ajc.B_CodegenTiConvComp;Fast and slow tipin depending on converter slip;1 +Vc.Vmc.Ajc.B_CodegenTiConvLim;Decrease tipin torque rate depending on lockup slip. ;1 +Vc.Vmc.Ajc.B_CodegenTiEGTGain;Fast and slow tipin gain depending on EGT(regen) and gear. Only old system is EDC16. ;1 +Vc.Vmc.Ajc.B_CodegenTiLP;Only used in 20V8 project;1 +Vc.Vmc.Ajc.B_CodegenTiOverrunGain;Only used in ME9 system;0 +Vc.Vmc.Ajc.B_CodegenTiSlowFast;0 = 12maps (FoE), 1 = 2maps (Volvo), 2 = Frequency based (under development);1 +Vc.Vmc.Ajc.B_CodegenTiSlowFast12Maps;FoE project use 12 maps, Vcc projects use 2 maps. (not used after V80, use Vc.Vmc.Ajc.B_CodegenTipSlowFast instead);0 +Vc.Vmc.Ajc.B_CodegenTiSportMode;Used in SI6T, must have an sportmode CAN input from TCM into CVC;1 +Vc.Vmc.Ajc.B_CodegenTiTemp;Fast and slow tipin gain depending on ambient temperature. Only old system is EDC16. ;1 +Vc.Vmc.Ajc.B_CodegenTiTosHDC;Fast and slow tipin gain depending on TOS and HDC. ;0 +Vc.Vmc.Ajc.B_CodegenTiTqRsv;Only used in gasoline applications;1 +Vc.Vmc.Ajc.B_CodegenTiZeroCrossComp;Compensate feedback torque to move zero cross passing. Only used in EDC16;1 +Vc.Vmc.Ajc.B_CodegenTosHDC;Fast and slow tipin gain depending on TOS and HDC. ;0 +Vc.Vmc.Ajc.B_CodegenTrailerLim;Should be equal to Vc.Vmc.Ajc.B_CodegenTiLP;0 +Vc.Vmc.Crp.B_CodegenCreep;Code switch for 7DCT Creep function;1 +Vc.Vmc.Em.CodeGenStartStop;Use old EM function;0 +Vc.Vmc.Pmm.B_CodegenAT;Use transmission function;1 +Vc.Vmc.Pmm.B_CodegenPS;Use PowerShift function;0 +Vc.Trq.Req.B_CodeGenTrqDlyTCM;Activate calculation of expected torque delay for transmission control;0 +Vc.Trq.B_CodeGenMaxNoBoost;Activate calculation of maximum torque without boost for dual clutch transmission (7DCT) or e-clutch clutch control;1 +Vc.Aes.B_CodeGen2VNT;Enable 2xVNT turbo control;0 +Vc.B_CodeGenEfad;CodeGen for Efad;1 +Vc.Aes.Tc.B_CodeGenModelBasedCtl;Code switch for model based turbo control;0 +Vc.Obd.Sch.B_ObdSch;Code switch for OBD scheduler;0 +Vc.Sc.Feh.B_HEP7;Debug LOS flags based on HEP7 specification;1 +Vc.Sc.Feh.B_HRE;Debug LOS flags based on HRE specification;0 +Vc.Obd.Cmn.B_CodeGenLtClntWcacT;Generate code for WCAC coolant temperature related monitors;0 +Vc.Obd.Cmn.B_CodeGenBoostT2;Generate code for Boost temperature 2 related monitors;0 +Vc.Obd.Cmn.B_CodeGenInitReq;Generate code for the init req flag function;1 +Vc.Obd.Cmn.B_CodeGenEcmInit;Generate code for the ECM init flag function;1 +Vc.Temp.StkM.B_CodeGenBoostT2;Activate temp stuck diag for boost temp 2;0 +Vc.Temp.StkM.B_CodeGenLtClntWcacT;Activate temp stuck diag for low temp WCAC cooling circuit;0 +Vc.Tc.Dir.B_CodeGenElectcPrndCtrl;Code gen to activate control of electronic PRND hw (e.g.TACM);0 +Vc.Obd.Cmn.B_CodeGenPowerPulseT;Generate code for Power pulse temperature related monitors;0 +Vc.Ign.B_CodeGen4CylLogic;Generate code for 4 cylinders in ignition and injection;0 +Vc.Ign.B_CodeGenPetrolEgr;Generate code for external EGR logic (Petrol);0 +Vc.Aes.DynPresM.B_CodeGenBst1AmbP;Generate code for comparison between Boost 1 and ambient pressure;0 +Vc.Aes.DynPresM.B_CodeGenBst2AmbP;Generate code for comparison between Boost 2 and ambient pressure;0 +Vc.Aes.DynPresM.B_CodeGenBst1Bst2P;Generate code for comparison between Boost 1 and boost2 pressure;0 +Vc.Aes.DynPresM.B_CodeGenBst2IntkMapP;Generate code for comparison between Boost 2 and intake map pressure;0 +Vc.Aes.DynPresM.B_CodeGenBst1IntkMapP;Generate code for comparison between Boost 1 and intake map pressure;0 +Vc.Aes.StatPresM.B_CodeGenAmbP;Generate code for ambient pressure key off monitor;0 +Vc.Aes.StatPresM.B_CodeGenBst1P;Generate code for boost 1 pressure key off monitor;0 +Vc.Aes.StatPresM.B_CodeGenBst2P;Generate code for boost 2 pressure key off monitor;0 +Vc.Aes.StatPresM.B_CodeGenIntkMapP;Generate code for intake map pressure key off monitor;0 +Vc.Aes.StatPresM.B_CodeGenExhaustP;Generate code for exhaust pressure key off monitor;0 +Vc.Aes.StatPresM.B_CodeGenElcmP;Generate code for ELCM pressure key off monitor;0 +Vc.Aes.TrboM.B_CodeGenBstPeak;Generate code for boost peak monitor;0 +Vc.Aes.TrboM.B_CodeGenTrboOverSpd;Generate code for turbo overspeed monitor;0 +Vc.Aes.LPEgrM.B_CodeGenLPEgrSysMon;Generate code for long route EGR flow monitor;0 +Vc.Aes.LPEgrM.B_CodeGenLPEgrClrMon;Generate code for long route EGR cooler monitor;0 +Vc.Aes.LPEgrM.B_CodeGenLPOverTempMon;Generate code for long route EGR overtemperature monitor;0 +Vc.Fuel.Ctrl.B_CodeGenHeatFu;Generate code for heat fuel function;0 +Vc.Aes.EgrM_B_CodeGenTotalEGRMon;Generate code for total Egr flow monitoring;0 +Vc.Ppm.Psm.B_CodegenKERS;Generate code for 48V power up/power down;0 +Vc.Fuel.Ctrl.B_CodeGenMonVap;Generate code for Monitor Vapor in high-pressure pump;0 +Vc.Aes.Vnt.B_CodeGenVntGvnr;VNT position controller (vacuum);0 +Vc.Aes.Osc.B_CodeGenOscr;Oscillator function for robustness tests;0 +Vc.Aes.Rx.B_CodeGenDrvModSignal;Use new Drive mode signal for AES;0 +Vc.Aes.Snsr.B_CodeGenMafBasCmp;MAF base compensation;0 +Vc.Aes.Snsr.B_CodeGenMafPlsCmp;MAF pulsation compensation;0 +Vc.Aes.Snsr.B_CodeGenIntkFil;Intake manifold pressure filter;0 +Vc.Aes.Snsr.B_CodeGenPresAdpn;Pressure adaptation from ambient at ignition;0 +Vc.Fuel.Ctrl.B_CodeGenFuDev;Generate code for Fuel Development;0 +Vc.Aes.B_CodeGenPredUpShift;Code switch for predicted gearshift function;0 +Vc.Tm.Af.B_CodeGenShttrSyncCtrl;Generate code synchronised shutter control.;1 +Vc.Tm.Af.B_CodeGenMapAirFlowCalcn;Generate code for calculating airflow through cooling via maps.;1 +Vc.Tm.Af.B_CodeGenLnrAirFlowCalcn;Generate code for calculating airflow through cooling via linear eq.;0 +Vc.Tm.Af.B_CodeGenShttrSeqCtrl;Generate code sequenced shutter control.;1 +Vc.Aes.B_CodeGenEChrgr;Generate code for Echarger;0 +Vc.Ppm.St.B_CodeGenIntIceStatus;Generate code for IceStatus;0 +Vc.Emi.Gpf.B_CodeGenSelIf;Code switch for input signal selection for Gpf;1 +Vc.Obd.Gpf.B_CodeGenSelIf;Code switch for input signal selection for Gpf monitor;1 +Vc.Aes.B_CodeGenCNDILA;Code switch for i-Art learning accl. and cetane num detection;0 +Vc.Aes.Ch.B_CodeGenThrMan;Code switch for manual throttle position maps;0 +Vc.Aes.Sp.B_CodeGenBoostSpMan;Code switch for manual boost pressure set point map;0 +Vc.Aes.Mo.B_CodeGenVirtSnsrCylAdj;Code switch for virtual sensor adjust;0 +Vc.Aes.Ps.B_CodeGenPresSpThr;Code switch for throttle closing by pressure ratio set-point for NVH;0 +Vc.Aes.TrboM.B_CodeGenLPPres;Code switch for reconfig of LP pressure sensor;0 +Vc.B_CodeGenOilTemp;Code switch for input oil temp signal;0 +Vc.B_UseVcTmTeExh;"Code switch for input exhaust temperature signals. 1 = signals from TmTeExh used; 0 = signals from AesTe used";0 +Vc.Aes.B_CodeGenEgrCoolr;Generate code for Egr cooler;0 +Vc.Aes.B_CodeGenWCAC;Generate code for WCAC applications;0 +Vc.Aes.Srg.B_CodeGenSrgOscDetn;Enable frequency homing oscillation detector;0 +Vc.Lam.B_CodeGenLVGAct;Code switch to activate LVG compensation of feed forward lambda;0 +Vc.Aes.Bc.B_CodeGenBaseMode5;Enable base mode 5;0 +Vc.Aes.Tc.B_CodeGenHPCmprByp;Code switch to activate HP compressor bypass;0 +Vc.Tm.Coorn.D_EngTyp;Engine type, 1:Gasoline 2:Diesel 3:Pure electric 4: Gasoline Hybrid;3 +Vc.Aes.B_CodeGenEgrLongRouteThrottle;Enable long route EGR throttle;0 +Vc.Aes.B_CodeGenEgrShortRoute;Enable short route EGR;0 +Vc.Aes.Egr.B_CodeGenEgrTra;Code switch to activate egr compensations for transients;0 +Vc.Aes.B_CodeGenCECP;Code switch on if torque/fuel functions are in SPM instead of supplier' SW.;0 +Vc.Aes.Bst.B_CodeGenCmprUsTe;Code switch to activate compressor upstream temperature model;0 +Vc.Aes.Thr.B_CodeGenThrStrt;Code switch to activate calculations of trottle start position;0 +Vc.B_UsesVcScDep_X_AccPedalPos;Switch between signals sVcDi_X_AccPed and sVcScDep_X_AccPedalPos for different projects;0 +Vc.Tm.Af_B_Legacy;Use Lagacy code in TmAf;0 +Vc.B_UseVcTmTeFuel;"Code switch for fuel temperature signals. 1 = signals from TmTeFuel used; 0 = Other signals";0 +Vc.Fuel.Tx.B_CodeGenBoschPetrol;Generate code for Bosch and Petrol systems;0 +Vc.Fuel.Tx.B_CodeGenDensoPetrol;Generate code for Denso and Petrol systems;0 +Vc.Fuel.Tx.B_CodeGenDensoDiesel;Generate code for Denso and Diesel systems;0 +Vc.Knk.Ctrl.BoschLogic;Enable logic for Bosch knock control;1 +Vc.Knk.Ctrl.DensoLogic;Enable logic for Denso knock control;0 +Vc.Fuel.Tx.B_CodeGenPetrol;Generate code for Petrol systems;0 +Vc.Oil.Pr.B_CylinderDeactivation;Generate code if cylinder deactivation is present;0 +Vc.Fuel.Tx.B_CodeCommonGen3Onward;Generate code for Function to be used from Gen3 and onward;0 +Vc.Aes.B_CodeGenCylDeactv;Generate code for cylinder deactivation;0 +Vc.Tm.Hcc.B_DualERAD;Project has Dual ERAD signals. Left/Right;0 +Vc.Tm.EdMon.B_ValveCheck;Code switch for valve check monitor in VcTmEdMon;0 +Vc.Tm.EdMon.B_PumpStart;Code switch for pump start monitor in VcTmEdMon;0 +Vc.Tm.Af.B_CodeGenFanLamStopEnbl;Code switch for enable the FanLamStopReq function in VcTmAf;1 +Vc.Tm.Af.B_CodeGenFanLamCityEnbl;Code switch for enable the FanLamCityReq function in VcTmAf;1 +Vc.Tm.Af.B_CodeGenFanVentnReqEna;Code switch for enable the FanVentnReq function in VcTmAf;1 +Vc.Inj.Prm.B_LateMassUpd;Late update of split injection mass, used in VEP4 GEN3;0 +Vc.Inj.Prm.B_InvCmpnDeltaT;Use negative delta t for CMP2 injection mode;0 +Vc.B_CodeGenVcSpGearRatio;VcSp gear ratios in VcConst;0 +Vc.CECP.B_PFI;Codeswitch for PFI logic in CECP;0 +Vc.B_DualDosing;Codeswitch for dual dosing;0 +Vc.Fsd.Pc.B_FTIV;Generate code, FTIV;0 +Vc.Fsd.Pc.B_FuAgeCalcn;Generate code, Fuel Age Calculation;0 +Vc.Fsd.Pc.B_FuAgeMonr;Generate code, Fuel Age Calculation;0 +Vc.Fsd.Pc.B_RunDryDetn;Generate code, Run Dry Detection;0 +Vc.Fsd.Pc.B_FuPmpRunReq;Generate code, Fuel Pump Run Req for Gen3;0 +Vc.Trsm.ShfShkMon.B_TipActvSw;Codeswitch for enable Shift Shock Detection in Tip Mode ;0 +Vc.Ppm.Hvem.B_BevVeh;Code switch for BEV functionlality;1 +Vc.Ppm.Hvem.B_VFCCtrl;Code switch for SPM control VFC;1 +Vc.Ppm.Hvem.B_HvCurrOBC;Code switch for hv current calculation for OBC;1 +Vc.Ppm.Hvem.B_PwrAndEgyCalc;Code switch for power and energy calculations for thermal;1 +Vc.Ppm.Psm.B_StartTest;Codeswitch for enabling StartTest used for faulttracing;0 +Vc.Tm.Coorn.B.UseVcFiFsLinBypVlv;Codeswitch for enable VcFiFsLinBypVlv Fifs from diagnostics;0 +Vc.Tm.AfReq.B.UseVcFiFsMinAirFlowReq;Codeswitch for enable VcFiFsMinAirFlowReq Fifs from diagnostics;0 +Vc.Aes.B_CodeGenEgrLrCoolrClng;Generate code for EGR LR cooler cleaning;0 +Vc.Fsd.Pc.B_Uboost;Generate code, Voltage Boost;0 +Vc.Ppm.Sw.B_HvSystem;Project includes high voltage system;1 +Vc.CECP.B_InjQuickReco;Codeswitch for quick injection recovery;0 +Vc.Purg.B_PrgPmp;Code switch for systems with purge pump;0 +Vc.Dcl.Cvc.B_DownShiftAtHighTemp;Down shift at high temp;0 +Vc.Dcl.Cvc.B_TrqDecToProtGearBox;Gear box safety systems;0 +Vc.Tm.Af.B_UseVehTyp;Project uses multiple vehicle types;0 +Vc.Dcl.Cvc.B_MainTipMode_1s;Main mode tip;0 +Vc.Pvc.Hw.B_Petrol;Project includes petrol engine;0 +Vc.Pvc.Hw.B_Diesel;Project includes diesel engine;0 diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup_Thermal.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup_Thermal.csv new file mode 100644 index 0000000..7bc6292 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CSP_Codeswitch_Setup_Thermal.csv @@ -0,0 +1,31 @@ +Switch name;Description;CSP_Thermal +Vc.Pvc.Hw.B_Efad;Project includes Efad;1 +Vc.Pvc.Hw.B_Erad;Project includes Erad;1 +Vc.Pvc.Hw.B_Isg;Project includes Isg;0 +Vc.Pvc.Hw.B_HVSystem;Project includes high voltage system;1 +Vc.Pvc.Hw.B_MVSystem;Project includes medium voltage system;0 +Vc.Pvc.Hw.B_MT;Project includes manual transmission;0 +Vc.Pvc.Hw.B_AT;Project includes automatic transmission;0 +Vc.Pvc.Hw.B_DualClutchGbx;Project includes dual clutch;0 +Vc.Pvc.Hw.B_EClutch;Project includes E-clutch;0 +Vc.Pvc.Hw.B_ManualClutch;Project includes manual clutch;0 +Vc.Pvc.Hw.B_TqConverterGbx;Project includes torque converter;0 +Vc.Pvc.Hw.B_12VStartMotor;Project includes 12V start motor;0 +Vc.Pvc.Hw.B_Petrol;Project includes petrol engine;0 +Vc.Pvc.Hw.B_Diesel;Project includes diesel engine;0 +Vc.Pvc.Hw.B_RangeExtender;Project includes range extender;0 +Vc.Pvc.Hw.B_Awd;Project includes mechanical AWD;0 +Vc.Pvc.Sw.B_StopStart;Project includes start stop functionality;0 +Vc.Pvc.Sw.B_IdleCoast;Project includes idle coast functionality;0 +Vc.Pvc.Hw.B_DualErad;Project includes two Erad;0 +Vc.Pvc.Hw.B_VeaGen1;Project includes VEA gen1 engine;0 +Vc.Pvc.Hw.B_VeaGen2;Project includes VEA gen2 engine;0 +Vc.Pvc.Hw.B_VeaGen3;Project includes VEA gen3 engine;0 +Vc.Pvc.Hw.B_Gep3Gen1;Project includes GEP3 gen1 engine;1 +Vc.Pvc.Hw.B_Bev;Project includes battery electric vehicle (BEV);1 +Vc.Pvc.Hw.B_Tacm;Project includes Tacm actuator;0 +Vc.Pvc.Hw.B_Bosch;Project includes a Bosch ECM ;1 +Vc.Pvc.Hw.B_Denso;Project includes a Desno ECM ;0 +Vc.Pvc.Sw.B_OnePedalmapPerGear;Project includes one pedalmap per gear;0 +Vc.Pvc.Hw.B_HRE;Project includes Horizon Range Extender;0 +Vc.Pvc.Sw.B_Gstr;Project includes new Torque interface with AW;0 diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_EventIDs.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_EventIDs.csv new file mode 100644 index 0000000..a69e837 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_EventIDs.csv @@ -0,0 +1,4 @@ +;;;;;PROJECTS;; +Model name;Event Id Name;Description;Controlling FiD;Comments;PvcDemo;CSP_CATC;Old Id +VcTdTOffsM;VcEvAmbTOffsHi;Ambient temperature sensor offset high;-;;;x; +;VcEvAmbTOffsLo;Ambient temperature sensor offset low;-;;;x; diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_FunctionIDs.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_FunctionIDs.csv new file mode 100644 index 0000000..afe8269 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_FunctionIDs.csv @@ -0,0 +1,581 @@ +;;;;PROJECTS; +Model name;Function Id Name;Description;Comments;ClimCtr;Old Id +VcAesObd;VcFiAmbPCompPlausMon;VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off);;;ATPR +VcAesObd;VcFiCacPCompPlausMon;VcFi for CAC Pressure Rationality Monitor (comparison to other sensor at eng off);;;CACPR +VcAesObd;VcFiExhMnfldPCompPlausMon;VcFi for Exhaust Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);;;EXHMPDR +VcAesObd;VcFiIntkMnfldPCompPlausMon;VcFi for Intake Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);;;MAPIMPDR +VcAesObd;VcFiScPCompPlausMon;VcFi for Supercharger Pressure Rationality Monitor (comparison to other sensor at eng off);;;SCPR +VcAesObd;VcFiScPAmbPPlausMon;VcFi for SC Pressure Sensor diff vs Ambient Pressure Sensor Rationality Monitor;;;SCPAMBP +VcAesObd;VcFiCacPAmbPPlausMon;VcFi for CAC Pressure Sensor diff vs Ambient pressure sensor rationality monitor;;;CACPAMBP +VcAesObd;VcFiCacPIntkPPlausMon;VcFi for CAC pressure sensor vs Intake Manifold Pressure Diff Rationality Monitor;;;CACPINTK +VcAesObd;VcFiIntkMnfldPMdlPlausMon;VcFi for Intake Manifold Rationality Monitor (comparison to model);;;MAPR +VcAesMapM;VcFiIntkMnfldPMdlPlausMon;VcFi for Intake Manifold Rationality Monitor (comparison to model);;;MAPR +VcAesObd;VcFiIntkMnfldFlwMdlPlausMon;VcFi for MAF Rationality Monitor;;;MAFR +VcAesObd;VcFiPCVLeakMon;VcFi for PCV Leakage monitor;;; +VcAesObd;VcFiFsAbvOpen;VcFi for opening turbo compressor Air Bypass Valve;;;FS_ABVOP +VcAesObd;VcFiFsMafCorrInh;VcFi for inhibition of air flow mass meter correction;;;FS_AFCIN +VcAesObd;VcFiFsBoostPCorrInh;VcFi for inhibition of boost pressure correction;;;FS_BCRIN +VcAesObd;VcFiFsWstGateOpen;VcFi for opening waste gate (boost pressure off);;;FS_BSOFF +VcAesObd;VcFiFsEgrOff;VcFi for turning off EGR control and closing the EGR-valve;;;FS_EGROF +VcAesObd;VcFiFsExhMnfldPCorr;VcFi for inhibition of exhaust manifold pressure correction;;;FS_EPCIN +VcAesObd;VcFiFsMafLrngOff;VcFi for inhibiting use of MAF learning;;; +VcAesObd;VcFiFsAfCorrInh;VcFi for A/F Correction Inhibition;;;FS_FLCIN +VcAesObd;VcFiFsHpTrboBypOpen;VcFi for opening HP bypass;;;FS_HPBOP +VcAesObd;VcFiFsAirFlwCorrInc;VcFi for Increase air flow correction limits;Skall denna vara med i GEP3?;;FS_IAFCL +VcAesObd;VcFiFsIntkMnfldPCorrInh;VcFi for inhibition of intake manifold pressure correction;;;FS_IPCIN +VcAesObd;VcFiFsScBypOpen;VcFi for turning off supercharger and opening supercharger bypass valve;;;FS_SCBYO +VcAesObd;VcFiFsScPUseDftVal;VcFi for Inhibit use of SC pressure sensor (use ambient);;;FS_SCPIN +VcAesObd;VcFiFsEgrFrzn;VcFi to indicate frozen EGR in cold condition;Här kanske vi borde kalla fiden för vad den gör, isf vid vilket fel den aktiveras!;;FS_SPR3 +VcAesObd;VcFiFsThrAdpInhAdp;VcFi for inhibiting throttle adaptation;;;FS_TADPI +VcAesObd;VcFiFsThrCtrlOff;VcFi for turning off throttle control and make the throttle to go to it's limp home position;;;FS_THOFF +VcAesObd;VcFiFsThrServoModelOff;VcFi for using measured throttle position instead of throttle servo model;;;FS_THROF +VcAesObd;VcFiFsTrqLimFastActv;VcFi for activating fast ramping in of torque limit;;;FS_TQLFS +VcAesObd;VcFiFsTrqLimActv1;VcFi for activating torque limit 1;;;FS_TRQL1 +VcAesObd;VcFiFsTrqLimActv2;VcFi for activating torque limit 2;;;FS_TRQL2 +VcAesObd;VcFiFsTrqLimActv3;VcFi for activating torque limit 3;;;FS_TRQL3 +VcAesObd;VcFiFsTrqLimActv4;VcFi for activating torque limit 4;;;FS_TRQL4 +VcAesObd;VcFiFsTrqLimActv5;VcFi for activating torque limit 5;;;FS_TRQL5 +VcAesObd;VcFiFsTrqLimActv6;VcFi for activating torque limit 6;;;FS_TRQL6 +VcAesObd;VcFiFsTrqLimActv7;VcFi for activating torque limit 7;;;FS_TRQL7 +VcAesObd;VcFiFsVntOpen;VcFi for opening VNT;;;FS_VNTOP +VcAesRcfgM;VcFiFsAbvOpen;VcFi for opening turbo compressor Air Bypass Valve;;;FS_ABVOP +VcAesRcfgM;VcFiFsMafCorrInh;VcFi for inhibition of air flow mass meter correction;;;FS_AFCIN +VcAesRcfgM;VcFiFsMafLrngOff;VcFi for inhibiting use of MAF learning;;; +VcAesRcfgM;VcFiFsBoostPCorrInh;VcFi for inhibition of boost pressure correction;;;FS_BCRIN +VcAesRcfgM;VcFiFsWstGateOpen;VcFi for opening waste gate (boost pressure off);;;FS_BSOFF +VcAesRcfgM;VcFiFsEgrOff;VcFi for turning off EGR control. To be used for system failures.;;;FS_EGROF +VcAesRcfgM;VcFiFsExhMnfldPCorr;VcFi for inhibition of exhaust manifold pressure correction;;;FS_EPCIN +VcAesRcfgM;VcFiFsAfCorrInh;VcFi for A/F Correction Inhibition;;;FS_FLCIN +VcAesRcfgM;VcFiFsHpTrboBypOpen;VcFi for opening HP bypass;;;FS_HPBOP +VcAesRcfgM;VcFiFsAirFlwCorrInc;VcFi for Increase air flow correction limits;Skall denna vara med i GEP3?;;FS_IAFCL +VcAesRcfgM;VcFiFsIntkMnfldPCorrInh;VcFi for inhibition of intake manifold pressure correction;;;FS_IPCIN +VcAesRcfgM;VcFiFsScBypOpen;VcFi for turning off supercharger and opening supercharger bypass valve;;;FS_SCBYO +VcAesRcfgM;VcFiFsScPUseDftVal;VcFi for Inhibit use of SC pressure sensor (use ambient);;;FS_SCPIN +VcAesRcfgM;VcFiFsSrEgrFrzn;VcFi to indicate frozen SR EGR valve in cold condition;;;FS_SPR3 +VcAesRcfgM;VcFiFsLrEgrFrzn;VcFi to indicate frozen LR EGR valve in cold condition;;;FS_SPR3 +VcAesRcfgM;VcFiFsThrAdpInhAdp;VcFi for inhibiting throttle adaptation;;;FS_TADPI +VcAesRcfgM;VcFiFsThrCtrlOff;VcFi for turning off throttle control and make the throttle to go to it's limp home position;;;FS_THOFF +VcAesRcfgM;VcFiFsThrServoModelOff;VcFi for using measured throttle position instead of throttle servo model;;;FS_THROF +VcAesRcfgM;VcFiFsTrqLimFastActv;VcFi for activating fast ramping in of torque limit;;;FS_TQLFS +VcAesRcfgM;VcFiFsTrqLimActv1;VcFi for activating torque limit 1;;;FS_TRQL1 +VcAesRcfgM;VcFiFsTrqLimActv2;VcFi for activating torque limit 2;;;FS_TRQL2 +VcAesRcfgM;VcFiFsTrqLimActv3;VcFi for activating torque limit 3;;;FS_TRQL3 +VcAesRcfgM;VcFiFsTrqLimActv4;VcFi for activating torque limit 4;;;FS_TRQL4 +VcAesRcfgM;VcFiFsTrqLimActv5;VcFi for activating torque limit 5;;;FS_TRQL5 +VcAesRcfgM;VcFiFsTrqLimActv6;VcFi for activating torque limit 6;;;FS_TRQL6 +VcAesRcfgM;VcFiFsTrqLimActv7;VcFi for activating torque limit 7;;;FS_TRQL7 +VcAesRcfgM;VcFiFsVntOpen;VcFi for opening VNT;;;FS_VNTOP +VcAesRcfgM;VcFiFsPowerPulse;VcFi for power pulse failsafe;;;FS_PowerPulse +VcAesRcfgM;VcFiFsPowerPulseRly1;VcFi for failsafe power pulse relay 1 stuck;;;FS_PowerPulseRly1 +VcAesRcfgM;VcFiFsPowerPulseRly2;VcFi for failsafe power pulse relay 2 stuck;;;FS_PowerPulseRly2 +VcAesRcfgM;VcFiFsEgrTest;VcFi for individual testing of EGR system;;; +VcAesRcfgM;VcFiFSEChrgrOff;VcFi for turning off Echarger control;;; +VcAesRcfgM;VcFiFsEgrTPeak;VcFi to change sensitivity for intake temp peak monitor;;; +VcAesRcfgM;VcFiFsLPBoostPCorrInh;VcFi to inhibit use of LP boost sensor;;; +VcAesRcfgM;VcFiFsLpEgrThrS;VcFi to indicate faults on LP EGR throttle position sensor and initiate reconfiguration of the throttle;;; +VcAesRcfgM;VcFiFsLpEgrThrV;VcFi to indicate faults on LP EGR throttle actuator and initiate reconfiguration of EGR control;;; +VcAesRcfgM;VcFiFsLpEgrS;VcFi to indicate faults on the LP EGR valve position sensor and initiate reconfiguration of EGR control;;; +VcAesRcfgM;VcFiFsLpEgrV;VcFi to indicate faults on the LP EGR valve actuator and initiate reconfiguration of EGR control;;; +VcAesRcfgM;VcFiFsHpEgrS;VcFi to indicate faults on the HP EGR valve position sensor and initiate reconfiguration of EGR control;;; +VcAesRcfgM;VcFiFsHpEgrV;VcFi to indicate faults on the HP EGR valve actuator and initiate reconfiguration of EGR control;;; +VcAesRcfgM;VcFiFsHpCmprBypOpen;VcFi for opening HP compressor bypass;;; +VcAesRcfgM;VcFiFsHPVntOpen;VcFi for opening HP VNT;;; +VcAesTrboM;VcFiBoostPeakMon;VcFi for Boost Pressure Pressure Peak Monitor;;;BSTPEAK +VcAesTrboM;VcFiBoostPPlausMon;VcFi for Boost Pressure Rationality Monitor;;;BSTR +VcAesTrboMg3;VcFiBoostPeakMon;VcFi for Boost Pressure Pressure Peak Monitor;;;BSTPEAK +VcAesTrboMg3;VcFiBoost2PeakMon;VcFi for Boost 2 Pressure Pressure Peak Monitor;;; +VcAesTrboMg3;VcFiBoostPPlausMon;VcFi for Boost Pressure Rationality Monitor;;;BSTR +VcAesTrboMg3;VcFiBoostPeakHPUsMon;VcFi for Boost Peak Pressure Monitor HP Upstream or E-Charger upstream;;; +VcAesTrboMg3;VcFiBoostHpCmprBypStkOpen;VcFi for HP compressor bypass stuck open;;; +VcFsdPc;VcFiFsPEMRunDryMon;VcFi for activation of run dry monitor;Varför finns det inget event till denna monitor?;;FS_PEM1 +VcOilLvl;VcFiOilLvlMon;VcFi for Oil level monitor;;;OILLV +VcOilPrMon;VcFiOilPrMon;VcFi for Oil pressure rationality monitor;;;OILP +VcOilPrMon;VcFiOilPrMonOffs;VcFi for Oil pressure offset test rationality monitor;;;OILPOFFS +VcOilPrMon;VcFiFsOilPSnsrInhUse;Request to inhibit use of pressure sensor;;;FS_OILPC +VcOilPrMon;VcFiFsOilTSnsrInhUse;Request to inhibit use of oil temp. sensor;;;FS_OPTST +VcOilPrMon;VcFiOilPmpStckMon;VcFi for Oil pump solenoid stuck monitor;;; +VcPpmImob;VcFiImmo;Diagnostics: Function identifier for Imobiliser. [0 65535], Default=10;;x; +VcTcDir;VcFiFsActrChgOfDirNotPsbl;Lost com on CAN for Tacm;Är denna funktionen bara för hybrid? Uppdatera kommentarerna till något bättre;x; +VcTcDir;VcFiFsMsgChgOfDirNotPsbl;Lost commuincation on LIN from EGSM node.;Är denna funktionen bara för hybrid?;x; +VcTcDir;VcFiFsDrvrInpDirNotPsbl;Lost commuincation on CAN from EGSM node.;Är denna funktionen bara för hybrid?;x; +VcTmAf;VcFiFsAirCoolgFlowSafe;VcFi to compensate for broken coolant temp sensor;;x;FS_AirCoolgFlowSafe +VcTmAf;VcFiFsAirCoolgLimHi;VcFi activate if engine cooling fan is faulty.;;x;FS_AirCoolgFlowLimHi +VcTmAf;VcFiFsAirCoolgLimLowr;VcFi to compensate for broken spoiler shutter;;x;FS_AirCoolgFlowLimLo +VcTmAf;VcFiFsAirCoolgLimUppr;VcFi to compensate for broken grill shutter;;x;FS_AirCoolgFlowLimMed +VcTmAf;VcFiFsEngFanRlyRels;VcFi to release fan relay;;x;FS_EngFanRlyRels +VcTmHcc;VcFiFsEdClntPmp;VcFi for reconfiguration of electric drive coolant pump;;x;RCPC +VcTmHcc;VcFiFsEdClntFlwEstClsdTh;VcFi for reconfiguration estimated electric drive coolant flow closed thermostat ;;x;RECFC +VcTmHcc;VcFiFsEdClntFlwEstOpenTh;VcFi for reconfiguration estimated electric drive coolant flow open thermostat ;;x;RECFO +VcTmHcc;VcFiFsEdClntT;VcFi for reconfiguration of electric drivetrain coolant temperature;;x;RMEDT +VcTmHcc;VcFiFsEdClntPmpMaxFlw;VcFi for reconfiguration set max electric drive coolant flow;SDCF - vilket coolant flow är detta?;x;SDCF +VcTmHcc;VcFiFsEdClntPmpMaxSpd;VcFi for reconfiguration to maximum electric drive pump speed;vilken coolant pump?;x;SMPS +VcTmHcc;VcFiFsEdFanShutOff;VcFi for reconfiguration to shutoff electric drive fan request;SOFR - vilken fläkt? Electric Drivetrain?;x;SOFR +VcEmiCatM;VcFiCatMon;Function Id for catalyst monitor;;; +VcEmiOscM;VcFiCatalystO2StorageMon;Function Id for catalyst monitor;;; +VcEmiAdpM;VcFiSecO2AdpMon;Function Id for secondary fuel trim monitor;;; +VcEmiPlsM;VcFiSecO2SnsrPlausMon;Function Id for secondary oxygen sensor plausability monitor;;; +VcLamDynCcM;VcFiPrimO2SnsrSlowRespMon;Function ID for front lambda sensor slow response;;; +VcLamAdpM;VcFiLamAdpMon;Function ID for Fueltrim;;; +VcEmiCtrl;VcFiFsEmiCtrlFbInh;VcFi for inhibition of Hego feedback emission control;;;FS_SFBA +VcEmiOvlp;VcFiFsEmiOvlpInh;VcFi for inhibition of emission requests forVVT overlap;;;FS_OVLFC +VcLamDyn;VcFiFsLamCtrlInh;VcFi for inhibition of lambda feedback control;;x;FS_AFA +VcInjMode;VcFiFsInjModeHom;VcFi for reconfiguration to single intake injection mode;Samtliga dessa gamla failsafe ( inklusive de som skapades i Densos CM_HPSysFS och FI_StaInjDly) skall sätta denna failsafe;x;FS_HOMOG, Ycm_HPSysFS_FS_HPSYSHI, Ycm_HPSysFS_FS_STINJ, Yfi_StaInjDly_STINJ_StaInFact +VcLamDyn;VcFiFsCmnStaFuCutPCndInh;VcFi for inhibition of fuel pressure condition to enable start injections;;x;Ycm_HPSysFS_FS_STINJ, Yfi_StaInjDly_STINJ_StaInFact +VcCmnRunReqCEC;VcFiFsStopStartInh;VcFi for inhibition of stop start function;;;FS_ISS +VcObdCmn;VcFiFsOilTOutOfRange;VcFi to inhibit average oil temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsBstTOutOfRange;VcFi to inhibit average boost temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsClntTOutOfRange;VcFi to inhibit average coolant temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsInManiTOutOfRange;VcFi to inhibit average intake manifold temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsAmbTOutOfRange;VcFi to inhibit average ambient temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsIntkAirTOutOfRange;VcFi to inhibit average intake air temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsBstT2OutOfRange;VcFi to inhibit average boost temperature 2 calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsLtClntWcacTOutOfRange;VcFi to inhibit average LT wcac coolant temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsPowerPulseTOutOfRange;VcFi to inhibit average power pulse temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsEChargerTOutOfRange;VcFi to inhibit average ECharger temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsWcacUsAirTOutOfRange;VcFi to inhibit average WCAC upstream air temperature calculation if the sensor value is out of range;;; +VcObdCmn;VcFiFsLPFuelTOutOfRange;VcFi to inhibit average LP fuel temperature calculation if the sensor value is out of range;;; +VcTempKohlM;VcFiFsAmbTRcfg;VcFi for reconfiguration to replacement value of Ambient temperature;;;FS_AMBT +VcTempKohlM;VcFiFsIntkAirTRcfg;VcFi for reconfiguration to replacement value of Intake air temperature;;;FS_IAT2 +VcTempKohlM;VcFiFsBstTRcfg;VcFi for reconfiguration to replacement value of Boost air temperature;;;FS_BAT +VcTempKohlM;VcFiFsClntTRcfg;VcFi for reconfiguration to replacement value of Engine coolant temperature;;;FS_ECT +VcTempKohlM;VcFiFsOilTRcfg;VcFi for reconfiguration to replacement value of Oil temperature;;;FS_OILT +VcTempKohlM;VcFiFsInManiTRcfg;VcFi for reconfiguration to replacement value of Intake manifold air temperature;;;FS_MAT +VcTempKohlM;VcFiFsCisgTRcfg;VcFi for reconfiguration to replacement value of Crank ISG temperature;;;FS_CISG +VcTempKohlM;VcFiFsLtClntWcacTRcfg;VcFi for reconfiguration to replacement value of coolant temperature in the LT wcac circuit;;; +VcTempKohlM;VcFiFsPowerPulseTRcfg;VcFi for reconfiguration to replacement value of the Power pulse temperature;;; +VcTempKohlM;VcFiFsEChargerTRcfg;VcFi for reconfiguration to replacement value of the ECharger temperature;;; +VcTempKohlM;VcFiFsWcacUsAirTRcfg;VcFi for reconfiguration to replacement value of the WCAC upstream air temperature;;; +VcTempKohlM;VcFiFsLPFuelTRcfg;VcFi for reconfiguration to replacement value of the LP fuel temperature;;; +VcTempKohlM;VcFiAmbTKohlM;VcFi for offset monitor of the ambient air temperature sensor;;;KOAMBT +VcTempKohlM;VcFiIntkAirTKohlM;VcFi for offset monitor of the intake air temperature sensor;;;KOIAT +VcTempKohlM;VcFiBstTKohlM;VcFi for offset monitor of the boost air temperature sensor;;;KOBAT +VcTempKohlM;VcFiClntTKohlM;VcFi for offset monitor of the engine coolant temperature sensor;;;KOECT +VcTempKohlM;VcFiOilTKohlM;VcFi for offset monitor of the oil temperature sensor;;;KOOILT +VcTempKohlM;VcFiInManiTKohlM;VcFi for offset monitor of the intake manifold air temperature sensor;;;KOMAT +VcTempKohlM;VcFiCisgTKohlM;VcFi for offset monitor of the Crank ISG temperature sensor;;;KOCISG +VcTempKohlM;VcFiBstT2KohlM;VcFi for offset monitor of the boost air temperature sensor 2;;; +VcTempKohlM;VcFiLtClntWcacTKohlM;VcFi for offset monitor of the coolant temperature sensor in the LT wcac circuit;;; +VcTempKohlM;VcFiPowerPulseTKohlM;VcFi for offset monitor of the power pulse temperature sensor;;; +VcTempKohlM;VcFiEChargerTKohlM;VcFi for offset monitor of the ECharger temperature sensor;;; +VcTempKohlM;VcFiLPFuelTKohlM;VcFi for offset monitor of the LP fuel temperature sensor;;; +VcTempKohlM;VcFiWcacUsAirTKohlM;VcFi for offset monitor of the WCAC upstream air temperature sensor;;; +VcTempStkM;VcFiBstTStkM;VcFi for stuck in range monitor of the boost air temperature sensor;;;BATD +VcTempStkM;VcFiClntTStkM;VcFi for stuck in range monitor of the engine coolant temperature sensor;;;CLTD +VcTempStkM;VcFiIntkAirTStkM;VcFi for stuck in range monitor of the intake air temperature sensor;;;IATD +VcTempStkM;VcFiInManiTStkM;VcFi for stuck in range monitor of the intake manifold air temperature sensor;;;MATD +VcTempStkM;VcFiBstT2StkM;VcFi for stuck in range monitor of the boost air temperature sensor 2;;; +VcTempStkM;VcFiLtClntWcacTStkM;VcFi for stuck in range monitor of the coolant temperature sensor in the LT wcac circuit;;; +VcTempStkM;VcFiPowerPulseTStkM;VcFi for stuck in range monitor of the power pulse temperature sensor;;;PPTD +VcTempStkM;VcFiEChrgrTStkM;VcFi for stuck in range monitor of the Echarger temperature sensor;;; +VcTempStkM;VcFiOilTStkM;VcFi for stuck in range monitor of the Oil temperature sensor;;; +VcTempStkM;VcFiLPFuelTStkM;VcFi for stuck in range monitor of the LP fuel temperature sensor;;; +VcTempStkM;VcFiWcacUsAirTStkM;VcFi for stuck in range monitor of the WCAC upstream air temperature sensor;;; +VcTempThM;VcFiThM;VcFi for thermostat monitor;;;THMS +VcTempThContnsM;VcFiThContnsM;VcFi for continuous thermostat monitor;;; +VcAesObd;VcFiFsPowerPulse;VcFi for power pulse failsafe;;;FS_PowerPulse +VcAesObd;VcFiExhtMnfPMon;VcFi for exhaust manifold pressure rationality monitor;;;EXHPR +VcAesExhMnfPM;VcFiExhtMnfPMon;VcFi for exhaust manifold pressure rationality monitor;;;EXHPR +VcAesTrboM;VcFiPpValveStk;VcFi for power pulse valve stuck closed monitor;;;PPVSTK +VcAesTrboM;VcFiPpLk;VcFi for power pulse leakage monitor;;;PPLK +VcAesTrboM;VcFiPpSmlLk;VcFi for power pulse small leakage monitor;;;PPSMLK +VcAesPpM;VcFiPpValveStk;VcFi for power pulse valve stuck closed monitor;;;PPVSTK +VcAesPpM;VcFiPpLk;VcFi for power pulse leakage monitor;;;PPLK +VcAesPpM;VcFiPpSmlLk;VcFi for power pulse small leakage monitor;;;PPSMLK +VcAesTrboM;VcFiVntAdp;VcFi for vacuum VNT adaption monitor;;;VNTDP +VcAesVntM;VcFiVntAdp;VcFi for vacuum VNT adaption monitor;;;VNTDP +VcAesEgrM;VcFiEgrSysMon;VcFi for EGR system monitor;;; +VcAesEgrM;VcFiEgrAr;VcFi for SR EGR flow monitor;;;EGRAR +VcAesEgrM;VcFiEgrClrMnr;VcFi for EGR cooler monitor;;;EGRCLRR +VcAesEgrM;VcFiEgrIntkTPeak;VcFi for intake air temperature peak monitor;;;INTKPEAK +VcAesSupM;VcFiSupChrPMdlPlausHi;VcFi for Supercharger Pressure Rationality Monitor High (Target vs. Actual);;; +VcAesSupM;VcFiSupChrPMdlPlausLo;VcFi for Supercharger Pressure Rationality Monitor Low (Target vs. Actual);;; +VcAesSupM;VcFiSupChrPPeak;VcFi for supercharger pressure too high monitor;;; +VcAesSupM;VcFiSupChrStuck;VcFi for supercharger clutch stuck monitor;;; +VcNoxSensMgr;VcFiNOxSensUsVoltageDiag;Inhibit voltage diag;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsProbeLnDiag;Inhibit probe line diag (incl. Heater line);Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsSRC;Inhibit SRC;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsHeaterDiag;Inhibit heater diag;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsMountingDiag;Inhibit mounting diag;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsAvailabilityDiag;Inhibit availability diag;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsReadinessDiag;Inhibit readiness diag;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensUsCurveDiagA;Inhibit curve diag A;Upstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensUsError;Failsafe for transition to error state;Upstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensUsFreezeNOx;Failsafe for freezing NOx value;Upstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensUsFreezeLambda;Failsafe for freezing lambda value;Upstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensUsModelNOx;Failsafe for using modeled Nox instead of sensor value;Upstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensUsModelLambda;Failsafe for using modeled lambda instead of sensor value;Upstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsVoltageDiag;Inhibit voltage diag;Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsProbeLnDiag;Inhibit probe line diag (incl. Heater line);Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsSRC;Inhibit SRC;Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsHeaterDiag;Inhibit heater diag;Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsMountingDiag;Inhibit mounting diag;Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsAvailabilityDiag;Inhibit availability diag;Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsReadinessDiag;Inhibit readiness diag;Downstream sensor;; +VcNoxSensMgr;VcFiNOxSensDsCurveDiagA;Inhibit curve diag A;Downstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensDsError;Failsafe for transition to error state;Downstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensDsFreezeNOx;Failsafe for freezing NOx value;Downstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensDsFreezeLambda;Failsafe for freezing lambda value;Downstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensDsModelNOx;Failsafe for using modeled Nox instead of sensor value;Downstream sensor;; +VcNoxSensMgr;VcFiFsNOxSensDsModelLambda;Failsafe for using modeled lambda instead of sensor value;Downstream sensor;; +VcDrvInd;VcFiDrvInd;Inhibit VcDrvInd;SCR Inducement monitor;; +VcDrvInd;VcFiFsDrvInd;Failsafe to inhibit start at full inducement;SCR Inducement monitor;; +VcAesTrboM;VcFiPpLkExh;VcFi for power pulse leak to exhaust monitor;;;PPVSTKO +VcAesPpM;VcFiPpLkExh;VcFi for power pulse leak to exhaust monitor;;;PPVSTKO +VcIgnCut;VcFiFsIgnInh;VcFi for inhibition of ignition;;;Yim_Result_IgnitionPermit +VcVVTiTar;VcFiFsVVTiTestSw;VcFi for switching to a test position for inlet VVT;;; +VcVVTiTar;VcFiFsVVTiTestPos;VcFi for setting a test position for inlet VVT;;; +VcVVTeTar;VcFiFsVVTScav;VcFi for allowing Scavanging;;; +VcVVTeTar;VcFiFsVVTeTestSw;VcFi for switching to a test position for exhaust VVT;;; +VcVVTeTar;VcFiFsVVTeTestPos;VcFi for setting a test position for exhaust VVT;;; +VcProtNe;VcFiFsEngSpdLimn1;VcFi for lowered rev limit level 1;;;FS_NE +VcProtNe;VcFiFsEngSpdLimn2;VcFi for lowered rev limit level 2;;;LimpMode=3 (Crankgivarfel) +VcInjFuCut;VcFiFsFuCutCyl1;VcFi for cylinder individual fuel cut off on cylinder 1;;;FS_FC1…4 additional to Bosch signal yVcEc_B_MisfFuCutCyl2 +VcInjFuCut;VcFiFsFuCutCyl2;VcFi for cylinder individual fuel cut off on cylinder 2;;; +VcInjFuCut;VcFiFsFuCutCyl3;VcFi for cylinder individual fuel cut off on cylinder 3;;; +VcInjFuCut;VcFiFsFuCutCyl4;VcFi for cylinder individual fuel cut off on cylinder 4;;; +VcObdDpms;VcFiDpmsTPlaus;Key on check of temperature meander;;;DpmsTPlaus +VcObdDpms;VcFiDpmsProtTubePlaus;Detection of clogged protection tube;;;DpmsProtTubePlaus +VcObdDpms;VcFiDpmsHtrPlaus;Heater plausibility check;;;DpmsHtrPlaus +VcObdDpms;VcFiDpmsIDEPlaus;IDE plausibility check;;;DpmsIDEPlaus +VcObdDpms;VcFiDpmsShntCircPlaus;IDE shunt circuit plausibility check;;;DpmsShntCircPlaus +VcObdDpms;VcFiDpmsBattDiff1;Diff between system voltage and sensor voltage during high load;;;DpmsBattDiff1 +VcObdDpms;VcFiDpmsBattDiff2;Diff between system voltage and sensor voltage;;;DpmsBattDiff2 +VcObdDpms;VcFiDpmsBattElec;Sensor self diagnosis, battery voltage error;;;DpmsBattElec +VcObdDpms;VcFiDpmsCanTO;Sensor self diagnosis, CAN TimeOut;;;DpmsCanTO +VcObdDpms;VcFiDpmsHtrOffElec;Sensor self diagnosis, heater error in off state;;;DpmsHtrOffElec +VcObdDpms;VcFiDpmsTElec;Sensor self diagnosis, temperature meander error;;;DpmsTElec +VcObdDpms;VcFiDpmsIDENegElec;Sensor self diagnosis, IDE negative current error;;;DpmsIDENegElec +VcObdDpms;VcFiDpmsHtrOnElec;Sensor self diagnosis, heater error in on state;;;DpmsHtrOnElec +VcObdDpms;VcFiDpmsIDEPosElec;Sensor self diagnosis, IDE positive current error;;;DpmsIDEPosElec +VcObdDpfDpms;VcFiDPFPerfDpms;DPF soot filtration efficiency below threshold Soot Sensor ;;;DPFPERF +VcObdDpf;VcFiDPFPerfDP;DPF soot filtration efficiency below threshold DP-sensor;;; +VcObdDpms;VcFiPMSnsrCanComFail;Sensor self diagnosis, PM sensor CAN communication failure;;; +VcObdDpms;VcFiPMSnsrCtrlModPerf;Sensor self diagnosis, PM sensor control module performance;;; +VcObdDpms;VcFiPMSnsrSuppVoltHi;Sensor self diagnosis, PM sensor control module supply voltage low;;; +VcObdDpms;VcFiPMSnsrSuppVoltLo;Sensor self diagnosis, PM sensor control module supply voltage high;;; +VcObdDpms;VcFiPMSnsrGainFault;Sensor self diagnosis, PM sensor gain fault;;; +VcObdDpms;VcFiPMSnsrHeatrCurHi;Sensor self diagnosis, PM sensor heater current too high;;; +VcObdDpms;VcFiPMSnsrHeatrCurLo;Sensor self diagnosis, PM sensor heater current too low;;; +VcObdDpms;VcFiPMSnsrHeatrTempHi;Sensor self diagnosis, PM sensor heater temperature too high;;; +VcObdDpms;VcFiPMSnsrInternSC;Sensor self diagnosis, PM sensor internal short circuit fault;;; +VcObdDpms;VcFiPMSnsrOC;Sensor self diagnosis, PM sensor open circuit fault;;; +VcObdDpms;VcFiPMSnsrRegenTOut;Sensor self diagnosis, PM sensor regeneration time out;;; +VcObdDpms;VcFiPMSnsrSCBatt;Sensor self diagnosis, PM sensor short circuit to battery fault;;; +VcObdDpms;VcFiPMSnsrSCGnd;Sensor self diagnosis, PM sensor short circuit to ground fault;;; +VcObdDpms;VcFiPMSnsrVBoostLo;Sensor self diagnosis, PM sensor boost voltage too low;;; +VcObdDpms;VcFiPMSnsrOutOfExh;PM Sensor, Tampering diagnosis for removed/out of exhaust;;; +VcObdDpms;VcFiPMSnsrCloggedTip;PM Sensor,Tampering diagnosis clogged tip;;; +VcObdNoxSens;VcFiNOxSensPlausGeneral;General identifier for Nox plausibility functions;;; +VcObdNoxSO2;VcFiNOxSensO2;Function identifier for Nox sensor O2 monitor;;; +VcObdNoxSOfs;VcFiNOxSensOfs;Function identifier for Nox offset monitors;;; +VcAcPMon;VcFiFsAcFlowCalcn;Inhibition of AC flow calculation due to A/C variable compressor no operation;;;FS_ACENA +VcAcPMon;VcFiAcPMon;VcFi for AC pressure monitor;;;ACPS +VcLinCptM;VcFiAltMon;VcFi for alternator monitor;;;ACM +VcLinCptM;VcFiGrlShttrMon;VcFi for grill shutter monitor;;x;AGM +VcLinCptM;VcFiSplrShttrMon;VcFi for spoiler shutter monitor;;x;ASSM +VcLinCptM;VcFiEwpMon;VcFi for ICE electrical water pump;;;EPM +VcLinCptM;VcFiEDEwpMon;VcFi for internal ED electrical water pump errors;;;MTEDCP +VcLinCptM;VcFiElACMon;VcFi for Electrical AC;;;ACCM +VcAcCtrl;VcFiFsACEV;Diagnose code for detection of malfunction of pressure sensor in AC circuit;;x;FS_ACEV +AcVlvCtrl;VcFiFsAcChillerVlvClsd;FID for Chiller(AC) shut off valve, Closed;;x;FS_AcChillerVlvClsd +AcVlvCtrl;VcFiFsAcChillerVlvOpn;FID forChiller(AC) shut off valve, Open;;x;FS_AcChillerVlvOpn +AcVlvCtrl;VcFiFsAcFrntEvaprVlvClsd;FID for Front evaporator(AC) shut off valve, Closed;;x;FS_AcFrntEvaprVlvClsd +AcVlvCtrl;VcFiFsAcFrntEvaprVlvOpn;FID for Front evaporator(AC) shut off valve, Open;;x;FS_AcFrntEvaprVlvOpn +AcVlvCtrl;VcFiFsAcFrntEvaprVlv;VcFs for front evaporator valve;;x;Z_FidEVAPVLV +VcIgnBase;VcFiFsIgnRetard;Ignition retard for incereased tolerances in position measurement ;;; +VcLamAdp;VcFiFsLamAdpInh;Inhibit lambda control adaptation;;;FS_ADFA +VcPurgExe;VcFiFsPurgeInh;Inhibit purging;;;FS_PURGE +VcObdNoxSens;VcFiNOxSensUsLambdaSlwResp;FID for upstream Nox sensor lambda signal slow response ;;; +VcObdNoxSens;VcFiNOxSensDsLambdaSlwResp;FID for downstream Nox sensor lambda signal slow response ;;; +VcAesTrboM;VcFiPpRly;VcFi for power pulse relay monitoring.;;;PPRLYSTK +VcAesPpM;VcFiPpRly;VcFi for power pulse relay monitoring.;;;PPRLYSTK +VcAesObd;VcFiFsPowerPulseRly1;VcFi for failsafe power pulse relay 1 stuck;;;FS_PowerPulseRly1 +VcAesObd;VcFiFsPowerPulseRly2;VcFi for failsafe power pulse relay 2 stuck;;;FS_PowerPulseRly2 +VcObdExhTemp;VcFiExhTempCat;Function identifier for T1 temperature sensor monitor;;; +VcObdExhTemp;VcFiExhTempDpf;Function identifier for T2 temperature sensor monitor;;; +VcObdExhTemp;VcFiExhTempScr;Function identifier for T3 temperature sensor monitor;;; +VcObdScr;VcFiScrConvEff;Function identifier for SCR conversion efficiency;;; +VcTrsmShfShkMon;VcFiShfShkOn;VcFi for On/Off of Shift Shock Monitor;;x; +VcTrsmHeatMon;VcFiTrsmHeatMon;VcFi for On/Off Transmission Heat monitor;;x; +VcIgnAdp;VcFiFsIgnAdpOffs;Freeze adaptation and set safe replacement values;to be used in case of knock sensor failure;x; +VcTmEdMon;VcFiEdTOffsMon;VcFi for inhibition of ED Circuit Temp Sensors Offset Monitors;;; +VcTmEdMon;VcFiEdTStuckMon;VcFi for inhibition of ED Circuit Temp Sensors Stuck Monitors;;; +VcTrsmNeuShkMon;VcFiTrsmNeuShkOn;VcFi for On/Off of Shift Shock Monitor;;; +VcTrsmTkOffMon;VcFiTrsmTkOffOn;VcFi for On/Off Transmission Heat monitor;;x; +VcDpmsCtrl;VcFiFSDpmsCtrlOff;VcFiFS for turning off sot sensor;;;Z_FidFS_DpmsCtrlOff +VcObdLnt;VcFiObdLnt;LNT performance below threshold;;;NTMA +VcObdLntNox;VcFiObdLntNox;FID for LNT performance below threshold;;; +VcRcfAISD;VcFiISDReq;VcFi to request ISD activation;;x; +VcTmEfl;VcFiAuxCWPOnReq;VcFi for reconfigure the climatic waterpump when HVAC valve is faulty;;x;FS_CWP +VcTmEfl;VcFiEwpFS;VcFi for FailSafe Electric Waterpump VEP Gen1;;x;FS_ECPMS +VcScrAd;VcFiScrAdaptionInhibit;Inhibition of SCR adaption function;;; +VcRdp;VcFiRdpCalculationInhibit;Inhibition of RDP calculation;;; +VcEmCo;VcFiEmCoDpfRgnInhibit;Inhibition of DPF regen request from EmCo;;; +VcMtThMon;VcFiMtLtClntTStuck;FID for inhibition of ED circuit coolant temp sensor stuck;;;MTCS +VcMtThMon;VcFiMtEradInvTStuck;FID for inhibition of ED circuit Erad inverter temp sensor stuck;;;ERAD +VcMtThMon;VcFiMtWtrPmpTStuck;FID for inhibition of ED circuit water pump temp sensor stuck;;;HYEDCP +VcMtThMon;VcFiMtCiddClntTStuck;FID for inhibition of ED circuit Cidd coolant temp sensor stuck;;;CCID +VcMtThMon;VcFiMtHvgWndgTStuck;FID for inhibition of ED circuit Cidd coolant temp sensor stuck;;;STCISGT +VcMtThMon;VcFiHvBattTOut;Fall back temperature value to be used for Te_HvBattCooltTOut;;;HvBattTOut +VcMtThMon;VcFiMtThStuck;FID for inhibition of ED cicruit thermostat stuck open and close;;;MTTHMS +VcMtThMon;VcFiMtTOffs;FID for inhibition of ED circuit temp sensors offset ;;; +VcMtThMon;VcFiMtWtrPmpTOffs;FID for inhibition of ED circuit water pump temp sensor offset check;;; +VcMtThMon;VcFiMtCiddClntTOffs;FID for inhibition of ED circuit Cidd coolant temp sensor offset check;;; +VcMtThMon;VcFiHvBattCool;FID for inhibition of High voltage battery cooling;;;HvBattCool +VcMtThMon;VcFiHvBattTOffs;FID for inhibition of Hv battery temp sensor offset check;;;HvBattT +Unused;VcFiUnused;Parking place for unused monitors;;; +Core Displayadapter;VcFiCoAf;Inhibition helper from SPM's;;; +Core Displayadapter;VcFiDaFid1;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid2;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid3;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid4;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid5;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid6;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid7;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid8;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid9;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid10;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid11;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid12;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid13;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid14;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid15;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid16;Dummy FIM-line for messages;;; +Core Displayadapter;VcFiDaFid17;Dummy FIM-line for messages;;; +VcFtivMon;VcFiFtivMon;Function Id for Fuel Tank Isolation Valve monitor;;; +VcPurgMon;VcFiPurgMon;Function Id for purge monitor;;; +VcLamCtrlM;VcFiLamCtrlM;Function Id for lambda control closed loop monitor;;; +VcAesDiffPresM;VcFiDiffPresM;Function Id for LR EGR differential pressure monitor;;; +VcAesDynPresM;VcFiBst1AmbPPlausMon;Function Id for boost 1 vs.ambient pressure comparison;;; +VcAesDynPresM;VcFiBst2AmbPPlausMon;Function Id for boost 2 vs.ambient pressure comparison;;; +VcAesDynPresM;VcFiBst1Bst2PlausMon;Function Id for boost 1 vs.boost 2 pressure comparison;;; +VcAesDynPresM;VcFiBst2IntkMapPlausMon;Function Id for boost 2 vs intake manifold pressure comparison;;; +VcAesDynPresM;VcFiBst1IntkMapPlausMon;Function Id for boost 1 vs intake manifold pressure comparison;;; +VcAesStatPresM;VcFiAmbPCompPlausMon;VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off);;;ATPR +VcAesStatPresM;VcFiBst1PCompPlausMon;VcFi for boost 1 Pressure Rationality Monitor (comparison to other sensor at eng off);;; +VcAesStatPresM;VcFiBst2PCompPlausMon;VcFi for boost 2 Pressure Rationality Monitor (comparison to other sensor at eng off);;; +VcAesStatPresM;VcFiIntkMnfldPCompPlausMon;VcFi for Intake Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);;;MAPIMPDR +VcAesStatPresM;VcFiExhMnfldPCompPlausMon;VcFi for Exhaust Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);;;EXHMPDR +VcAesStatPresM;VcFiElcmPCompPlausMon;VcFi for ELCM Pressure Diff Rationality Monitor (comparison to other sensor at eng off);;; +VcAesStatPresM;VcFiScPCompPlausMon;VcFi for Supercharger Pressure Rationality Monitor (comparison to other sensor at eng off);;;SCPR +VcEmCo;VcFiFSScrOnly;Failsafe to run only in SCR-mode (Skip LNT and mixed mode);;; +VcEmCo;VcFiFSLntOnly;Failsafe to run only in LNT-mode (Skip SCR and mixed mode);;; +VcTmApach;VcFiFsPmpCluOpn;Failsafe flag that indicates that a fault has been found on the clutchable waterpump, clutch is open;;; +VcTmApach;VcFiFsPmpCluClsd;Failsafe flag that indicates that a fault has been found on the clutchable waterpump, clutch is closed;;; +VcTmApach;VcFiFsWcacPmp;Failsafe flag that indicates that a fault has been found on the electric waterpump for the WCAC system;;; +VcTmApach;VcFiFsEocVlvClsd;Failsafe flag that indicates that a fault has been found on the EOC coolant calve, valve is closed;;; +VcTmApach;VcFiFsEocVlvOpn;Failsafe flag that indicates that a fault has been found on the EOC coolant calve, valve is open;;; +VcTmApach;VcFiFsTocVlvClsd;Failsafe flag that indicates that a fault has been found on the TOC coolant calve, valve is closed;;; +VcTmApach;VcFiFsTocVlvOpn;Failsafe flag that indicates that a fault has been found on the TOC coolant calve, valve is open;;; +VcScFeh;VcFiFeh1;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFeh2;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFeh3;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFeh4;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFeh5;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFeh6;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFeh7;Dummy FIM-line for messages;;x; +VcScFeh;VcFiFsLoPwrWarnMsg;FID for inhibitation of showing message for low available propulsive power when a diagnostic function already shows a similar message ;;x; +VcTqm;VcFiTrqMonLim1;FIM-line for messages from torque monitoring;;x; +VcTqm;VcFiTrqMonLim2;FIM-line for messages from torque monitoring;;x; +VcTqmSpdLim;VcFiSpdLim1;FIM-line for messages from safety speed limiation ;;x; +VcTqmSpdLim;VcFiSpdLim2;FIM-line for messages from safety speed limiation ;;x; +VcTqmASpdLimReq;VcFiISDMsg1;FIM-line for messages from ISD function;;x; +VcTqmASpdLimReq;VcFiISDMsg2;FIM-line for messages from ISD function;;x; +VcTqmASpdLimReq;VcFiISDMsg3;FIM-line for messages from ISD function;;x; +VcObdGpf;VcFiObdGpf;Function ID for gasoline particle filter monitor;;; +VcTmEdMon;VcFiEdHvBattCooltVlvMon;VcFi for inhibition of ED/Battery circuit interconnection valves stuck monitor;;; +VcEmiGpf;VcFiFsGpfInhMdlCorr;Fail safe for inhibiting soot model correction;;x; +VcOilLvl;VcFiOilLvlStck;VcFi for Oil level sensor stuck;;; +VcLeakMon;VcFiLeakMon;FID for leakage detection monitor;;; +VcTmHvacClntTM;VcFiHvacCooltTStuckMon;FID for inhibition of Hvac Temp Stuck Check Diagnostics;;; +VcMtThMon;VcFiHvacCooltTStuckMon;FID for inhibition of Hvac Temp Stuck Check Diagnostics;;; +VcTmHvacVlvM;VcFiFsHvchShutOff;Emission Neutral Default Action fid for the Hvac Vavle;;; +VcTmHvacVlvM;VcFiHvacVlvMon;FID for inhibition of Hvac Valve Monitoring;;; +VcEmCo;VcFiFSLoNoxBase;Failsafe to run in LoNOxBase-mode if faults related to FIE;;; +VcAesMafM;VcFiIntkMnfldFlwMdlPlausMon;VcFi for MAF Rationality Monitor;;; +VcAesEChrgrM ;VcFiEChrgrM;VcFi for Echarger monitor;;; +VcAesHmdM;VcFiHmdM;VcFi for humidity monitor;;; +VcObdCmn;VcFiFsPidDefVal;Send default value from PID;;; +VcTmEdMon;VcFiEdCoolgPfmncMon;VcFi for inhibition of ED circuit system cooling performance error monitor;;; +VcLinCptM;VcFiEDEwpSpdMon;VcFi for ED electrical water pump speed error;;; +VcFuelLpM;VcFiFuelLpM;VcFi for Fuel low pressure monitoring;;; +VcDepSs;VcFiSsRcfSet;Inhibit Stop/Start on certain faults;;x; +VcDepSs;VcFiSsRcfSetAlt;Inhibit Stop/Start on certain faults;;x; +VcFuelLpSensM;VcFiFuelLpSensM;VcFi for Fuel low pressure sensor monitoring;;; +VcFuelLvlSensM;VcFiFuelLvlSensM;VcFi for Fuel level sensor monitoring;;; +VcFuelCtrl;VcFiFsFuLoPFbCtrl;VcFi fail safe flag to disable fuel low pressure feedback control;;; +VcFuelCtrl;VcFiFsFuLoPCtrlMargin;VcFi fail safe flag to increase feed forward margins on fuel low pressure control;;; +VcFuelCtrl;VcFiFsFuLoPPriming;VcFi fail safe flag to prime fuel system after run dry;;; +VcFuelCtrl;VcFiFsFuLoPSetTar;VcFi fail safe flag to set fuel low pressure target;;; +VcFuelCtrl;VcFiFsFuLoPVaporCheck;VcFi fail safe flag to disable fuel low pressure vapor check;;; +VcAccelM;VcFiAccelMStuck;VcFi for accelerometer monitor stuck check;;; +VcAccelM;VcFiAccelMOffs;VcFi for accelerometer monitor rationality check;;; +VcAccelM;VcFiAccelMRange;VcFi for accelerometer monitor out of range check;;; +VcEmiCtrl;VcFiFsEmiCtrlMidFbInh;VcFi fail safe for inhibition of MidHego feedback emission control;;;FS_SFBA +VcFuelCtrl;VcFiFsFuLoPCtrlFlowMargin;VcFi fail safe flag to increase feed forward margins based on flow on fuel low pressure control;;; +VcLamCilM;VcFiCilM;VcFi fail safe for Cylinder Imbalance Monitor;;; +VcLamRespM;VcFiRespM;VcFi fail safe for Lambda Response Monitor;;; +VcTempWcacThM;VcFiWcacThM;VcFi for WCAC cooling circuit heat up monitor;;; +VcLinCptM;VcFiEdcpEmgyMon;VcFi for ED Coolant Pump emergency run monitor;;; +VcLinBypVlvM;VcFiLinBypVlvM;VcFi for LIN Bypass Valve Monitor;;; +VcTmWcac;VcFiFsLinBypVlv;VcFi for opening LIN Bypass Valve;;; +VcKersBltSlipM;VcFiKersBltSlipM;VcFi for Kers Belt Slip monitoring;;; +VcCdPinM;VcFiCdPinM;VcFi for Sliding Camshaft Pin Monitor;;; +VcCdPinM;VcFiFsCdPinM2CylMode;VcFi fail safe for 2 cylinder mode;;; +VcCdPinM;VcFiFsCdPinM4CylMode;VcFi fail safe for 4 cylinder mode;;; +VcLinCptM;VcFiFsCircCnctVlv;VcFi failsafe for HV battery cooling circuit contact valve;;x; +VcLinCptM;VcFiFsCircCnctVlv2;VcFi failsafe for HV battery cooling circuit contact valve;;x; +VcLinCptM;VcFiFsCooltPmpCmptmt;VcFi failsafe for coolant pump in climate circuit;;x; +VcLinCptM;VcFiFsCooltPmpCmptmt2;VcFi failsafe for coolant pump in climate circuit;;x; +VcLinCptM;VcFiFsCooltPmpDtElec;VcFi failsafe for ED coolant pump;;x; +VcLinCptM;VcFiFsCooltPmpDtElec2;VcFi failsafe for ED coolant pump;;x; +VcLinCptM;VcFiFsEvaprVlvFrnt;VcFi failsafe for A/C evaporator valve;;x; +VcLinCptM;VcFiFsEvaprVlvFrnt2;VcFi failsafe for A/C evaporator valve;;x; +VcLinCptM;VcFiFsOutdHeatChgToCmprVlv;VcFi failsafe for accumulator shut-off valve;;x; +VcLinCptM;VcFiFsOutdHeatChgToCmprVlv2;VcFi failsafe for accumulator shut-off valve;;x; +VcLinCptM;VcFiFsRadrBypVlvInDtElec;VcFi failsafe for radiator bypass valve;;x; +VcLinCptM;VcFiFsRadrBypVlvInDtElec2;VcFi failsafe for radiator bypass valve;;x; +VcLinCptM;VcFiFsWtrCondsBypVlv;VcFi failsafe for OHX shut-off valve;;x; +VcLinCptM;VcFiFsWtrCondsBypVlv2;VcFi failsafe for OHX shut-off valve;;x; +VcLinCptM;VcFiFsWtrCondsVlv;VcFi failsafe for liquid cooler condenser shut-off valve;;x; +VcLinCptM;VcFiFsWtrCondsVlv2;VcFi failsafe for liquid cooler condenser shut-off valve;;x; +VcLinCptM;VcFiFsBypVlvForHeatPmp;VcFi failsafe for heatpump bypass valve;;x; +VcLinCptM;VcFiFsBypVlvForHeatPmp2;VcFi failsafe for heatpump bypass valve;;x; +VcLinCptM;VcFiFsCooltTInDtElec;VcFi failsafe for ED coolant temperature sensor;;x; +VcLinCptM;VcFiFsCooltTInCmptmt;VcFi failsafe for coolant temperature in climate circuit;;x; +VcLinCptM;VcFiFsAmbT;VcFi failsafe for ambient temperature sensor;;x; +VcLinCptM;VcFiFsFanCoolgFrnt1;VcFi failsafe for cooling fan 1;;x; +VcLinCptM;VcFiFsFanCoolgFrnt2;VcFi failsafe for cooling fan 2;;x; +VcLinCptM;VcFiFsPCmprInQly;VcFi failsafe for compressor inlet pressure sensor;;x; +VcLinCptM;VcFiFsTCmprInQly;VcFi failsafe for compressor inlet temperature sensor;;x; +VcLinCptM;VcFiFsPCmprOutQly;VcFi failsafe for compressor outlet pressure sensor;;x; +VcLinCptM;VcFiFsTCmprOutQly;VcFi failsafe for compressor outlet temperature sensor;;x; +VcLinCptM;VcFiFsPBattChillrOutQly;VcFi failsafe for chiller out pressure sensor;;x; +VcLinCptM;VcFiFsTBattChillrOutQly;VcFi failsafe for chiller out temperature sensor;;x; +VcLinCptM;VcFiFsPWtrCondsOutlQly;VcFi failsafe for water cooled condensor outlet pressure sensor;;x; +VcLinCptM;VcFiFsTWtrCondsOutlQly;VcFi failsafe for water cooled condensor outlet temperature sensor;;x; +VcLinCptM;VcFiFsPOutdHeatChgOutlQly;VcFi failsafe for battery heat exchanger pressure sensor;;x; +VcLinCptM;VcFiFsTOutdHeatChgOutlQly;VcFi failsafe for battery heat exchanger temperature sensor;;x; +VcLeakMon;VcFiFsFuelLvlSens;Fail safe for fuel level sensors;;; +VcLeakMon;VcFiFsVspd;Fail safe for vehicle speed signal to VcLeakMon;;; +VcObdDps;VcFiDpsStuck;VcFi for dpf Diff Pressure Sensor monitor stuck check;;; +VcObdDps;VcFiDpsPlausMon;VcFi for dpf Diff Pressure Sensor monitor offset check;;; +VcObdDps;VcFiDpsInvHoses;VcFi for dpf Diff Pressure Sensor monitor Inverted Hoses check;;; +VcCmpntSts;VcFiFsGrlShttr;VcFi failsafe for grill shutter;;x; +VcCmpntSts;VcFiFsGrlShttr2;VcFi failsafe for grill shutter;;x; +VcCmpntSts;VcFiFsSplrShttr;VcFi failsafe for spoiler shutter;;x; +VcCmpntSts;VcFiFsSplrShttr2;VcFi failsafe for spoiler shutter;;x; +VcTempLtClntHi;VcFiTempLtClntHi;VcFi for WCAC cooling circuit high temperature monitor;;; +VcTmHvacClntTM;VcFiHvacCooltTOffsMon;FID for inhibition of Hvac Temp Offset Check Diagnostics;;; +VcProtNe;VcFiFsIdleSpdLimEMS;VcFi failsafe for minimum idle speed from EMS supplier;to be used with HPRLF;; +VcProtNe;VcFiFsEngSpdLimnEMS;VcFi failsafe for maximum engine speed from EMS supplier;to be used with HPRLF;; +VcProtInj;VcFiFsInjPrmDurEMS;VcFi failsafe for homogeneous injection parameters and inj. duration from EMS supplier;to be used with HPRLF;; +VcPpmMvem;VcFiMvSysMon;VcFi for Mv system faults;;; +VcPpmMvem;VcFiMvBattEOLMon;VcFi for Mv battery end of life detection;;; +AcPTOffsMonr;VcFiPTOffsMonr;VcFi for AC system pressure and temperature offset monitor;;; +AcPTOffsMonr;VcFiFsCmprOutP;Failsafe for AC Compressor out pressure sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsCmprInP;Failsafe for AC Compressor in pressure sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsOhxP;Failsafe for OXH pressure sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsWcndOutP;Failsafe for Water cooled condenser pressure sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsChillrOutP;Failsafe for Chiller out pressure sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsCmprOutT;Failsafe for AC Compressor out temperature sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsCmprInT;Failsafe for AC Compressor in temperature sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsOhxT;Failsafe for OXH temperature sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsWcndOutT;Failsafe for Water cooled condenser temperature sensor reconfiguration;;; +AcPTOffsMonr;VcFiFsChillrOutT;Failsafe for Chiller out temperature sensor reconfiguration;;; +AcWcndVlvMonr;VcFiWcndVlvMonr;VcFi for Water cooled condenser shut off valve monitor;;; +AcWcndVlvMonr;VcFiFsWcndVlvCdng;Failsafe for conditioning of Water cooled condenser shut off valve;;; +AcWcndBypVlvMonr;VcFiWcndBypVlvMonr;VcFi for Water cooled condenser bypass shut off valve monitor;;; +AcWcndBypVlvMonr;VcFiFsWcndBypVlvCdng;Failsafe for conditioning of Water cooled condenser bypass shut off valve;;; +AcOhxToCmprVlvMonr;VcFiOhxToCmprVlvMonr;VcFi for OHX to compressor shut off valve monitor;;; +AcOhxToCmprVlvMonr;VcFiFsOhxToCmprVlvCdng;Failsafe for conditioning of OHX to compressor shut off valve;;; +AcOhxToCmprVlvMonr;VcFiFsLimdCoolg;Failsafe for limitation of pressure during cooling (open Wcond bypass valve);;; +AcEvaprVlvMonr;VcFiEvaprVlvMonr;VcFi for Evaporator shut off valve monitor;;; +AcEvaprVlvMonr;VcFiFsEvaprVlvCdng;Failsafe for conditioning of Evaporator shut off valve;;; +AcEvaprVlvMonr;VcFiFsEvaprNotAvl;Failsafe for indication of Evaporator not available;;; +AcWcndChkVlvMonr;VcFiWcndChkVlvMonr;VcFi for Water cooled condenser check valve and OHX EXV plausibility monitor;;; +AcWcndChkVlvMonr;VcFiFsWcndNotAvl;Failsafe for indication of Water cooled condenser not available;;; +AcOhxChkVlvMonr;VcFiOhxChkVlvMonr;VcFi for OHX check valve monitor;;; +AcOhxChkVlvMonr;VcFiFsOhxNotAvl;Failsafe for indication of OHX not available;;; +AcChillrVlvMonr;VcFiChillrVlvMonr;VcFi for chiller valve, EXV or checkvalve, monitor;;; +AcChillrVlvMonr;VcFiFsChillrNotAvl;Failsafe for indication of Chiller not available;;; +AcExVlvMonr;VcFiExVlvMonr;VcFi for EX valve monitor;;; +AcExVlvMonr;VcFiFsOhxExVlvInin;Failsafe for initialization of EXV to OHX;;; +AcExVlvMonr;VcFiFsChillrExVlvInin;Failsafe for initialization of Chiller EXV;;; +AcExVlvMonr;VcFiFsOhxExVlvImps;Failsafe for reconfiguration or lowered status flag of EXV to OHX;;; +AcExVlvMonr;VcFiFsChillrExVlvImps;Failsafe for reconfiguration or lowered status flag of Chiller EXV;;; +AcACCAMonr;VcFiACCAMonr;VcFi for Electrical AC compressor monitor;;; +AcACCAMonr;VcFiFsCmprNotAvl;Failsafe for indication of Electrical AC compressor not available;;; +AcACCAMonr;VcFiFsCmprWoHpNotAvl;Failsafe for indication of Electrical AC compressor not available in basic AC system;;; +AcEvaprMonr;VcFiEvaprMonr;VcFi for Evaporator monitor;;; +AcPOffsWoHpMonr;VcFiPOffsWoHpMonr;VcFi for AC pressure offset monitor in basic AC system;;; +AcPOffsWoHpMonr;VcFiFsCmprOutPWoHp;Failsafe for AC Compressor out pressure sensor reconfiguration in basic AC system;;; +AcPOffsWoHpMonr;VcFiFsChillrOutPWoHp;Failsafe for Chiller out pressure sensor reconfiguration in basic AC system;;; +AcTOffsWoHpMonr;VcFiTOffsWoHpMonr;VcFi for AC temperature offset monitor in basic AC system;;; +AcTOffsWoHpMonr;VcFiFsCmprOutTWoHp;Failsafe for AC Compressor out temperature sensor reconfiguration in basic AC system;;; +AcTOffsWoHpMonr;VcFiFsChillrOutTWoHp;Failsafe for Chiller out temperature sensor reconfiguration in basic AC system;;; +AcEvaprVlvWoHpMonr;VcFiEvaprVlvWoHpMonr;VcFi for Evaporator shut off valve monitor in basic AC system;;; +AcEvaprVlvWoHpMonr;VcFiFsEvaprWoHpNotAvl;Failsafe for indication of Evaporator not available in basic AC system;;; +AcChillrVlvWoHpMonr;VcFiChillrVlvWoHpMonr;VcFi for chiller valve, EXV or checkvalve, monitor in basic AC system;;; +AcChillrVlvWoHpMonr;VcFiFsChillrWoHpNotAvl;Failsafe for indication of Chiller not available in basic AC system;;; +AcSysProtnMonr;VcFiSysProtnMonr;VcFi for Ac system protection monitor;;; +CmptmtClntTOffsDiag;VcFiCmptmtClntTOffs;VcFi for compartment coolant temperature offset monitor;;; +CmptmtClntTStkDiag;VcFiCmptmtClntTStk;VcFi for compartment coolant temperature stuck monitor;;; +EdClntTOffsDiag;VcFiEdClntTOffs;VcFi for ED coolant temperature offset monitor;;; +EdClntTStkDiag;VcFiEdClntTStk;VcFi for ED coolant temperature stuck monitor;;; +EdVlvDiag;VcFiEdVlv;VcFi for ED valve stuck monitor;;; +HvacVlvDiag;VcFiHvacVlv;VcFi for Hvac valve stuck monitor;;; +HvBattVlvStkClsdDiag;VcFiHvBattVlv;VcFi for HvBatt valve stuck closed and stuck open monitor;;; +LinPrpVlvDiag;VcFiLinPrpVlv;VcFi for Lin proportional valve monitor;;; +LinPmpDiag;VcFiLinDtElecPmp;VcFi for Lin monitor for ED coolant pump;;; +LinPmpDiag;VcFiLinCmptmtPmp;VcFi for Lin monitor for compartment coolant pump;;; +VcEmiPlsM;VcFiMidO2SnsrPlausMon;Function Id for middle oxygen sensor plausability monitor;;; +VcScAAccPed;VcFiScAAccPedL1;VcFi for L1 AccPed plausubility monitor DTC;;x; +VcScBAccPed;VcFiScBAccPedL2;VcFi for L2 AccPed plausubility monitor DTC;;x; +VcCmpntSts;VcFiMissHbFan1;Function Id for heartbeat missing for fan 1;;x; +VcCmpntSts;VcFiMissHbFan2;Function Id for heartbeat missing for fan 2;;x; +AcSysProtnMonr;VcFiFsAcCoolgNotAvl;Failsafe for indication of Cooling function not available;;; +AcSysProtnMonr;VcFiFsAcHeatgNotAvl;Failsafe for indication of Heating function not available;;; +LinPmpDiag;VcFiLinDtElecPmpSpd;Function Id for speed error on DtElec coolant pump;;; +LinPmpDiag;VcFiLinCmptmtPmpSpd;Function Id for speed error on compartment coolant pump;;; +ThermDiagSigCdn;VcFiFsHvBattInT;Failsafe for reconfiguration of Hv battery inlet coolant temperature;;; +VcCmpntSts;VcFiFsCooltTInCmptmt2;Failsafe for compartment coolant temperature sensor 2;;x; +VcEmiPlsM;VcFiAftO2SnsrPlausMon;Function Id for after oxygen sensor plausability monitor;;; +VcTmAfReq;VcFiFsMinAirFlowReq;FiFs for activating a minimum airflow request though the front radiator package;;; +VcOilTMon;VcFiOilTMon;VcFi for oil temperature monitor;;; +VcNoxSensMgr;VcFiNOxSensMidVoltageDiag;Inhibit voltage diag;Mid sensor;; +VcNoxSensMgr;VcFiNOxSensMidProbeLnDiag;Inhibit probe line diag (incl. Heater line);Mid sensor;; +VcNoxSensMgr;VcFiNOxSensMidHeaterDiag;Inhibit heater diag;Mid sensor;; +VcNoxSensMgr;VcFiNOxSensMidMountingDiag;Inhibit mounting diag;Mid sensor;; +VcNoxSensMgr;VcFiNOxSensMidAvailabilityDiag;Inhibit availability diag;Mid sensor;; +VcNoxSensMgr;VcFiNOxSensMidReadinessDiag;Inhibit readiness diag;Mid sensor;; +VcNoxSensMgr;VcFiNOxSensMidCurveDiagA;Inhibit curve diag A;Mid sensor;; +VcNoxSensMgr;VcFiFsNOxSensMidError;Failsafe for transition to error state;Mid sensor;; +VcNoxSensMgr;VcFiFsNOxSensMidFreezeNOx;Failsafe for freezing NOx value;Mid sensor;; +VcNoxSensMgr;VcFiFsNOxSensMidFreezeLambda;Failsafe for freezing lambda value;Mid sensor;; +VcNoxSensMgr;VcFiFsNOxSensMidModelNOx;Failsafe for using modeled Nox instead of sensor value;Mid sensor;; +VcNoxSensMgr;VcFiFsNOxSensMidModelLambda;Failsafe for using modeled lambda instead of sensor value;Mid sensor;; +VcLamCilM;VcFiFsCILAR;Failsafe for CILM faults;;; +VcLamCilM;VcFiFsCILC;Failsafe forCILM faults;;; +VcObdExhTemp;VcFiExhTempCatInit;Function identifier for T1 temperature sensor key-on monitor;;; +VcObdExhTemp;VcFiExhTempDpfInit;Function identifier for T2 temperature sensor key-on monitor;;; +VcObdExhTemp;VcFiExhTempScrInit;Function identifier for T3 temperature sensor key-on monitor;;; +VcObdScr;VcFiScr1ConvEff;Function identifier for SCR1 Conversion Efficiency;;; +VcObdScr;VcFiScr2ConvEff;Function identifier for SCR2 Conversion Efficiency;;; +VcObdNoxSnsrElec;VcFiNOxSnsrUsVltg;Function identifier for Nox Us Voltage too high/low error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrMidVltg;Function identifier for Nox Mid Voltage too high/low error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrDsVltg;Function identifier for Nox Ds Voltage too high/low error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrUsProbeLn;Function identifier for Nox Us Probe line electrical error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrMidProbeLn;Function identifier for Nox Mid Probe line electrical error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrDsProbeLn;Function identifier for Nox Ds Probe line electrical error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrUsHtrLn;Function identifier for Nox Us Heater line electrical error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrMidHtrLn;Function identifier for Nox Mid Heater line electrical error;;; +VcObdNoxSnsrElec;VcFiNOxSnsrDsHtrLn;Function identifier for Nox Ds Heater line electrical error;;; +VcObdNoxStartUp;VcFiNOxSnsrUsHtr;Function identifier for Nox Us Heater performance error;;; +VcObdNoxStartUp;VcFiNOxSnsrMidHtr;Function identifier for Nox Mid Heater performance error;;; +VcObdNoxStartUp;VcFiNOxSnsrDsHtr;Function identifier for Nox Ds Heater performance error;;; +VcObdNoxStartUp;VcFiNOxSnsrUsReady;Function identifier for Nox Us readiness not reached in time;;; +VcObdNoxStartUp;VcFiNOxSnsrMidReady;Function identifier for Nox Mid readiness not reached in time;;; +VcObdNoxStartUp;VcFiNOxSnsrDsReady;Function identifier for Nox Ds readiness not reached in time;;; +VcIntkVlvM;VcFiIntkVlv;Function identifier for intake valve monitor;;; +VcTmAf;VcFiFsAirCoolgLimHiFan2;VcFi indicates that second fan is faulty;;x; diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPR.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPR.csv new file mode 100644 index 0000000..b7d7c38 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPR.csv @@ -0,0 +1,206 @@ +;;;;;PROJECTS; +Model name;IUMPR Id Name;Description;Controlling FiD;Comments;ClimCtr;Old Id +VcAesTrboM;Vc09BoostHiPlausMon;Ratio Id for Boost Pressure High Rationality Monitor;VcFiBoostPPlausMon;;;BSTR_HI +VcAesTrboM;Vc09BoostLoPlausMon;Ratio Id for Boost Pressure Low Rationality Monitor;VcFiBoostPPlausMon;;;BSTR_LO +VcAesTrboMg3;Vc09Boost1HiPlausMon;Ratio Id for Boost Pressure 1 High Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesTrboMg3;Vc09Boost1LoPlausMon;Ratio Id for Boost Pressure 1 Low Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesTrboMg3;Vc09Boost2HiPlausMon;Ratio Id for Boost Pressure 2 High Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesTrboMg3;Vc09Boost2LoPlausMon;Ratio Id for Boost Pressure 2 Low Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesObd;Vc09PCVLeakMon;Ratio Id for PCV Leakage Monitor;VcFiPCVLeakMon;;; +VcEmiCatM;Vc09CatMon;Ratio Id for catalyst monitor;VcFiCatMon;;;Vc09EmiCatM +VcEmiOscM;Vc09CatalystO2StorageMon;Ratio Id for catalyst monitor;VcFiCatalystO2StorageMon;;;Vc09CatalystO2StorageMon +VcEmiOscM;Vc09SecO2SnsrDynMon;Ratio Id for catalyst monitor;VcFiCatalystO2StorageMon;;; +VcEmiAdpM;Vc09SecO2AdpMon;Ratio Id for secondary fuel trim monitor;VcFiSecO2AdpMon;;;Vc09EmiAdpM +VcEmiPlsM;Vc09SecO2SnsrPlausMon;Ratio Id for secondary oxygen sensor plausability monitor;VcFiSecO2SnsrPlausMon;;;Vc09EmiPlsM +VcLamDynCcM;Vc09PrimO2SnsrSlowRespMon;Ratio ID for front lambda sensor slow response;VcFiPrimO2SnsrSlowRespMon;;;Vc09SlowResp +VcLamAdpM;Vc09LamAdpMon;Ratio ID for Fueltrim;VcFiLamAdpMon;;;Vc09LamDynM +VcTempKohlM;Vc09AmbTKohlHi;Ratio Id for offset monitor of the ambient air temperature sensor, offset high;VcFiAmbTKohlM;;;KOAMBTH +VcTempKohlM;Vc09AmbTKohlLo;Ratio Id for offset monitor of the ambient air temperature sensor, offset low;VcFiAmbTKohlM;;;KOAMBTL +VcTempKohlM;Vc09IntkAirTKohlHi;Ratio Id for offset monitor of the intake air temperature sensor, offset high;VcFiIntkAirTKohlM;;;KOIATH +VcTempKohlM;Vc09IntkAirTKohlLo;Ratio Id for offset monitor of the intake air temperature sensor, offset low;VcFiIntkAirTKohlM;;;KOIATL +VcTempKohlM;Vc09BstTKohlHi;Ratio Id for offset monitor of the boost air temperature sensor, offset high;VcFiBstTKohlM;;;KOBATH +VcTempKohlM;Vc09BstTKohlLo;Ratio Id for offset monitor of the boost air temperature sensor, offset low;VcFiBstTKohlM;;;KOBATL +VcTempKohlM;Vc09ClntTKohlHi;Ratio Id for offset monitor of the engine coolant temperature sensor, offset high;VcFiClntTKohlM;;;KOECTH +VcTempKohlM;Vc09ClntTKohlLo;Ratio Id for offset monitor of the engine coolant temperature sensor, offset low;VcFiClntTKohlM;;;KOECTL +VcTempKohlM;Vc09OilTKohlHi;Ratio Id for offset monitor of the oil temperature sensor, offset high;VcFiOilTKohlM;;;KOOILTH +VcTempKohlM;Vc09OilTKohlLo;Ratio Id for offset monitor of the oil temperature sensor, offset low;VcFiOilTKohlM;;;KOOILTL +VcTempKohlM;Vc09InManiTKohlHi;Ratio Id for offset monitor of the intake manifold air temperature sensor, offset high;VcFiInManiTKohlM;;;KOMATH +VcTempKohlM;Vc09InManiTKohlLo;Ratio Id for offset monitor of the intake manifold air temperature sensor, offset low;VcFiInManiTKohlM;;;KOMATL +VcTempKohlM;Vc09CisgTKohlHi;Ratio Id for offset monitor of the Crank ISG temperature sensor, offset high;VcFiCisgTKohlM;;;KOCISGTH +VcTempKohlM;Vc09CisgTKohlLo;Ratio Id for offset monitor of the Crank ISG temperature sensor, offset low;VcFiCisgTKohlM;;;KOCISGTL +VcTempKohlM;Vc09BstT2KohlHi;Ratio Id for offset monitor of the boost air temperature sensor 2, offset high;VcFiBstT2KohlM;;; +VcTempKohlM;Vc09BstT2KohlLo;Ratio Id for offset monitor of the boost air temperature sensor 2, offset low;VcFiBstT2KohlM;;; +VcTempKohlM;Vc09LtClntWcacTKohlHi;Ratio Id for offset monitor of the coolant temp sensor in LT wcac circuit, offset high;VcFiLtClntWcacTKohlM;;; +VcTempKohlM;Vc09LtClntWcacTKohlLo;Ratio Id for offset monitor of the coolant temp sensor in LT wcac circuit, offset low;VcFiLtClntWcacTKohlM;;; +VcTempKohlM;Vc09PowerPulseTKohlHi;Ratio Id for offset monitor of the power pulse temperature sensor, offset high;VcFiPowerPulseTKohlM;;; +VcTempKohlM;Vc09PowerPulseTKohlLo;Ratio Id for offset monitor of the power pulse temperature sensor, offset low;VcFiPowerPulseTKohlM;;; +VcTempKohlM;Vc09EChargerTKohlHi;Ratio Id for offset monitor of the ECharger temperature sensor, offset high;VcFiEChargerTKohlM;;; +VcTempKohlM;Vc09EChargerTKohlLo;Ratio Id for offset monitor of the ECharger temperature sensor, offset low;VcFiEChargerTKohlM;;; +VcTempKohlM;Vc09WcacUsAirTKohlHi;Ratio Id for offset monitor of the WCAC upstream air temperature sensor, offset high;VcFiWcacUsAirTKohlM;;; +VcTempKohlM;Vc09WcacUsAirTKohlLo;Ratio Id for offset monitor of the WCAC upstream air temperature sensor, offset low;VcFiWcacUsAirTKohlM;;; +VcTempKohlM;Vc09LPFuelTKohlHi;Ratio Id for offset monitor of the LP fuel temperature sensor, offset high;VcFiLPFuelTKohlM;;; +VcTempKohlM;Vc09LPFuelTKohlLo;Ratio Id for offset monitor of the LP fuel temperature sensor, offset low;VcFiLPFuelTKohlM;;; +VcTempStkM;Vc09BstTStkM;Ratio Id for stuck in range monitor of the boost air temperature sensor;VcFiBstTStkM;;;BATD +VcTempStkM;Vc09ClntTStkM;Ratio Id for stuck in range monitor of the engine coolant temperature sensor;VcFiClntTStkM;;;CLTD +VcTempStkM;Vc09IntkAirTStkM;Ratio Id for stuck in range monitor of the intake air temperature sensor;VcFiIntkAirTStkM;;;IATD +VcTempStkM;Vc09InManiTStkM;Ratio Id for stuck in range monitor of the intake manifold air temperature sensor;VcFiInManiTStkM;;;MATD +VcTempStkM;Vc09BstT2StkM;Ratio Id for stuck in range monitor of the boost air temperature sensor 2;VcFiBstT2StkM;;; +VcTempStkM;Vc09LtClntWcacTStkM;Ratio Id for stuck in range monitor of the coolant temp sensor in LT wcac circuit;VcFiLtClntWcacTStkM;;; +VcTempStkM;Vc09PowerPulseTStkM;Ratio Id for stuck in range monitor of the power pulse temperature sensor;VcFiPowerPulseTStkM;;;PPTD +VcTempStkM;Vc09EChrgrTStkM;Ratio Id for stuck in range monitor of the ECharger temperature sensor;VcFiEChrgrTStkM;;; +VcTempStkM;Vc09OilTStkM;Ratio Id for stuck in range monitor of the Oil temperature sensor;VcFiOilTStkM;;; +VcTempStkM;Vc09WcacUsAirTStkM;Ratio Id for stuck in range monitor of the WCAC upstream air temperature sensor;VcFiWcacUsAirTStkM;;; +VcTempStkM;Vc09LPFuelTStkM;Ratio Id for stuck in range monitor of the Fuel temperature sensor;VcFiLPFuelTStkM;;; +VcTempThM;Vc09ThLk;Ratio Id for thermostat leakage fault;VcFiThM;;;THMS_LK +VcTempThM;Vc09ThSlw;Ratio Id for thermostat slow heat up fault;VcFiThM;;;THMS_SLW +VcTempThContnsM;Vc09ThContnsMon;Ratio Id for continuous thermostat fault;VcFiThContnsM;;; +VcAesEgrM;Vc09EgrLoFlw;Ratio Id for EGR Lo flow monitoring;VcFiEgrSysMon;;; +VcAesEgrM;Vc09EgrHiFlw;Ratio Id for EGR Hi flow monitoring;VcFiEgrSysMon;;; +VcAesEgrM;Vc09EgrAr;Ratio Id for EGR flow monitoring;VcFiEgrAr;;;EGRAR +VcAesEgrM;Vc09EgrClrMnr;Ratio Id for EGR cooler monitoring;VcFiEgrClrMnr;;;EGRCLRR +VcObdDpfDpms;Vc09DPFPerfDpms;Ratio Id for DPF soot filtration efficiency below threshold Soot Sensor ;VcFiDPFPerfDpms;;;DPFPERF +VcObdDpf;Vc09DPFPerfDP;Ratio Id for DPF soot filtration efficiency below threshold DP-sensor;VcFiDPFPerfDP;;; +VcAcPMon;Vc09AcPSnsrStck;Ratio Id for AC pressure sensor stuck;VcFiAcPMon;;;ACPS_S +VcTmEdMon;Vc09EdWtrPmpTOffsHi;Ratio Id for ED circuit water pump temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdWtrPmpTOffsLo;Ratio Id for ED circuit water pump temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdLtClntTOffsHi;Ratio Id for ED circuit coolant temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdLtClntTOffsLo;Ratio Id for ED circuit coolant temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdCiddClntTOffsHi;Ratio Id for ED circuit Cidd coolant temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdCiddClntTOffsLo;Ratio Id for ED circuit Cidd coolant temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdDcDcTOffsHi;Ratio Id for ED circuit DcDc temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdDcDcTOffsLo;Ratio Id for ED circuit DcDc temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdHvgWndgTOffsHi;Ratio Id for ED circuit Hvg winding temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdHvgWndgTOffsLo;Ratio Id for ED circuit Hvg winding temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdHvgInvTOffsHi;Ratio Id for ED circuit Hvg interver temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdHvgInvTOffsLo;Ratio Id for ED circuit Hvg inverter temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdEradWndgTOffsHi;Ratio Id for ED circuit Erad winding temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdEradWndgTOffsLo;Ratio Id for ED circuit Erad winding temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdEradInvTOffsHi;Ratio Id for ED circuit Erad inverter temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdEradInvTOffsLo;Ratio Id for ED circuit Erad inverter temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdWtrPmpTStuck;Ratio Id for ED circuit water pump temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdLtClntTStuck;Ratio Id for ED circuit coolant temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdCiddClntTStuck;Ratio Id for ED circuit Cidd coolant temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdDcDcTStuck;Ratio Id for ED circuit DcDc temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdHvgWndgTStuck;Ratio Id for ED circuit Hvg winding temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdHvgInvTStuck;Ratio Id for ED circuit Hvg inverter temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdEradWndgTStuck;Ratio Id for ED circuit Erad winding temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdEradInvTStuck;Ratio Id for ED circuit Erad inverter temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdCoolgPfmncLo;Ratio Id for ED circuit system cooling performance error;VcFiEdCoolgPfmncMon;;; +VcTmEdMon;Vc09EdElecMotTOffsHi;Ratio Id for ED circuit Electric Motor temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdElecMotTOffsLo;Ratio Id for ED circuit Electric Motor temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdElecMotTStuck;Ratio Id for ED circuit Electric Motor temp sensor stuck;VcFiEdTStuckMon;;; +VcObdLnt;Vc09ObdLnt;Ratio Id for LNT performance monitor;VcFiObdLnt;;;NTMA +VcObdLntNox;Vc09ObdLntNox;Ratio Id for LNT performance monitor;VcFiObdLntNox;;; +VcMtThMon;Vc09MtWtrPmpTOffsLo;Ratio Id for ED circuit water pump temp sensor offset low;VcFiMtWtrPmpTOffs;;;EdcpKoTLow +VcMtThMon;Vc09MtLtClntTOffsHi;Ratio Id for ED circuit coolant temp sensor offset high;VcFiMtTOffs;;;MTCSKoHi +VcMtThMon;Vc09MtLtClntTOffsLo;Ratio Id for ED circuit coolant temp sensor offset low;VcFiMtTOffs;;;MTCSKoLow +VcMtThMon;Vc09MtCiddClntTOffsHi;Ratio Id for ED circuit Cidd coolant temp sensor offset high;VcFiMtCiddClntTOffs;;;CcidKoHi +VcMtThMon;Vc09MtCiddClntTOffsLo;Ratio Id for ED circuit Cidd coolant temp sensor offset low;VcFiMtCiddClntTOffs;;;CcidKoLow +VcMtThMon;Vc09MtEradInvTOffsHi;Ratio Id for ED circuit Erad inverter temp sensor offset high;VcFiMtTOffs;;;EradKoHi +VcMtThMon;Vc09MtEradInvTOffsLo;Ratio Id for ED circuit Erad inverter temp sensor offset low;VcFiMtTOffs;;;RtIdEradKoLow +VcMtThMon;Vc09MtWtrPmpTStuck;Ratio Id for ED circuit water pump temp sensor stuck (EDCP);VcFiMtWtrPmpTStuck;;;RtIdEdcpTStuck +VcMtThMon;Vc09MtLtClntTStuck;Ratio Id for ED circuit coolant temp sensor stuck;VcFiMtLtClntTStuck;;;MTCSStuck +VcMtThMon;Vc09MtCiddClntTStuck;Ratio Id for ED circuit Cidd coolant temp sensor stuck;VcFiMtCiddClntTStuck;;;CcidTStuck +VcMtThMon;Vc09MtHvgWndgTStuck;Ratio Id for ED circuit Hvg winding temp sensor stuck;VcFiMtHvgWndgTStuck;;;STCISGT +VcMtThMon;Vc09MtEradInvTStuck;Ratio Id for ED circuit Erad inverter temp sensor stuck;VcFiMtEradInvTStuck;;;EradTStuck +VcMtThMon;Vc09HvBattTOutStuck;Ratio Id for HvBattery Coolant Outlet Temp sensor stuck;VcFiHvBattTOut;;;HvBattTStuck +VcMtThMon;Vc09HvBattTOutOffsHi;Ratio Id for HvBattery Coolant Outlet Temp sensor offset high;VcFiHvBattTOffs;;;HvBattTKoHi +VcMtThMon;Vc09HvBattTOutOffsLo;Ratio Id for HvBattery Coolant Outlet Temp sensor offset low;VcFiHvBattTOffs;;;HvBattTKoLow +VcMtThMon;Vc09MtThStuckClsd;Ratio Id for ED cicruit thermostat stuck closed;VcFiMtThStuck;;;MTTHMS_CL +VcMtThMon;Vc09MtThStuckOpen;Ratio Id for ED cicruit thermostat stuck open;VcFiMtThStuck;;;MTTHMS_OP +VcMtThMon;Vc09HvBattActCoolgPerfLo;Ratio Id for reduced cooling performance for High voltage battery, AC assisted chiller cooling;VcFiHvBattCool;;;HvBattCool_1 +VcMtThMon;Vc09HvBattActCoolgPerfLoMIL;Ratio Id for reduced cooling performance for High voltage battery, AC assisted chiller cooling;VcFiHvBattCool;;;HvBattCool_2 +VcMtThMon;Vc09HvBattPasCoolgPerfLoMIL;Ratio Id for reduced cooling performance for High voltage battery, radiator cooling;VcFiHvBattCool;;;HvBattCool_3 +VcMtThMon;Vc09HvBattPasCoolgPerfLo;Ratio Id for reduced cooling performance for High voltage battery, radiator cooling;VcFiHvBattCool;;;HvBattCool_4 +VcNoxSensMgr;Vc09NOxSensUsVoltageError;Ratio Id for Voltage too high/low error;VcFiNOxSensUsVoltageDiag;;; +VcNoxSensMgr;Vc09NOxSensUsProbeLnError;Ratio Id for Probe line electrical error;VcFiNOxSensUsProbeLnDiag;;; +VcNoxSensMgr;Vc09NOxSensUsHeaterLnError;Ratio Id for Heater line electrical error;VcFiNOxSensUsProbeLnDiag;;; +VcNoxSensMgr;Vc09NOxSensUsHeaterError;Ratio Id for Heater performance error;VcFiNOxSensUsHeaterDiag;;; +VcNoxSensMgr;Vc09NOxSensUsMountingError;Ratio Id for Mounting error (not in exhaust flow);VcFiNOxSensUsMountingDiag;;; +VcNoxSensMgr;Vc09NOxSensUsAvailabilityError;Ratio Id for NOx signal status invalid too much;VcFiNOxSensUsAvailabilityDiag;;; +VcNoxSensMgr;Vc09NOxSensUsReadinessError;Ratio Id for Sensor readiness not reached in time;VcFiNOxSensUsReadinessDiag;;; +VcNoxSensMgr;Vc09NOxSensUsCurveDiagAError;Ratio Id for Nox signal slope error ;VcFiNOxSensUsCurveDiagA;;; +VcNoxSensMgr;Vc09NOxSensDsVoltageError;Ratio Id for Voltage too high/low error;VcFiNOxSensDsVoltageDiag;;; +VcNoxSensMgr;Vc09NOxSensDsProbeLnError;Ratio Id for Probe line electrical error;VcFiNOxSensDsProbeLnDiag;;; +VcNoxSensMgr;Vc09NOxSensDsHeaterLnError;Ratio Id for Heater line electrical error;VcFiNOxSensDsProbeLnDiag;;; +VcNoxSensMgr;Vc09NOxSensDsHeaterError;Ratio Id for Heater performance error;VcFiNOxSensDsHeaterDiag;;; +VcNoxSensMgr;Vc09NOxSensDsMountingError;Ratio Id for Mounting error (not in exhaust flow);VcFiNOxSensDsMountingDiag;;; +VcNoxSensMgr;Vc09NOxSensDsAvailabilityError;Ratio Id for NOx signal status invalid too much;VcFiNOxSensDsAvailabilityDiag;;; +VcNoxSensMgr;Vc09NOxSensDsReadinessError;Ratio Id for Sensor readiness not reached in time;VcFiNOxSensDsReadinessDiag;;; +VcNoxSensMgr;Vc09NOxSensDsCurveDiagAError;Ratio Id for Nox signal slope error ;VcFiNOxSensDsCurveDiagA;;; +VcObdNoxSOfs;Vc09NOxSensUsOfsTst;Ratio Id for Upstream NOx sensor offset test;VcFiNOxSensOfs;;; +VcObdNoxSOfs;Vc09NOxSensMidOfsTst;Ratio Id for Mid NOx sensor offset test;VcFiNOxSensOfs;;; +VcObdNoxSOfs;Vc09NOxSensDsOfsTst;Ratio Id for Downstream NOx sensor offset test;VcFiNOxSensOfs;;; +VcObdNoxSO2;Vc09NOxSensUsOxyToMdl;Ratio Id for Upstream NOx sensor O2 concentration sensor to model;VcFiNOxSensO2;;; +VcObdNoxSO2;Vc09NOxSensMidOxyToMdl;Ratio Id for Mid NOx sensor O2 concentration sensor to model;VcFiNOxSensO2;;; +VcObdNoxSO2;Vc09NOxSensDsOxyToMdl;Ratio Id for Downstream NOx sensor O2 concentration sensor to model;VcFiNOxSensO2;;; +VcObdScr;Vc09ScrConvEff;Ratio Id for SCR Conversion efficiency too low;VcFiScrConvEff;;; +VcObdScr;Vc09Scr1ConvEff;Ratio Id for SCR1 Conversion efficiency too low;VcFiScr1ConvEff;;; +VcObdScr;Vc09Scr2ConvEff;Ratio Id for SCR2 Conversion efficiency too low;VcFiScr2ConvEff;;; +Unused;Vc09Unused;Unused monitors;VcFiUnused;;; +VcFtivMon;Vc09FtivMon;Ratio Id Fuel tank isolation valve monitor;VcFiFtivMon;;; +VcPurgMon;Vc09PurgMonMp;Ratio Id purge monitor manifold purge ;VcFiPurgMon;;; +VcPurgMon;Vc09PurgMonVp;Ratio Id purge monitor over pressure purge;VcFiPurgMon;;; +VcLamCtrlM;Vc09LamCtrlMFirstSt;Ratio Id lambda control closed loop monitor first start;VcFiLamCtrlM;;; +VcLamCtrlM;Vc09LamCtrlMReSt;Ratio Id lambda control closed loop monitor restart;VcFiLamCtrlM;;; +VcObdGpf;Vc09ObdGpf;Ratio Id for gasoline particle filter monitor;VcFiObdGpf;;; +VcTmEdMon;Vc09EdLtClntPreRadTOffsHi;Ratio Id for ED circuit coolant temp sensor (before radiator) offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdLtClntPreRadTOffsLo;Ratio Id for ED circuit coolant temp sensor (before radiator) offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdLtClntPreRadTStuck;Ratio Id for ED circuit coolant temp sensor (before radiator) stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdObc1TOffsHi;Ratio Id for ED circuit OBC1 temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdObc1TOffsLo;Ratio Id for ED circuit OBC1 temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdObc1TStuck;Ratio Id for ED circuit OBC1 temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;Vc09EdObc2TOffsHi;Ratio Id for ED circuit OBC2 temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdObc2TOffsLo;Ratio Id for ED circuit OBC2 temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;Vc09EdObc2TStuck;Ratio Id for ED circuit OBC 2temp sensor stuck;VcFiEdTStuckMon;;; +VcLeakMon;Vc09LeakMon;Ratio Id for leakage detection monitor;VcFiLeakMon;;; +VcTmEdMon;Vc09EdCoolgPfmncLo2;Ratio Id for ED circuit system cooling performance error;VcFiEdCoolgPfmncMon;;; +VcTmEdMon;Vc09EdRadrVlvStuckOpen;Ratio Id for ED circuit radiator valve stuck open;VcFiEdCoolgPfmncMon;;; +VcTmEdMon;Vc09EdRadrVlvStuckClsd;Ratio Id for ED circuit radiator valve stuck closed;VcFiEdCoolgPfmncMon;;; +VcLinCptM;Vc09EwpSpdErr;Ratio Id for for Edcp actual speed and req speed mismatch;VcFiEDEwpSpdMon;;; +VcEmiPlsM;Vc09MidO2SnsrPlausMon;Ratio Id for middle oxygen sensor plausability monitor;VcFiMidO2SnsrPlausMon;;; +VcAccelM;Vc09AccelMStuck;Ratio Id for accelerometer monitor stuck check;VcFiAccelMStuck;;; +VcAccelM;Vc09AccelMOffs;Ratio Id for accelerometer monitor offset check;VcFiAccelMOffs;;; +VcObdDpms;Vc09DpmsTPlaus;Ratio Id for Key on check of temperature meander;VcFiDpmsTPlaus;;; +VcObdDpms;Vc09DpmsProtTubePlaus;Ratio Id for Detection of clogged protection tube;VcFiDpmsProtTubePlaus;;; +VcObdDpms;Vc09DpmsHtrPlaus;Ratio Id for Heater plausibility check;VcFiDpmsHtrPlaus;;; +VcObdDpms;Vc09DpmsIDEPlaus;Ratio Id for IDE plausibility check;VcFiDpmsIDEPlaus;;; +VcObdDpms;Vc09DpmsShntCircPlaus;Ratio Id for IDE shunt circuit plausibility check;VcFiDpmsShntCircPlaus;;; +VcObdDpms;Vc09PMSnsrGainFault;Ratio Id for PM sensor gain fault;VcFiPMSnsrGainFault;;; +VcObdDpms;Vc09PMSnsrRegenTOut;Ratio Id for PM sensor regeneration time out;VcFiPMSnsrRegenTOut;;; +VcObdDpms;Vc09PMSnsrOutOfExh;Ratio Id for PM sensor removed/out of exhaust;VcFiPMSnsrOutOfExh;;; +VcObdDpms;Vc09PMSnsrCloggedTip;Ratio Id for PM Sensor clogged tip;VcFiPMSnsrCloggedTip;;; +VcLamCilM;Vc09CilM;Ratio Id for Cylinder Imbalance Monitor;VcFiCilM;;; +VcTempWcacThM;Vc09WcacThSlw;Ratio Id for WCAC cooling circuit slow heat up fault;VcFiWcacThM;;; +VcLinBypVlvM;Vc09BypVlvPosTarDiff ;Ratio Id for Lin Bypass Valve Target VS Position Monitor;VcFiLinBypVlvM;;; +VcCdPinM;Vc09CdPinMHiAct1;Ratio Id for Sliding Camshaft Monitor Actuator Pin 1, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct2;Ratio Id for Sliding Camshaft Monitor Actuator Pin 2, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct3;Ratio Id for Sliding Camshaft Monitor Actuator Pin 3, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct4;Ratio Id for Sliding Camshaft Monitor Actuator Pin 4, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct5;Ratio Id for Sliding Camshaft Monitor Actuator Pin 5, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct6;Ratio Id for Sliding Camshaft Monitor Actuator Pin 6, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct7;Ratio Id for Sliding Camshaft Monitor Actuator Pin 7, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMHiAct8;Ratio Id for Sliding Camshaft Monitor Actuator Pin 8, High Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct1;Ratio Id for Sliding Camshaft Monitor Actuator Pin 1, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct2;Ratio Id for Sliding Camshaft Monitor Actuator Pin 2, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct3;Ratio Id for Sliding Camshaft Monitor Actuator Pin 3, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct4;Ratio Id for Sliding Camshaft Monitor Actuator Pin 4, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct5;Ratio Id for Sliding Camshaft Monitor Actuator Pin 5, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct6;Ratio Id for Sliding Camshaft Monitor Actuator Pin 6, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct7;Ratio Id for Sliding Camshaft Monitor Actuator Pin 7, Low Side;VcFiCdPinM;;; +VcCdPinM;Vc09CdPinMLoAct8;Ratio Id for Sliding Camshaft Monitor Actuator Pin 8, Low Side;VcFiCdPinM;;; +VcTmHvacVlvM;Vc09HvacCooltVlvStuck;Ratio Id for Hvac Valve Stuck Monitor;VcFiHvacVlvMon;;; +VcTmHvacClntTM;Vc09HvacCooltTStuck;Ratio Id for Hvac Coolant Stuck Monitor;VcFiHvacCooltTStuckMon;;; +VcTmHvacClntTM;Vc09HvacCooltTOffsHi;Ratio Id for Hvac Coolant Offset Monitor;VcFiHvacCooltTOffsMon;;; +VcTmHvacClntTM;Vc09HvacCooltTOffsLo;Ratio Id for Hvac Coolant Offset Monitor;VcFiHvacCooltTOffsMon;;; +VcEmiPlsM;Vc09AftO2SnsrPlausMon;Ratio Id for after oxygen sensor plausability monitor;VcFiAftO2SnsrPlausMon;;; +VcOilPrMon;Vc09OilPOffsHiMon;Ratio Id for high offset test monitor;VcFiOilPrMonOffs;;; +VcOilPrMon;Vc09OilPOffsLoMon;Ratio Id for low offset test monitor;VcFiOilPrMonOffs;;; +VcNoxSensMgr;Vc09NOxSensMidVoltageError;Ratio Id for Voltage too high/low error;VcFiNOxSensMidVoltageDiag;;; +VcNoxSensMgr;Vc09NOxSensMidProbeLnError;Ratio Id for Probe line electrical error;VcFiNOxSensMidProbeLnDiag;;; +VcNoxSensMgr;Vc09NOxSensMidHeaterLnError;Ratio Id for Heater line electrical error;VcFiNOxSensMidProbeLnDiag;;; +VcNoxSensMgr;Vc09NOxSensMidHeaterError;Ratio Id for Heater performance error;VcFiNOxSensMidHeaterDiag;;; +VcNoxSensMgr;Vc09NOxSensMidMountingError;Ratio Id for Mounting error (not in exhaMidt flow);VcFiNOxSensMidMountingDiag;;; +VcNoxSensMgr;Vc09NOxSensMidAvailabilityError;Ratio Id for NOx signal statMid invalid too much;VcFiNOxSensMidAvailabilityDiag;;; +VcNoxSensMgr;Vc09NOxSensMidReadinessError;Ratio Id for Sensor readiness not reached in time;VcFiNOxSensMidReadinessDiag;;; +VcNoxSensMgr;Vc09NOxSensMidCurveDiagAError;Ratio Id for Nox signal slope error ;VcFiNOxSensMidCurveDiagA;;; diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPRDen.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPRDen.csv new file mode 100644 index 0000000..24f7ee8 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_IUMPRDen.csv @@ -0,0 +1,64 @@ +;;;;This sheet does not have projects +IUMPR Id Name;Description;IUMPR Denominator trigger;Comments; +Vc09CatMon;Ratio Id for catalyst monitor;0;; +Vc09CatalystO2StorageMon;Ratio Id for catalyst monitor;0;; +Vc09SecO2SnsrDynMon;Ratio Id for catalyst monitor;0;; +Vc09SecO2AdpMon;Ratio Id for secondary fuel trim monitor;0;; +Vc09SecO2SnsrPlausMon;Ratio Id for secondary oxygen sensor plausability monitor;0;; +Vc09PrimO2SnsrSlowRespMon;Ratio ID for front lambda sensor slow response;0;; +Vc09LamAdpMon;Ratio ID for Fueltrim;0;; +Vc09AmbTKohlHi;Ratio Id for offset monitor of the ambient air temperature sensor, offset high;2;; +Vc09AmbTKohlLo;Ratio Id for offset monitor of the ambient air temperature sensor, offset low;2;; +Vc09IntkAirTKohlHi;Ratio Id for offset monitor of the intake air temperature sensor, offset high;2;; +Vc09IntkAirTKohlLo;Ratio Id for offset monitor of the intake air temperature sensor, offset low;2;; +Vc09BstTKohlHi;Ratio Id for offset monitor of the boost air temperature sensor, offset high;2;; +Vc09BstTKohlLo;Ratio Id for offset monitor of the boost air temperature sensor, offset low;2;; +Vc09ClntTKohlHi;Ratio Id for offset monitor of the engine coolant temperature sensor, offset high;2;; +Vc09ClntTKohlLo;Ratio Id for offset monitor of the engine coolant temperature sensor, offset low;2;; +Vc09OilTKohlHi;Ratio Id for offset monitor of the oil temperature sensor, offset high;2;; +Vc09OilTKohlLo;Ratio Id for offset monitor of the oil temperature sensor, offset low;2;; +Vc09InManiTKohlHi;Ratio Id for offset monitor of the intake manifold air temperature sensor, offset high;2;; +Vc09InManiTKohlLo;Ratio Id for offset monitor of the intake manifold air temperature sensor, offset low;2;; +Vc09BstTStkM;Ratio Id for stuck in range monitor of the boost air temperature sensor;2;; +Vc09ClntTStkM;Ratio Id for stuck in range monitor of the engine coolant temperature sensor;2;; +Vc09IntkAirTStkM;Ratio Id for stuck in range monitor of the intake air temperature sensor;2;; +Vc09InManiTStkM;Ratio Id for stuck in range monitor of the intake manifold air temperature sensor;2;; +Vc09OilTStkM;Ratio Id for stuck in range monitor of the Oil temperature sensor;2;; +Vc09ThLk;Ratio Id for thermostat leakage fault;2;; +Vc09ThSlw;Ratio Id for thermostat slow heat up fault;2;; +Vc09ThContnsMon;Ratio Id for continuous thermostat fault;0;; +Vc09AcPSnsrStck;Ratio Id for AC pressure sensor stuck;0;; +Vc09PurgMonMp;Ratio Id purge monitor manifold purge ;2;; +Vc09PurgMonVp;Ratio Id purge monitor over pressure purge;1;; +Vc09LamCtrlMFirstSt;Ratio Id lambda control closed loop monitor first start;0;; +Vc09LamCtrlMReSt;Ratio Id lambda control closed loop monitor restart;0;; +Vc09ObdGpf;Ratio Id for gasoline particle filter monitor;0;; +Vc09LeakMon;Ratio Id for leakage detection monitor;2;; +Vc09MidO2SnsrPlausMon;Ratio Id for middle oxygen sensor plausability monitor;0;; +Vc09AccelMStuck;Ratio Id for accelerometer monitor stuck check;0;; +Vc09AccelMOffs;Ratio Id for accelerometer monitor offset check;0;; +Vc09CilM;Ratio Id for Cylinder Imbalance Monitor;0;; +Vc09EdWtrPmpTOffsHi;Ratio Id for ED circuit water pump temp sensor offset high;2;; +Vc09EdWtrPmpTOffsLo;Ratio Id for ED circuit water pump temp sensor offset low;2;; +Vc09EdLtClntTOffsHi;Ratio Id for ED circuit coolant temp sensor offset high;2;; +Vc09EdLtClntTOffsLo;Ratio Id for ED circuit coolant temp sensor offset low;2;; +Vc09EdCiddClntTOffsHi;Ratio Id for ED circuit Cidd coolant temp sensor offset high;2;; +Vc09EdCiddClntTOffsLo;Ratio Id for ED circuit Cidd coolant temp sensor offset low;2;; +Vc09EdDcDcTOffsHi;Ratio Id for ED circuit DcDc temp sensor offset high;2;; +Vc09EdDcDcTOffsLo;Ratio Id for ED circuit DcDc temp sensor offset low;2;; +Vc09EdHvgWndgTOffsHi;Ratio Id for ED circuit Hvg winding temp sensor offset high;2;; +Vc09EdHvgWndgTOffsLo;Ratio Id for ED circuit Hvg winding temp sensor offset low;2;; +Vc09EdHvgInvTOffsHi;Ratio Id for ED circuit Hvg interver temp sensor offset high;2;; +Vc09EdHvgInvTOffsLo;Ratio Id for ED circuit Hvg inverter temp sensor offset low;2;; +Vc09EdEradWndgTOffsHi;Ratio Id for ED circuit Erad winding temp sensor offset high;2;; +Vc09EdEradWndgTOffsLo;Ratio Id for ED circuit Erad winding temp sensor offset low;2;; +Vc09EdEradInvTOffsHi;Ratio Id for ED circuit Erad inverter temp sensor offset high;2;; +Vc09EdEradInvTOffsLo;Ratio Id for ED circuit Erad inverter temp sensor offset low;2;; +Vc09EdWtrPmpTStuck;Ratio Id for ED circuit water pump temp sensor stuck;2;; +Vc09EdLtClntTStuck;Ratio Id for ED circuit coolant temp sensor stuck;2;; +Vc09EdCiddClntTStuck;Ratio Id for ED circuit Cidd coolant temp sensor stuck;2;; +Vc09EdDcDcTStuck;Ratio Id for ED circuit DcDc temp sensor stuck;2;; +Vc09EdHvgWndgTStuck;Ratio Id for ED circuit Hvg winding temp sensor stuck;2;; +Vc09EdHvgInvTStuck;Ratio Id for ED circuit Hvg inverter temp sensor stuck;2;; +Vc09EdEradWndgTStuck;Ratio Id for ED circuit Erad winding temp sensor stuck;2;; +Vc09EdEradInvTStuck;Ratio Id for ED circuit Erad inverter temp sensor stuck;2;; diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Mode$06.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Mode$06.csv new file mode 100644 index 0000000..ad87300 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Mode$06.csv @@ -0,0 +1,101 @@ +;;;;;;PROJECTS;Comments +Model name;Mode $06 Name;Description;Fid;Unit and Scaling ID;Comments;ClimCtr;Old Id +VcAesTrboM;Vc06BoostHiPlausMon;Test Result Id for high boost pressure Monitoring;VcFiBoostPPlausMon;17;;;BSTR_HI +VcAesTrboM;Vc06BoostLoPlausMon;Test Result Id for low boost pressure Monitoring;VcFiBoostPPlausMon;17;;;BSTR_LO +VcAesTrboMg3;Vc06Boost1HiPlausMon;Test Result Id for high boost pressure 1 Monitoring;VcFiBoostPPlausMon;17;;; +VcAesTrboMg3;Vc06Boost1LoPlausMon;Test Result Id for low boost pressure 1 Monitoring;VcFiBoostPPlausMon;17;;; +VcAesTrboMg3;Vc06Boost2HiPlausMon;Test Result Id for high boost pressure 2 Monitoring;VcFiBoostPPlausMon;17;;; +VcAesTrboMg3;Vc06Boost2LoPlausMon;Test Result Id for low boost pressure 2 Monitoring;VcFiBoostPPlausMon;17;;; +VcAesObd;Vc06PCVLeakMon;Test Result Id for PCV Leakage Monitor;VcFiPCVLeakMon;17;;; +VcEmiCatM;Vc06CatMon;Test Result Id for catalyst monitor;VcFiCatMon;3A;3A = 0.001g / LSB;; +VcEmiOscM;Vc06CatalystO2StorageMon;Test Result Id for catalyst monitor;VcFiCatalystO2StorageMon;3A;;; +VcEmiOscM;Vc06SecO2SnsrDynMon;Test Result Id for catalyst monitor;VcFiCatalystO2StorageMon;10;10 = 1ms/LSB;; +VcEmiPlsM;Vc06SecO2SnsrPlausLeanMon;Test result Id for secondary oxygen sensor plausability monitor lean;VcFiSecO2SnsrPlausMon;0A;0A = 0.122mV/LSB;; +VcEmiPlsM;Vc06SecO2SnsrPlausRichMon;Test result Id for secondary oxygen sensor plausability monitor rich;VcFiSecO2SnsrPlausMon;0A;;; +VcEmiPlsM;Vc06SecO2SnsrPlausAmplMon;Test result Id for secondary oxygen sensor plausability monitor amplitude;VcFiSecO2SnsrPlausMon;0A;;; +VcLamDynCcM;Vc06LamSnsrSlowRespSlpMon;Test result Id for front lambda sensor slow response;VcFiPrimO2SnsrSlowRespMon;90;90 = 1ms/LSB;; +VcLamDynCcM;Vc06LamSnsrSlowRespMon;Test result Id for front lambda sensor slow response;VcFiPrimO2SnsrSlowRespMon;90;90 = 1ms/LSB;; +VcAesEgrM;Vc06EgrLoFlw;Test result Id for EGR Lo flow fault;VcFiEgrSysMon;28;;; +VcAesEgrM;Vc06EgrHiFlw;Test result Id for EGR Hi flow fault;VcFiEgrSysMon;28;;; +VcAesEgrM;Vc06EgrAr;Test result Id for EGR flow fault;VcFiEgrAr;1;;;EGRAR +VcAesEgrM;Vc06EgrClrMnr;Test result Id for EGR cooler fault;VcFiEgrClrMnr;3;;;EGRCLRR +VcObdDpfDpms;Vc06DPFPerfDpms;Test Result Id for DPF soot filtration efficiency below threshold Soot Sensor ;VcFiDPFPerfDpms;1;;;DPFPERF +VcObdDpf;Vc06DPFPerfDP;Test Result Id for DPF soot filtration efficiency below threshold DP-sensor;VcFiDPFPerfDP;83;;; +VcObdLnt;Vc06ObdLnt;Test Result Id for LNT performance monitor;VcFiObdLnt;3;;;NTMA +VcObdLntNox;Vc06ObdLntNox;Test Result Id for LNT performance monitor;VcFiObdLntNox;3B;g (0-6,5335);; +VcNoxSensMgr;Vc06NOxSensUsMountingError;Test Result Id for Mounting error (not in exhaust flow);VcFiNOxSensUsMountingDiag;2E;True/false;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensUsAvailabilityError;Test Result Id for NOx signal status invalid too much;VcFiNOxSensUsAvailabilityDiag;20; Ratio (0-1) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensUsReadinessError;Test Result Id for Sensor readiness not reached in time;VcFiNOxSensUsReadinessDiag;91; S (0-900) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensUsCurveDiagAError;Test Result Id for Nox signal slope error ;VcFiNOxSensUsCurveDiagA;2F; %  (0-255%) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensDsMountingError;Test Result Id for Mounting error (not in exhaust flow);VcFiNOxSensDsMountingDiag;2E;True/false;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensDsAvailabilityError;Test Result Id for NOx signal status invalid too much;VcFiNOxSensDsAvailabilityDiag;20; Ratio (0-1);;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensDsReadinessError;Test Result Id for Sensor readiness not reached in time;VcFiNOxSensDsReadinessDiag;91;S (0-900) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensDsCurveDiagAError;Test Result Id for Nox signal slope error ;VcFiNOxSensDsCurveDiagA;2F; %  (0-255%) ;;Remove this for GenIII? +VcObdNoxSOfs;Vc06NOxSensUsOfsTst;Test Result Id for Upstream NOx sensor offset test;VcFiNOxSensOfs;40; Ppm (0-1650) ;; +VcObdNoxSOfs;Vc06NOxSensMidOfsTst;Test Result Id for Mid NOx sensor offset test;VcFiNOxSensOfs;40; Ppm (0-1650) ;; +VcObdNoxSOfs;Vc06NOxSensDsOfsTst;Test Result Id for Downstream NOx sensor offset test;VcFiNOxSensOfs;40; Ppm (0-1650) ;; +VcObdNoxSO2;Vc06NOxSensUsOxyToMdl;Test Result Id for Upstream NOx sensor O2 concentration sensor to model;VcFiNOxSensO2;30; % (0-100) ;; +VcObdNoxSO2;Vc06NOxSensMidOxyToMdl;Test Result Id for Mid NOx sensor O2 concentration sensor to model;VcFiNOxSensO2;30; % (0-100) ;; +VcObdNoxSO2;Vc06NOxSensDsOxyToMdl;Test Result Id for Downstream NOx sensor O2 concentration sensor to model;VcFiNOxSensO2;30; % (0-100) ;; +VcObdScr;Vc06ScrConvEff;Test Result Id for SCR Conversion efficiency too low;VcFiScrConvEff;20; Ratio (0-1) ;; +VcObdScr;Vc06Scr1ConvEff;Test Result Id for SCR1 Conversion efficiency too low;VcFiScr1ConvEff;20; Ratio (0-1) ;; +VcObdScr;Vc06Scr2ConvEff;Test Result Id for SCR2 Conversion efficiency too low;VcFiScr2ConvEff;20; Ratio (0-1) ;; +Unused;Vc06Unused;Unused monitors;VcFiUnused;;;; +VcPurgMon;Vc06PurgMonMp;Test result Id purge monitor manifold purge ;VcFiPurgMon;5;;; +VcPurgMon;Vc06PurgMonVp;Test result Id purge monitor over pressure purge;VcFiPurgMon;5;;; +VcLamCtrlM;Vc06LamCtrlMFirstSt;Test result Id lambda control closed loop monitor first start;VcFiLamCtrlM;12;;; +VcLamCtrlM;Vc06LamCtrlMReSt;Test result Id lambda control closed loop monitor restart;VcFiLamCtrlM;12;;; +VcObdGpf;Vc06ObdGpf;Test result Id for gasoline particle filter monitor;VcFiObdGpf;83;;; +VcLeakMon;Vc06LeakMon;Test result Id for leakage detection monitor;VcFiLeakMon;32;;; +VcNoxSensMgr;Vc06NOxSensUsHeater;Test result id for Us Heater capacity monitor;VcFiNOxSensUsHeaterDiag;91; s (0-900) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensDsHeater;Test result id for Ds Heater capacity monitor;VcFiNOxSensDsHeaterDiag;91; s (0-900) ;;Remove this for GenIII? +VcEmiPlsM;Vc06MidO2SnsrPlausLeanMon;Test result Id for middle oxygen sensor plausability monitor lean;VcFiMidO2SnsrPlausMon;0A;0A = 0.122mV/LSB;; +VcEmiPlsM;Vc06MidO2SnsrPlausRichMon;Test result Id for middle oxygen sensor plausability monitor rich;VcFiMidO2SnsrPlausMon;0A;;; +VcEmiPlsM;Vc06MidO2SnsrPlausAmplMon;Test result Id for middle oxygen sensor plausability monitor amplitude;VcFiMidO2SnsrPlausMon;0A;;; +VcLeakMon;Vc06LeakMonBlocked;Test result Id for leakage detection monitor blocked lines;VcFiLeakMon;12;;; +VcLeakMon;Vc06LeakMonRefPres;Test result Id for leakage detection monitor pressure sensor fault;VcFiLeakMon;17;;; +VcObdDpms;Vc06DpmsTPlaus;Test result Id Key on check of temperature meander;VcFiDpmsTPlaus;96;degC;; +VcObdDpms;Vc06DpmsProtTubePlaus;Test result Id Detection of clogged protection tube;VcFiDpmsProtTubePlaus;91;s;; +VcObdDpms;Vc06DpmsHtrPlaus;Test result Id Heater plausibility check;VcFiDpmsHtrPlaus;13;Ohm results are in the range of 0 to 20 Ohm;; +VcObdDpms;Vc06DpmsIDEPlaus;Test result Id IDE plausibility check;VcFiDpmsIDEPlaus;41;uA;; +VcObdDpms;Vc06DpmsShntCircPlaus;Test result Id IDE shunt circuit plausibility check;VcFiDpmsShntCircPlaus;41;uA;; +VcObdDpms;Vc06PMSnsrGainFault;Test result Id for PM sensor gain fault;VcFiPMSnsrGainFault;3;;; +VcObdDpms;Vc06PMSnsrRegenTOut;Test result Id for PM sensor regeneration time out;VcFiPMSnsrRegenTOut;2F;% (perc failed regen attemps) RegenTOut should be linked to Heater MID;; +VcObdDpms;Vc06PMSnsrOutOfExh;Test result Id for PM sensor removed/out of exhaust;VcFiPMSnsrOutOfExh;96;degC;; +VcObdDpms;Vc06PMSnsrCloggedTip;Test result Id for PM Sensor clogged tip;VcFiPMSnsrCloggedTip;16;degC;; +VcLamCilM;Vc06CilMSfb;Test result Id for Cylinder Imbalance Monitor Sub-Feedback;VcFiCilM;5;;; +VcLamCilM;Vc06CilMLam;Test result Id for Cylinder Imbalance Monitor Lambda Oscillation;VcFiCilM;6;;; +VcLamCilM;Vc06CilMEngSpd;Test result Id for Cylinder Imbalance Monitor Engine Speed Oscillation;VcFiCilM;3;;; +VcCdPinM;Vc06CdPinMHiAct1;Test result Id for Sliding Camshaft Monitor Actuator Pin 1, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct2;Test result Id for Sliding Camshaft Monitor Actuator Pin 2, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct3;Test result Id for Sliding Camshaft Monitor Actuator Pin 3, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct4;Test result Id for Sliding Camshaft Monitor Actuator Pin 4, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct5;Test result Id for Sliding Camshaft Monitor Actuator Pin 5, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct6;Test result Id for Sliding Camshaft Monitor Actuator Pin 6, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct7;Test result Id for Sliding Camshaft Monitor Actuator Pin 7, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMHiAct8;Test result Id for Sliding Camshaft Monitor Actuator Pin 8, High Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct1;Test result Id for Sliding Camshaft Monitor Actuator Pin 1, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct2;Test result Id for Sliding Camshaft Monitor Actuator Pin 2, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct3;Test result Id for Sliding Camshaft Monitor Actuator Pin 3, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct4;Test result Id for Sliding Camshaft Monitor Actuator Pin 4, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct5;Test result Id for Sliding Camshaft Monitor Actuator Pin 5, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct6;Test result Id for Sliding Camshaft Monitor Actuator Pin 6, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct7;Test result Id for Sliding Camshaft Monitor Actuator Pin 7, Low Side;VcFiCdPinM;1D;;; +VcCdPinM;Vc06CdPinMLoAct8;Test result Id for Sliding Camshaft Monitor Actuator Pin 8, Low Side;VcFiCdPinM;1D;;; +VcEmiPlsM;Vc06AftO2SnsrPlausLeanMon;Test result Id for after oxygen sensor plausability monitor lean;VcFiAftO2SnsrPlausMon;0A;0A = 0.122mV/LSB;; +VcEmiPlsM;Vc06AftO2SnsrPlausRichMon;Test result Id for after oxygen sensor plausability monitor rich;VcFiAftO2SnsrPlausMon;0A;;; +VcEmiPlsM;Vc06AftO2SnsrPlausAmplMon;Test result Id for after oxygen sensor plausability monitor amplitude;VcFiAftO2SnsrPlausMon;0A;;; +VcNoxSensMgr;Vc06NOxSensMidMountingError;Test Result Id for Mounting error (not in exhaMidt flow);VcFiNOxSensMidMountingDiag;2E;True/false;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensMidAvailabilityError;Test Result Id for NOx signal statMid invalid too much;VcFiNOxSensMidAvailabilityDiag;20; Ratio (0-1) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensMidReadinessError;Test Result Id for Sensor readiness not reached in time;VcFiNOxSensMidReadinessDiag;91; S (0-900) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensMidCurveDiagAError;Test Result Id for Nox signal slope error ;VcFiNOxSensMidCurveDiagA;2F; %  (0-255%) ;;Remove this for GenIII? +VcNoxSensMgr;Vc06NOxSensMidHeater;Test result id for Mid Heater capacity monitor;VcFiNOxSensMidHeaterDiag;91; s (0-900) ;;Remove this for GenIII? +VcObdNoxStartUp;Vc06NOxSnsrUsHtr;Test result id for Us Heater capacity monitor;VcFiNOxSnsrUsHtr;91; S (0-900) ;; +VcObdNoxStartUp;Vc06NOxSnsrMidHtr;Test result id for Mid Heater capacity monitor;VcFiNOxSnsrMidHtr;91; S (0-900) ;; +VcObdNoxStartUp;Vc06NOxSnsrDsHtr;Test result id for Ds Heater capacity monitor;VcFiNOxSnsrDsHtr;91; S (0-900) ;; +VcObdNoxStartUp;Vc06NOxSnsrUsReady;Test Result Id for Us Sensor readiness not reached in time;VcFiNOxSnsrUsReady;91; S (0-900) ;; +VcObdNoxStartUp;Vc06NOxSnsrMidReady;Test Result Id for Mid Sensor readiness not reached in time;VcFiNOxSnsrMidReady;91; S (0-900) ;; +VcObdNoxStartUp;Vc06NOxSnsrDsReady;Test Result Id for Ds Sensor readiness not reached in time;VcFiNOxSnsrDsReady;91; S (0-900) ;; +VcLamRespM;Vc06SymRespM;Test result ID for Front Oxygen Sensor Symmetric Slow Response;VcFiRespM;90;;; +VcLamRespM;Vc06LRRespM;Test result ID for Front Oxygen Sensor Lean to Rich Slow Response;VcFiRespM;90;;; +VcLamRespM;Vc06RLRespM;Test result ID for Front Oxygen Sensor Rich to Lean Slow Response;VcFiRespM;90;;; diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Ranking.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Ranking.csv new file mode 100644 index 0000000..88e5667 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/CoreIdNameDefinition_Ranking.csv @@ -0,0 +1,511 @@ +;;;;;PROJECTS; +Model name;Event Name;Description;Fid;Comments;ClimCtr;Old Id +VcAesObd;VcRvAmbPCompPlausMon;Ranking Id for Ambient Pressure Rationality Monitor;VcFiAmbPCompPlausMon;;;ATPR +VcAesObd;VcRvCacPAmbPPlausMon;Ranking Id for CAC pressure vs Ambient pressure test;VcFiCacPAmbPPlausMon;;;CACPAMBP +VcAesObd;VcRvCacPIntkPPlausMon;Ranking Id for Exhaust Manifold Pressure Rationality Monitor (sensor vs model);VcFiCacPIntkPPlausMon;;;CACPINTK +VcAesObd;VcRvCacPCompPlausMon;Ranking Id for CAC Pressure Rationality Monitor;VcFiCacPCompPlausMon;;;CACPR +VcAesObd;VcRvExhMnfldPCompPlausMon;Ranking Id for Exhaust Manifold Pressure Rationality Monitor;VcFiExhMnfldPCompPlausMon;;;EXHMPDR +VcAesObd;VcRvIntkMnfldFlwPlausEHMon;Ranking Id for Intake Manifold Rationality Monitor With EGR High Boost;VcFiIntkMnfldFlwMdlPlausMon;;;MAFR_EH +VcAesObd;VcRvIntkMnfldFlwPlausELMon;Ranking Id for Intake Manifold Rationality Monitor With EGR Low Boost;VcFiIntkMnfldFlwMdlPlausMon;;;MAFR_EL +VcAesObd;VcRvIntkMnfldFlwPlausNHMon;Ranking Id for Intake Manifold Rationality Monitor With No EGR High Boost;VcFiIntkMnfldFlwMdlPlausMon;;;MAFR_NH +VcAesObd;VcRvIntkMnfldFlwPlausNLMon;Ranking Id for Intake Manifold Rationality Monitor With No EGR Low Boost;VcFiIntkMnfldFlwMdlPlausMon;;;MAFR_NL +VcAesObd;VcRvIntkMnfldPCompPlausMon;Ranking Id for Intake Manifold Pressure Rationality Monitor;VcFiIntkMnfldPCompPlausMon;;;MAPIMPDR +VcAesObd;VcRvIntkMnfldPMdlPlausMon;Ranking Id for Intake Manifold Rationality Monitor;VcFiIntkMnfldPMdlPlausMon;;;MAPR +VcAesObd;VcRvPCVLeakMon;Ranking Id for PCV Leakage Monitor;VcFiPCVLeakMon;;; +VcAesMapM;VcRvIntkMnfldPMdlPlausMon;Ranking Id for Intake Manifold Rationality Monitor;VcFiIntkMnfldPMdlPlausMon;;;MAPR +VcAesObd;VcRvScPAmbPPlausMon;Ranking Id for Supercharger pressure vs Ambient pressure test;VcFiScPAmbPPlausMon;;;SCPAMBP +VcAesObd;VcRvScPCompPlausMon;Ranking Id for Supercharger Pressure Rationality Monitor;VcFiScPCompPlausMon;;;SCPR +VcAesTrboM;VcRvBoostPeakMon;Ranking Id for Boost Peak Pressure Monitor;VcFiBoostPeakMon;;;BSTPEAK +VcAesTrboM;VcRvBoostHiPlausMon;Ranking Id for Boost Pressure High Rationality Monitor;VcFiBoostPPlausMon;;;BSTR_HI +VcAesTrboM;VcRvBoostLoPlausMon;Ranking Id for Boost Pressure Low Rationality Monitor;VcFiBoostPPlausMon;;;BSTR_LO +VcAesTrboMg3;VcRvBoostPeakMon;Ranking Id for Boost Peak Pressure Monitor;VcFiBoostPeakMon;;;BSTPEAK +VcAesTrboMg3;VcRvBoost2PeakMon;Ranking Id for Boost 2 Peak Pressure Monitor;VcFiBoost2PeakMon;;; +VcAesTrboMg3;VcRvBoost1HiPlausMon;Ranking Id for Boost Pressure 1 High Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesTrboMg3;VcRvBoost1LoPlausMon;Ranking Id for Boost Pressure 1 Low Rationality Monitor;VcFiBoostPPlausMon;;; +VcDepTre;VcRvSymEvent;Ranking Id for ASIL B Torque Plausibility monitor;-;;;SYM_EVENT +VcDepTre;VcRvTrqPl1;Ranking Id for ASIL B Torque Plausibility monitor;-;;;TRQ_PL1 +VcOilPrMon;VcRvOilPOffsHiMon;Ranking Id for high offset test monitor;VcFiOilPrMonOffs;;;OFFSHI +VcOilPrMon;VcRvOilPOffsLoMon;Ranking Id for low offset test monitor;VcFiOilPrMonOffs;;;OFFSLO +VcOilPrMon;VcRvOilPLoPlausMon;Ranking Id for low oil pressure rationality monitor;VcFiOilPrMon;;;OILP_LO +VcOilPrMon;VcRvOilPNoPlausMon;Ranking Id for no oil pressure rationality monitor;VcFiOilPrMon;;;OILP_NO +VcOilPrMon;VcRvOilPmpStckHiMon;Ranking Id for oil pump solenoid stuck monitor - stuck at high pressure;VcFiOilPmpStckMon;;; +VcOilPrMon;VcRvOilPmpStckLoMon;Ranking Id for oil pump solenoid stuck monitor - stuck at low pressure;VcFiOilPmpStckMon;;; +VcEmiCatM;VcRvCatMon;Ranking Id for catalyst monitor;VcFiCatMon;;;VcRvEmiCatM +VcEmiOscM;VcRvCatalystO2StorageMon;Ranking Id for catalyst monitor;VcFiCatalystO2StorageMon;;;VcRvCatalystO2StorageMon +VcEmiOscM;VcRvSecO2SnsrDynMon;Ranking Id for catalyst monitor;VcFiCatalystO2StorageMon;;;VcRvSecO2SnsrDynMon +VcEmiOscM;VcRvCatalystO2StorageVariMon;Ranking Id for catalyst monitor;VcFiCatalystO2StorageMon;;;VcRvCatalystO2StorageVariMon +VcEmiOscM;VcRvSecO2SnsrDynAirflowVariMon;Ranking Id for catalyst monitor;VcFiCatalystO2StorageMon;;;VcRvSec02SnsrDynAirflowVariMon +VcEmiAdpM;VcRvSecO2AdpLeanMon;Ranking Id for secondary fuel trim monitor lean;VcFiSecO2AdpMon;;;VcRvEmiAdpMLean +VcEmiAdpM;VcRvSecO2AdpRichMon;Ranking Id for secondary fuel trim monitor rich;VcFiSecO2AdpMon;;;VcRvEmiAdpMRich +VcEmiPlsM;VcRvSecO2SnsrPlausLeanMon;Ranking Id for secondary oxygen sensor plausability monitor lean;VcFiSecO2SnsrPlausMon;;;VcRvEmiPlsMLean +VcEmiPlsM;VcRvSecO2SnsrPlausRichMon;Ranking Id for secondary oxygen sensor plausability monitor rich;VcFiSecO2SnsrPlausMon;;;VcRvEmiPlsMRich +VcEmiPlsM;VcRvSecO2SnsrPlausAmplMon;Ranking Id for secondary oxygen sensor plausability monitor amplitude;VcFiSecO2SnsrPlausMon;;;VcRvEmiPlsMAmpl +VcLamDynCcM;VcRvPrimO2SnsrSlowRespRLMon;Ranking ID for front lambda sensor slow response RL;VcFiPrimO2SnsrSlowRespMon;;;VcRvSlowRespRL +VcLamDynCcM;VcRvPrimO2SnsrSlowRespLRMon;Ranking ID for front lambda sensor slow response LR;VcFiPrimO2SnsrSlowRespMon;;;VcRvSlowRespLR +VcLamAdpM;VcRvLamAdpLeanMon;Ranking ID for Fueltrim lean;VcFiLamAdpMon;;;VcRvLamDynM +VcLamAdpM;VcRvLamAdpRichMon;Ranking ID for Fueltrim rich;VcFiLamAdpMon;;;VcRvLamDynM +VcTempKohlM;VcRvAmbTKohlHi;Ranking Id for offset monitor of the ambient air temperature sensor, offset high;VcFiAmbTKohlM;;;KOAMBTH +VcTempKohlM;VcRvAmbTKohlLo;Ranking Id for offset monitor of the ambient air temperature sensor, offset low;VcFiAmbTKohlM;;;KOAMBTL +VcTempKohlM;VcRvIntkAirTKohlHi;Ranking Id for offset monitor of the intake air temperature sensor, offset high;VcFiIntkAirTKohlM;;;KOIATH +VcTempKohlM;VcRvIntkAirTKohlLo;Ranking Id for offset monitor of the intake air temperature sensor, offset low;VcFiIntkAirTKohlM;;;KOIATL +VcTempKohlM;VcRvBstTKohlHi;Ranking Id for offset monitor of the boost air temperature sensor, offset high;VcFiBstTKohlM;;;KOBATH +VcTempKohlM;VcRvBstTKohlLo;Ranking Id for offset monitor of the boost air temperature sensor, offset low;VcFiBstTKohlM;;;KOBATL +VcTempKohlM;VcRvClntTKohlHi;Ranking Id for offset monitor of the engine coolant temperature sensor, offset high;VcFiClntTKohlM;;;KOECTH +VcTempKohlM;VcRvClntTKohlLo;Ranking Id for offset monitor of the engine coolant temperature sensor, offset low;VcFiClntTKohlM;;;KOECTL +VcTempKohlM;VcRvOilTKohlHi;Ranking Id for offset monitor of the oil temperature sensor, offset high;VcFiOilTKohlM;;;KOOILTH +VcTempKohlM;VcRvOilTKohlLo;Ranking Id for offset monitor of the oil temperature sensor, offset low;VcFiOilTKohlM;;;KOOILTL +VcTempKohlM;VcRvInManiTKohlHi;Ranking Id for offset monitor of the intake manifold air temperature sensor, offset high;VcFiInManiTKohlM;;;KOMATH +VcTempKohlM;VcRvInManiTKohlLo;Ranking Id for offset monitor of the intake manifold air temperature sensor, offset low;VcFiInManiTKohlM;;;KOMATL +VcTempKohlM;VcRvCisgTKohlHi;Ranking Id for offset monitor of the Crank ISG temperature sensor, offset high;VcFiCisgTKohlM;;;KOCISGTH +VcTempKohlM;VcRvCisgTKohlLo;Ranking Id for offset monitor of the Crank ISG temperature sensor, offset low;VcFiCisgTKohlM;;;KOCISGTL +VcTempKohlM;VcRvBstT2KohlHi;Ranking Id for offset monitor of the boost air temperature sensor 2, offset high;VcFiBstT2KohlM;;; +VcTempKohlM;VcRvBstT2KohlLo;Ranking Id for offset monitor of the boost air temperature sensor 2, offset low;VcFiBstT2KohlM;;; +VcTempKohlM;VcRvLtClntWcacTKohlHi;Ranking Id for offset monitor of the coolant temp sensor in LT wcac circuit, offset high;VcFiLtClntWcacTKohlM;;; +VcTempKohlM;VcRvLtClntWcacTKohlLo;Ranking Id for offset monitor of the coolant temp sensor in LT wcac circuit, offset low;VcFiLtClntWcacTKohlM;;; +VcTempKohlM;VcRvPowerPulseTKohlHi;Ranking Id for offset monitor of the Power pulse temperature sensor, offset high;VcFiPowerPulseTKohlM;;; +VcTempKohlM;VcRvPowerPulseTKohlLo;Ranking Id for offset monitor of the Power pulse temperature sensor, offset low;VcFiPowerPulseTKohlM;;; +VcTempKohlM;VcRvEChargerTKohlHi;Ranking Id for offset monitor of the ECharger temperature sensor, offset high;VcFiEChargerTKohlM;;; +VcTempKohlM;VcRvEChargerTKohlLo;Ranking Id for offset monitor of theECharger temperature sensor, offset low;VcFiEChargerTKohlM;;; +VcTempKohlM;VcRvWcacUsAirTKohlHi;Ranking Id for offset monitor of the WCAC upstream air temperature sensor, offset high;VcFiWcacUsAirTKohlM;;; +VcTempKohlM;VcRvWcacUsAirTKohlLo;Ranking Id for offset monitor of the WCAC upstream air temperature sensor, offset low;VcFiWcacUsAirTKohlM;;; +VcTempKohlM;VcRvLPFuelTKohlHi;Ranking Id for offset monitor of the LP fuel temperature sensor, offset high;VcFiLPFuelTKohlM;;; +VcTempKohlM;VcRvLPFuelTKohlLo;Ranking Id for offset monitor of the LP fuel temperature sensor, offset low;VcFiLPFuelTKohlM;;; +VcTempStkM;VcRvBstTStkM;Ranking Id for stuck in range monitor of the boost air temperature sensor;VcFiBstTStkM;;;BATD +VcTempStkM;VcRvClntTStkM;Ranking Id for stuck in range monitor of the engine coolant temperature sensor;VcFiClntTStkM;;;CLTD +VcTempStkM;VcRvIntkAirTStkM;Ranking Id for stuck in range monitor of the intake air temperature sensor;VcFiIntkAirTStkM;;;IATD +VcTempStkM;VcRvInManiTStkM;Ranking Id for stuck in range monitor of the intake manifold air temperature sensor;VcFiInManiTStkM;;;MATD +VcTempStkM;VcRvBstT2StkM;Ranking Id for stuck in range monitor of the boost air temperature sensor 2;VcFiBstT2StkM;;; +VcTempStkM;VcRvLtClntWcacTStkM;Ranking Id for stuck in range monitor of the coolant temp sensor in LT wcac circuit;VcFiLtClntWcacTStkM;;; +VcTempStkM;VcRvPowerPulseTStkM;Ranking Id for stuck in range monitor of the power pulse temperature sensor;VcFiPowerPulseTStkM;;;PPTD +VcTempStkM;VcRvEChrgrTStkM;Ranking Id for stuck in range monitor of the ECharger temperature sensor;VcFiEChrgrTStkM;;; +VcTempStkM;VcRvOilTStkM;Ranking Id for stuck in range monitor of the oil temperature sensor;VcFiOilTStkM;;; +VcTempStkM;VcRvWcacUsAirTStkM;Ranking Id for stuck in range monitor of the WCAC upstream air temperature sensor;VcFiWcacUsAirTStkM;;; +VcTempStkM;VcRvLPFuelTStkM;Ranking Id for stuck in range monitor of the LP fuel temperature sensor;VcFiLPFuelTStkM;;; +VcTempThM;VcRvThLk;Ranking Id for thermostat leakage fault;VcFiThM;;;THMS_LK +VcTempThM;VcRvThSlw;Ranking Id for thermostat slow heat up fault;VcFiThM;;;THMS_SLW +VcTempThContnsM;VcRvThContnsMon;Ranking Id for continuous thermostat fault;VcFiThContnsM;;; +VcAesObd;VcRvExhtMnfPMon;Ranking Id for Exhaust Manifold Pressure Rationality Monitor (sensor vs model);VcFiExhtMnfPMon;;;EXHPR +VcAesExhMnfPM;VcRvExhtMnfPMon;Ranking Id for Exhaust Manifold Pressure Rationality Monitor (sensor vs model);VcFiExhtMnfPMon;;;EXHPR +VcAesTrboM;VcRvBoostLPHiPlausMon;Ranking Id for LP Boost Pressure High Rationality Monitor;VcFiBoostPPlausMon;;;BSTLP_HI +VcAesTrboM;VcRvBoostHPHiPlausMon;Ranking Id for HP Boost Pressure High Rationality Monitor;VcFiBoostPPlausMon;;;BSTHP_HI +VcAesTrboM;VcRvBoostLPLoPlausMon;Ranking Id for LP Boost Pressure Low Rationality Monitor;VcFiBoostPPlausMon;;;BSTLP_LO +VcAesTrboM;VcRvBoostHPLoPlausMon;Ranking Id for HP Boost Pressure Low Rationality Monitor;VcFiBoostPPlausMon;;;BSTHP_LO +VcAesTrboMg3;VcRvBoost2HiPlausMon;Ranking Id for Boost Pressure 2 High Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesTrboMg3;VcRvBoost2LoPlausMon;Ranking Id for Boost Pressure 2 Low Rationality Monitor;VcFiBoostPPlausMon;;; +VcAesTrboMg3;VcRvBoostPeakHPUsMon;Ranking Id for Boost Peak Pressure Monitor HP Upstream;VcFiBoostPeakHPUsMon;;; +VcAesTrboMg3;VcRvBoostHpCmprBypStkOpen;Ranking Id for HP Compressor Bypass stuck open;VcFiBoostHpCmprBypStkOpen;;; +VcAesEgrM;VcRvEgrHiFlw;Ranking Id for EGR Hi flow error;VcFiEgrSysMon;;; +VcAesEgrM;VcRvEgrLoFlw;Ranking Id for EGR Lo flow error;VcFiEgrSysMon;;; +VcAesEgrM;VcRvEgrLrHiFlw;Ranking Id for LR EGR Hi flow error;VcFiEgrSysMon;;; +VcAesEgrM;VcRvEgrLrLoFlw;Ranking Id for LR EGR Lo flow error;VcFiEgrSysMon;;; +VcAesEgrM;VcRvEgrSrHiFlw;Ranking Id for SR EGR Hi flow error;VcFiEgrSysMon;;; +VcAesEgrM;VcRvEgrSrLoFlw;Ranking Id for SR EGR Lo flow error;VcFiEgrSysMon;;; +VcAesEgrM;VcRvEgrAr;Ranking Id for EGR flow fault;VcFiEgrAr;;;EGRAR +VcAesEgrM;VcRvEgrClrMnr;Ranking Id for EGR cooler fault;VcFiEgrClrMnr;;;EGRCLRR +VcAesSupM;VcRvSupChrPMdlPlausHi;Ranking Id for supercharger pressure over target error;VcFiSupChrPMdlPlausHi;;; +VcAesSupM;VcRvSupChrPMdlPlausLo;Ranking Id for supercharger pressure under target error;VcFiSupChrPMdlPlausLo;;; +VcObdDpfDpms;VcRvDPFPerfDpms;Ranking Id for DPF soot filtration efficiency below threshold Soot Sensor ;VcFiDPFPerfDpms;;;DPFPERF +VcObdDpf;VcRvDPFPerfDP;Ranking Id for DPF soot filtration efficiency below threshold DP-sensor;VcFiDPFPerfDP;;;SPR2 +VcAcPMon;VcRvAcPSnsrStck;Ranking Id for AC pressure sensor stuck;VcFiAcPMon;;;ACPS_S +VcAcPMon;VcRvAcPLeak;Ranking Id for AC pressure leakage;VcFiAcPMon;;;ACPS_L +VcObdDpms;VcRvDpmsTPlaus;Ranking id for temperature plausibility;VcFiDpmsTPlaus;;;DpmsTPlaus +VcObdDpms;VcRvDpmsProtTubePlaus;Ranking id for protection tube plausibility;VcFiDpmsProtTubePlaus;;;DpmsProtTubePlaus +VcObdDpms;VcRvDpmsHtrPlaus;Ranking id for heater plausibility;VcFiDpmsHtrPlaus;;;DpmsHtrPlaus +VcObdDpms;VcRvDpmsIDEPlaus;Ranking id for inter digital electrodes plausibility;VcFiDpmsIDEPlaus;;;DpmsIDEPlaus +VcObdDpms;VcRvDpmsShntCircPlaus;Ranking id for shunt circuit plausibility;VcFiDpmsShntCircPlaus;;;DpmsShntCircPlaus +VcObdDpms;VcRvDpmsBattDiff1;Ranking id for battery diff 1;VcFiDpmsBattDiff1;;;DpmsBattDiff1 +VcObdDpms;VcRvDpmsBattDiff2;Ranking id for battery diff 2;VcFiDpmsBattDiff2;;;DpmsBattDiff2 +VcObdDpms;VcRvDpmsBattElec;Ranking id for battery electrical;VcFiDpmsBattElec;;;DpmsBattElec +VcObdDpms;VcRvDpmsCanTO;Ranking id for CAN timeout;VcFiDpmsCanTO;;;DpmsCanTO +VcObdDpms;VcRvDpmsHtrOffElec;Ranking id for Heater off electrical diag;VcFiDpmsHtrOffElec;;;DpmsHtrOffElec +VcObdDpms;VcRvDpmsTElec;Ranking id for temperature meander electical diag;VcFiDpmsTElec;;;DpmsTElec +VcObdDpms;VcRvDpmsIDENegElec;Ranking id for IDE negative electrical diag;VcFiDpmsIDENegElec;;;DpmsIDENegElec +VcObdDpms;VcRvDpmsHtrOnElec;Ranking id for heater always on electrical diag;VcFiDpmsHtrOnElec;;;DpmsHtrOnElec +VcObdDpms;VcRvDpmsIDEPosElec;Ranking id for IDE positive electrical diag;VcFiDpmsIDEPosElec;;;DpmsIDEPosElec +VcObdDpms;VcRvPMSnsrCanComFail;Ranking id for PM sensor CAN communication failure;VcFiPMSnsrCanComFail;;; +VcObdDpms;VcRvPMSnsrCtrlModPerf;Ranking id for PM sensor control module performance;VcFiPMSnsrCtrlModPerf;;; +VcObdDpms;VcRvPMSnsrSuppVoltHi;Ranking id for PM sensor control module supply voltage low;VcFiPMSnsrSuppVoltHi;;; +VcObdDpms;VcRvPMSnsrSuppVoltLo;Ranking id for PM sensor control module supply voltage high;VcFiPMSnsrSuppVoltLo;;; +VcObdDpms;VcRvPMSnsrGainFault;Ranking id for PM sensor gain fault;VcFiPMSnsrGainFault;;; +VcObdDpms;VcRvPMSnsrHeatrCurHi;Ranking id for PM sensor heater current too high;VcFiPMSnsrHeatrCurHi;;; +VcObdDpms;VcRvPMSnsrHeatrCurLo;Ranking id for PM sensor heater current too low;VcFiPMSnsrHeatrCurLo;;; +VcObdDpms;VcRvPMSnsrHeatrTempHi;Ranking id for PM sensor heater temperature too high;VcFiPMSnsrHeatrTempHi;;; +VcObdDpms;VcRvPMSnsrInternSC;Ranking id for PM sensor internal short circuit fault;VcFiPMSnsrInternSC;;; +VcObdDpms;VcRvPMSnsrOC;Ranking id for PM sensor open circuit fault;VcFiPMSnsrOC;;; +VcObdDpms;VcRvPMSnsrRegenTOut;Ranking id for PM sensor regeneration time out;VcFiPMSnsrRegenTOut;;; +VcObdDpms;VcRvPMSnsrSCBatt;Ranking id for PM sensor short circuit to battery fault;VcFiPMSnsrSCBatt;;; +VcObdDpms;VcRvPMSnsrSCGnd;Ranking id for PM sensor short circuit to ground fault;VcFiPMSnsrSCGnd;;; +VcObdDpms;VcRvPMSnsrVBoostLo;Ranking id for PM sensor boost voltage too low;VcFiPMSnsrVBoostLo;;; +VcObdDpms;VcRvPMSnsrOutOfExh;Ranking id for PM Sensor, Tampering diagnosis for removed/out of exhaust;VcFiPMSnsrOutOfExh;;; +VcObdDpms;VcRvPMSnsrCloggedTip;Ranking id for PM Sensor,Tampering diagnosis clogged tip;VcFiPMSnsrCloggedTip;;; +VcNoxSensMgr;VcRvNOxSensUsHeater;Ranking id for upstream sensor heater performance error;VcFiNOxSensUsHeaterDiag;;; +VcNoxSensMgr;VcRvNOxSensUsAvailability;Ranking id for upstream sensor availability error;VcFiNOxSensUsAvailabilityDiag;;; +VcNoxSensMgr;VcRvNOxSensUsReadiness;Ranking id for upstream sensor readiness error;VcFiNOxSensUsReadinessDiag;;; +VcNoxSensMgr;VcRvNOxSensUsCurveAHi;Ranking id for upstream sensor curve diagnosis condition A;VcFiNOxSensUsCurveDiagA;;; +VcNoxSensMgr;VcRvNOxSensDsHeater;Ranking id for downstream sensor heater performance error;VcFiNOxSensDsHeaterDiag;;; +VcNoxSensMgr;VcRvNOxSensDsAvailability;Ranking id for downstream sensor availability error;VcFiNOxSensDsAvailabilityDiag;;; +VcNoxSensMgr;VcRvNOxSensDsReadiness;Ranking id for downstream sensor readiness error;VcFiNOxSensDsReadinessDiag;;; +VcNoxSensMgr;VcRvNOxSensDsCurveAHi;Ranking id for downstream sensor curve diagnosis condition A;VcFiNOxSensDsCurveDiagA;;; +;VcRvClPedPosPlausMon;Ranking Id for linear clutch position sensor stuck in range;-;;;CLPED_PL +;VcRvClPedSwPlausMon;Ranking Id for clutch position switch stuck pressed;-;;;CLPED_S1 +;VcRvClPedSwMonPerf;Ranking Id for low performance of clutch position switch stuck monitor;-;;;CLPED_S2 +;VcRvClPedPosMonPerf;Ranking Id for low performance of linear clutch position sensor stuck monitor;-;;; +;VcRvGNS1PlausMon;Ranking Id for GNS1/2 plausibility monitor;-;;;NSENS_PM +;VcRvGNSStckMon;Ranking Id for GNS stuck in range monitor;-;;;NSENS_AM +;VcRvGNSMonPerf;Ranking Id for low performance of GNS monitor;-;;;NSENS_DF +;VcRvAccPedPlausMonL1;;-;;x; +;VcRvAccPedPlausMonL2;;-;;x; +;VcRvISDSpeedLimMon;;-;;x; +;VcRvTrqCrshMonL1;;-;;; +;VcRvTrqFrntAxleMonL1;;-;;x; +;VcRvTrqRearAxleMonL1;;-;;x; +;VcRvTrqStabMon;;-;;x; +;VcRvTrqRearAxleMonL2;;-;;x; +;VcRvTrqFrntAxleBrkMonL1;;-;;x; +;VcRvTrqRearAxleBrkMonL1;;-;;x; +;VcRvTrqFrntAxleBrkMonL2;;-;;x; +;VcRvTrqRearAxleBrkMonL2;;-;;x; +;VcRvTrqEstPlaus;;-;;; +;VcRvStrtMon;;-;;x; +VcDepTre;VcRvEradSpeedLim;Event Id for ASIL B ISD and ERAD reconfiguration monitor;-;;; +VcDepTre;VcRvSymRed;Event Id for ASIL B Torque Plausibility monitor;-;;;SYM_EVENT +VcDepTre;VcRvTrqEradBrk;Event Id for regenerative ERAD torque;-;;;TRQ_ERADBRK +VcDepTre;VcRvTrqEradPrp;Event Id for propulsive ERAD torque;-;;;TRQ_ERADPRP +VcDepTre;VcRvTrqIsgBrk;Event Id for regenerative ISG torque;-;;;TRQ_ISGBRK +VcDepTre;VcRvTrqIsgPrp;Event Id for propulsive Isg torque;-;;;TRQ_ISGPRP +VcDepTre;VcRvTrqPl3;Event Id for vehicle speed limitation (ASIL B ISD and ERAD) monitor;-;;;TRQ_PL3 +VcDepTre;VcRvTrqFrntAxleMonL2;Ranking Id for Front Axle Torque (ASIL B) Monitor ;-;;x; +VcDepTre;VcRvTrqCrshMonL2;Ranking Id for Crankshaft Torque (ASIL B) Monitor ;-;;; +VcDepTre;VcRvTrqDebounceL2;Ranking Id for Debounce Torque (ASIL B) Monitor ;-;;x; +VcTrsmShfShkMon;VcRvTrsmShfShkVDVacc;Transmission Shock Acc rankingvalue ;VcFiShfShkOn;;; +VcTrsmShfShkMon;VcRvTrsmShfShkVDVdis;Transmission Shock Disturbance rankingvalue;VcFiShfShkOn;;; +VcTrsmShfShkMon;VcRvTrsmShfShkVDVerr;Transmission Shock Error rankingvalue ;VcFiShfShkOn;;; +VcTrsmNeuShkMon;VcRvTrsmNeuShkVDVacc;Transmission Neutral Shock Acc rankingvalue ;VcFiTrsmNeuShkOn;;; +VcTrsmNeuShkMon;VcRvTrsmNeuShkVDVdis;Transmission Neutral Shock Disturbance rankingvalue;VcFiTrsmNeuShkOn;;; +VcTrsmNeuShkMon;VcRvTrsmNeuShkVDVerr;Transmission Neutral Shock Error rankingvalue;VcFiTrsmNeuShkOn;;; +VcTrsmTkOffMon;VcRvTrsmTkOffVDVacc;Transmission TakeOff Shock Acc rankingvalue;VcFiTrsmTkOffOn;;; +VcTrsmTkOffMon;VcRvTrsmTkOffVDVdis;Transmission TakeOff Shock Disturbance rankingvalue;VcFiTrsmTkOffOn;;; +VcTrsmTkOffMon;VcRvTrsmTkOffVDVerr;Transmission TakeOff Shock Error rankingvalue;VcFiTrsmTkOffOn;;; +VcTrsmHeatMon;VcRvTrsmHeatMonClu;transmission HeatMon clutch rankingvalue;VcFiTrsmHeatMon;;; +VcTrsmHeatMon;VcRvTrsmHeatMonShf;transmission HeatMon Transmission Shock Error rankingvalue;VcFiTrsmHeatMon;;; +VcObdScr;VcRvScrConvEff;SCR Conversion efficiency;VcFiScrConvEff;;; +VcObdScr;VcRvScr1ConvEff;SCR1 Conversion efficiency;VcFiScr1ConvEff;;; +VcObdScr;VcRvScr2ConvEff;SCR2 Conversion efficiency;VcFiScr2ConvEff;;; +VcTmEdMon;VcRvEdWtrPmpTStuck;Ranking Id for ED circuit water pump temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdLtClntTStuck;Ranking Id for ED circuit coolant temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdCiddClntTStuck;Ranking Id for ED circuit Cidd coolant temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdDcDcTStuck;Ranking Id for ED circuit DcDc temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdHvgWndgTStuck;Ranking Id for ED circuit Hvg winding temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdHvgInvTStuck;Ranking Id for ED circuit Hvg inverter temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdEradWndgTStuck;Ranking Id for ED circuit Erad winding temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdEradInvTStuck;Ranking Id for ED circuit Erad inverter temp sensor stuck monitor;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdWtrPmpTOffsHi;Ranking Id for ED circuit water pump temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdWtrPmpTOffsLo;Ranking Id for ED circuit water pump temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdLtClntTOffsHi;Ranking Id for ED circuit coolant temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdLtClntTOffsLo;Ranking Id for ED circuit coolant temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdCiddClntTOffsHi;Ranking Id for ED circuit Cidd coolant temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdCiddClntTOffsLo;Ranking Id for ED circuit Cidd coolant temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdDcDcTOffsHi;Ranking Id for ED circuit DcDc temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdDcDcTOffsLo;Ranking Id for ED circuit DcDc temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdHvgWndgTOffsHi;Ranking Id for ED circuit Hvg winding temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdHvgWndgTOffsLo;Ranking Id for ED circuit Hvg winding temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdHvgInvTOffsHi;Ranking Id for ED circuit Hvg interver temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdHvgInvTOffsLo;Ranking Id for ED circuit Hvg inverter temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdEradWndgTOffsHi;Ranking Id for ED circuit Erad winding temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdEradWndgTOffsLo;Ranking Id for ED circuit Erad winding temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdEradInvTOffsHi;Ranking Id for ED circuit Erad inverter temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdEradInvTOffsLo;Ranking Id for ED circuit Erad inverter temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdCoolgPfmncLo;Ranking Id for ED circuit system cooling performance error;VcFiEdCoolgPfmncMon;;; +VcTmEdMon;VcRvEdElecMotTOffsHi;Ranking Id for ED circuit Electric Motor temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdElecMotTOffsLo;Ranking Id for ED circuit Electric Motor temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdElecMotTStuck;Ranking Id for ED circuit Electric Motor temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdLtClntPreRadTOffsHi;Ranking Id for ED circuit coolant temp sensor (before radiator) offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdLtClntPreRadTOffsLo;Ranking Id for ED circuit coolant temp sensor (before radiator) offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdLtClntPreRadTStuck;Ranking Id for ED circuit coolant temp (before radiator) sensor stuck monitor;VcFiEdTStuckMon;;; +VcObdLnt;VcRvObdLnt;Ranking Id for LNT performance monitor;VcFiObdLnt;;;NTMA +VcObdLntNox;VcRvObdLntNOx;Ranking Id for LNT performance monitor;VcFiObdLntNox;;; +VcNoxSensMgr;VcRvNOxSensUsCurveALo;Ranking id for upstream sensor curve diagnosis condition A low;VcFiNOxSensUsCurveDiagA;;; +VcNoxSensMgr;VcRvNOxSensDsCurveALo;Ranking id for downstream sensor curve diagnosis condition A low;VcFiNOxSensDsCurveDiagA;;; +VcMtThMon;VcRvMtWtrPmpTOffsLo;Ranking Id for ED circuit water pump temp sensor offset low;VcFiMtWtrPmpTOffs;;;EdcpKoTLow +VcMtThMon;VcRvMtLtClntTOffsHi;Ranking Id for ED circuit coolant temp sensor offset high;VcFiMtTOffs;;;MTCSKoHi +VcMtThMon;VcRvMtLtClntTOffsLo;Ranking Id for ED circuit coolant temp sensor offset low;VcFiMtTOffs;;;MTCSKoLow +VcMtThMon;VcRvMtCiddClntTOffsHi;Ranking Id for ED circuit Cidd coolant temp sensor offset high;VcFiMtCiddClntTOffs;;;CcidKoHi +VcMtThMon;VcRvMtCiddClntTOffsLo;Ranking Id for ED circuit Cidd coolant temp sensor offset low;VcFiMtCiddClntTOffs;;;CcidKoLow +VcMtThMon;VcRvMtEradInvTOffsHi;Ranking Id for ED circuit Erad inverter temp sensor offset high;;;;EradKoHi +VcMtThMon;VcRvMtEradInvTOffsLo;Ranking Id for ED circuit Erad inverter temp sensor offset low;;;;EradKoLow +VcMtThMon;VcRvMtWtrPmpTStuck;Ranking Id for ED circuit water pump temp sensor stuck (EDCP);VcFiMtWtrPmpTStuck;;;EdcpTStuck +VcMtThMon;VcRvMtLtClntTStuck;Ranking Id for ED circuit coolant temp sensor stuck;VcFiMtLtClntTStuck;;;MTCSStuck +VcMtThMon;VcRvMtCiddClntTStuck;Ranking Id for ED circuit Cidd coolant temp sensor stuck;VcFiMtCiddClntTStuck;;;CcidTStuck +VcMtThMon;VcRvMtHvgWndgTStuck;Ranking Id for ED circuit Hvg winding temp sensor stuck;VcFiMtHvgWndgTStuck;;;STCISGT +VcMtThMon;VcRvMtEradInvTStuck;Ranking Id for ED circuit Erad inverter temp sensor stuck;VcFiMtEradInvTStuck;;;EradTStuck +VcMtThMon;VcRvHvBattTOutStuck;Ranking Id for HvBattery Coolant Outlet Temp sensor stuck;VcFiHvBattTOut;;;HvBattTStuck +VcMtThMon;VcRvHvBattTOutOffsHi;Ranking Id for HvBattery Coolant Outlet Temp sensor offset high;VcFiHvBattTOffs;;;HvBattTKoHi +VcMtThMon;VcRvHvBattTOutOffsLo;Ranking Id for HvBattery Coolant Outlet Temp sensor offset low;VcFiHvBattTOffs;;;HvBattTKoLow +VcMtThMon;VcRvMtThStuckClsd;Ranking Id for ED cicruit thermostat stuck closed;VcFiMtThStuck;;;MTTHMS_CL +VcMtThMon;VcRvMtThStuckOpen;Ranking Id for ED cicruit thermostat stuck open;VcFiMtThStuck;;;MTTHMS_OP +VcMtThMon;VcRvHvBattActCoolgPerfLo;Ranking Id for reduced cooling performance for High voltage battery, AC assisted chiller cooling;VcFiHvBattCool;;;HvBattCool_1 +VcMtThMon;VcRvHvBattActCoolgPerfLoMIL;Ranking Id for reduced cooling performance for High voltage battery, AC assisted chiller cooling;VcFiHvBattCool;;;HvBattCool_2 +VcMtThMon;VcRvHvBattPasCoolgPerfLoMIL;Ranking Id for reduced cooling performance for High voltage battery, radiator cooling;VcFiHvBattCool;;;HvBattCool_3 +VcMtThMon;VcRvHvBattPasCoolgPerfLo;Ranking Id for reduced cooling performance for High voltage battery, radiator cooling;VcFiHvBattCool;;;HvBattCool_4 +VcObdExhTemp;VcRvExhTempCatHi;Ranking id for T1 temperature sensor high fault;VcFiExhTempCat;;; +VcObdExhTemp;VcRvExhTempCatLo;Ranking id for T1 temperature sensor low fault;VcFiExhTempCat;;; +VcObdExhTemp;VcRvExhTempDpfHi;Ranking id for T2 temperature sensor high fault;VcFiExhTempDpf;;; +VcObdExhTemp;VcRvExhTempDpfLo;Ranking id for T2 temperature sensor low fault;VcFiExhTempDpf;;; +VcObdExhTemp;VcRvExhTempScrHi;Ranking id for T3 temperature sensor high fault;VcFiExhTempScr;;; +VcObdExhTemp;VcRvExhTempScrLo;Ranking id for T3 temperature sensor low fault;VcFiExhTempScr;;; +VcObdExhTemp;VcRvExhTempCatInit;Ranking id for T1 temperature sensor offset fault at init;VcFiExhTempCat;;; +VcObdExhTemp;VcRvExhTempDpfInit;Ranking id for T2 temperature sensor offset fault at init;VcFiExhTempDpf;;; +VcObdExhTemp;VcRvExhTempScrInit;Ranking id for T3 temperature sensor offset fault at init;VcFiExhTempScr;;; +Unused;VcRvUnused;Unused monitors;VcFiUnused;;; +VcFtivMon;VcRvFtivPrSens;Ranking Id Ftiv pressure sensor fault;VcFiFtivMon;;; +VcFtivMon;VcRvFtivStuckCl;Ranking Id Ftiv stuck closed fault;VcFiFtivMon;;; +VcFtivMon;VcRvFtivUnPrVlv;Ranking Id Ftiv under pressure valve fault;VcFiFtivMon;;; +VcFtivMon;VcRvFtivOvPrVlv;Ranking Id Ftiv over pressure valve fault;VcFiFtivMon;;; +VcPurgMon;VcRvPurgMonMp;Ranking Id purge monitor manifold purge ;VcFiPurgMon;;; +VcPurgMon;VcRvPurgMonVp;Ranking Id purge monitor over pressure purge;VcFiPurgMon;;; +VcLamCtrlM;VcRvLamCtrlMFirstSt;Ranking Id lambda control closed loop monitor first start;VcFiLamCtrlM;;; +VcAesDiffPresM;VcRvDiffPresOffsHi;Ranking Id for LR EGR differential pressure offset high;VcFiDiffPresM;;; +VcAesDiffPresM;VcRvDiffPresOffsLo;Ranking Id for LR EGR differential pressure offset low;VcFiDiffPresM;;; +VcAesDiffPresM;VcRvDiffPresStk;Ranking Id for LR EGR differential pressure stuck;VcFiDiffPresM;;; +VcAesDynPresM;VcRvBst1AmbPPlausMon;Ranking Id for boost 1 vs.ambient pressure comparison;VcFiBst1AmbPPlausMon;;; +VcAesDynPresM;VcRvBst2AmbPPlausMon;Ranking Id for boost 2 vs.ambient pressure comparison;VcFiBst2AmbPPlausMon;;; +VcAesDynPresM;VcRvBst1Bst2PlausMon;Ranking Id for boost 1 vs.boost 2 pressure comparison;VcFiBst1Bst2PlausMon;;; +VcAesDynPresM;VcRvBst2IntkMapPlausMon;Ranking Id for boost 2 vs intake manifold pressure comparison;VcFiBst2IntkMapPlausMon;;; +VcAesDynPresM;VcRvBst1IntkMapPlausMon;Ranking Id for boost 1 vs intake manifold pressure comparison;VcFiBst1IntkMapPlausMon;;; +VcAesStatPresM;VcRvAmbPCompPlausMon;Ranking Id forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off);VcFiAmbPCompPlausMon;;;ATPR +VcAesStatPresM;VcRvBst1PCompPlausMon;Ranking Id for boost 1 Pressure Rationality Monitor (comparison to other sensor at eng off);VcFiBst1PCompPlausMon;;; +VcAesStatPresM;VcRvBst2PCompPlausMon;Ranking Id for boost 2 Pressure Rationality Monitor (comparison to other sensor at eng off);VcFiBst2PCompPlausMon;;; +VcAesStatPresM;VcRvIntkMnfldPCompPlausMon;Ranking Id for Intake Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);VcFiIntkMnfldPCompPlausMon;;;MAPIMPDR +VcAesStatPresM;VcRvExhMnfldPCompPlausMon;Ranking Id for Exhaust Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off);VcFiExhMnfldPCompPlausMon;;;EXHMPDR +VcAesStatPresM;VcRvElcmPCompPlausMon;Ranking Id for ELCM Pressure Diff Rationality Monitor (comparison to other sensor at eng off);VcFiElcmPCompPlausMon;;; +VcLamCtrlM;VcRvLamCtrlMReSt;Ranking Id lambda control closed loop monitor restart;VcFiLamCtrlM;;; +VcObdNoxSO2;VcRvObdNoxSensUsOxyToMdl;Ranking id for Nox sensor O2 us sensor to model;VcFiNOxSensO2;;; +VcObdNoxSO2;VcRvObdNoxSensMidOxyToMdl;Ranking id for Nox sensor O2 Mid sensor to model;VcFiNOxSensO2;;; +VcObdNoxSO2;VcRvObdNoxSensDsOxyToMdl;Ranking id for Nox sensor O2 ds sensor to model;VcFiNOxSensO2;;; +VcObdNoxSOfs;VcRvObdNoxSensUsOfsTst;Ranking id for Nox sensor Us offset test;VcFiNOxSensOfs;;; +VcObdNoxSOfs;VcRvObdNoxSensMidOfsTst;Ranking id for Nox sensor Mid offset test;VcFiNOxSensOfs;;; +VcObdNoxSOfs;VcRvObdNoxSensDsOfsTst;Ranking id for Nox sensor Ds offset test;VcFiNOxSensOfs;;; +VcObdGpf;VcRvObdGpf;Ranking Id for gasoline particle filter monitor;VcFiObdGpf;;; +VcTmEdMon;VcRvEdObc1TOffsHi;Ranking Id for ED circuit OBC1 temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdObc1TOffsLo;Ranking Id for ED circuit OBC1 temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdObc1TStuck;Ranking Id for ED circuit OBC1 temp sensor stuck;VcFiEdTStuckMon;;; +VcTmEdMon;VcRvEdObc2TOffsHi;Ranking Id for ED circuit OBC2 temp sensor offset high;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdObc2TOffsLo;Ranking Id for ED circuit OBC2 temp sensor offset low;VcFiEdTOffsMon;;; +VcTmEdMon;VcRvEdObc2TStuck;Ranking Id for ED circuit OBC2 temp sensor stuck;VcFiEdTStuckMon;;; +VcOilLvl;VcRvOilLvlStck;Ranking Id for oil level sensor stuck;;;; +VcLeakMon;VcRvLeakMon;Ranking Id for leakage detection monitor;VcFiLeakMon;;; +VcTmHvacVlvM;VcRvVcHvacCooltVlvStuck;Ranking Id Climate Coolant Valve;VcFiHvacVlvMon;;; +VcMtThMon;VcRvVcHvacCooltTOffsHi;Ranking Id Climate Coolant Temp Sensor;VcFiMtTOffs;;; +VcMtThMon;VcRvVcHvacCooltTOffsLo;Ranking Id Climate Coolant Temp Sensor;VcFiMtTOffs;;; +VcMtThMon;VcRvVcHvacCooltTStuck;Ranking Id Climate Coolant Temp Sensor;VcFiHvacCooltTStuckMon;;; +VcTmHvacClntTM;VcRvVcHvacCooltTOffsHi;Ranking Id Climate Coolant Temp Sensor;VcFiHvacCooltTOffsMon;;; +VcTmHvacClntTM;VcRvVcHvacCooltTOffsLo;Ranking Id Climate Coolant Temp Sensor;VcFiHvacCooltTOffsMon;;; +VcTmHvacClntTM;VcRvVcHvacCooltTStuck;Ranking Id Climate Coolant Temp Sensor;VcFiHvacCooltTStuckMon;;; +VcTmEdMon;VcRvEdRadrVlvStuckOpen;Ranking Id Ed Radiator Bypass Valve Stuck Open;VcFiEdCoolgPfmncMon;;; +VcTmEdMon;VcRvEdRadrVlvStuckClsd;Ranking Id Ed Radiator Bypass Valve Stuck Closed;VcFiEdCoolgPfmncMon;;; +VcTmEdMon;VcRvEdCoolgPfmncLo2;Ranking Id for ED circuit system cooling performance error;VcFiEdCoolgPfmncMon;;; +VcAesMafM;VcRvIntkMnfldFlwPlausEHMon;Ranking Id for Intake Manifold Rationality Monitor With EGR High Boost;VcFiIntkMnfldFlwMdlPlausMon;;; +VcAesMafM;VcRvIntkMnfldFlwPlausELMon;Ranking Id for Intake Manifold Rationality Monitor With EGR Low Boost;VcFiIntkMnfldFlwMdlPlausMon;;; +VcAesMafM;VcRvIntkMnfldFlwPlausNHMon;Ranking Id for Intake Manifold Rationality Monitor With No EGR High Boost;VcFiIntkMnfldFlwMdlPlausMon;;; +VcAesMafM;VcRvIntkMnfldFlwPlausNLMon;Ranking Id for Intake Manifold Rationality Monitor With No EGR Low Boost;VcFiIntkMnfldFlwMdlPlausMon;;; +VcAesEChrgrM ;VcRvEChrgrMOvrSpd;Ranking Id for Echarger Over Speed fault;VcFiEChrgrM;;; +VcAesEChrgrM ;VcRvEChrgrMTemp;Event Id for Echarger Over Temperature fault;VcFiEChrgrM;;; +VcAesEChrgrM ;VcRvEChrgrMCurrent;Event Id for Echarger Under/Over current fault;VcFiEChrgrM;;; +VcAesHmdM;VcRvHmdMStk;Ranking ID for humidity sensor stuck fault;VcFiHmdM;;; +VcLinCptM;VcRvEwpSpdErr;Ranking Id for Edcp actual speed and req speed mismatch;VcFiEDEwpSpdMon;;; +VcFuelLpM;VcRvFuelLpHighH;Ranking Id for low pressure fuel system, high pressure, high fuel level;VcFiFuelLpM;;; +VcFuelLpM;VcRvFuelLpHighL;Ranking Id for low pressure fuel system, high pressure, low fuel level;VcFiFuelLpM;;; +VcFuelLpM;VcRvFuelLpLowH;Ranking Id for low pressure fuel system, low pressure, high fuel level;VcFiFuelLpM;;; +VcFuelLpM;VcRvFuelLpLowL;Ranking Id for low pressure fuel system, low pressure, low fuel level;VcFiFuelLpM;;; +VcFuelLpSensM;VcRvFuelLpSensStuck;Ranking Id for low pressure fuel system, low pressure sensor stuck;VcFiFuelLpSensM;;; +VcFuelLvlSensM;VcRvFuelLvlSensStuck;Ranking Id for low pressure fuel system, level sensor stuck;VcFiFuelLvlSensM;;; +VcFuelLvlSensM;VcRvFuelLvlSensNoise;Ranking Id for low pressure fuel system, level sensor noisy;VcFiFuelLvlSensM;;; +VcEmiPlsM;VcRvMidO2SnsrPlausLeanMon;Ranking Id for middle oxygen sensor plausability monitor lean;VcFiMidO2SnsrPlausMon;;; +VcEmiPlsM;VcRvMidO2SnsrPlausRichMon;Ranking Id for middle oxygen sensor plausability monitor rich;VcFiMidO2SnsrPlausMon;;; +VcEmiPlsM;VcRvMidO2SnsrPlausAmplMon;Ranking Id for middle oxygen sensor plausability monitor amplitude;VcFiMidO2SnsrPlausMon;;; +VcLeakMon;VcRvLeakMonBlocked;Ranking Id for leakage detection monitor blocked lines;VcFiLeakMon;;; +VcLeakMon;VcRvLeakMonRefPres;Ranking Id for leakage detection monitor pressure sensor fault;VcFiLeakMon;;; +VcAccelM;VcRvAccelMStuckLat;Ranking Id for accelerometer monitor stuck check;VcFiAccelMStuck;;; +VcAccelM;VcRvAccelMStuckLgt;Ranking Id for accelerometer monitor stuck check;VcFiAccelMStuck;;; +VcAccelM;VcRvAccelMStuckVert;Ranking Id for accelerometer monitor stuck check;VcFiAccelMStuck;;; +VcAccelM;VcRvAccelMOffsHi;Ranking Id for accelerometer monitor offset check;VcFiAccelMOffs;;; +VcAccelM;VcRvAccelMOffsLo;Ranking Id for accelerometer monitor offset check;VcFiAccelMOffs;;; +VcLamCilM;VcRvCilMSfb;Ranking Id for Cylinder Imbalance Monitor Sub-Feedback;VcFiCilM;;; +VcLamCilM;VcRvCilMLam;Ranking Id for Cylinder Imbalance Monitor Lambda Oscillation;VcFiCilM;;; +VcLamCilM;VcRvCilMEngSpd;Ranking Id for Cylinder Imbalance Monitor Engine Speed Oscillation;VcFiCilM;;; +VcTempWcacThM;VcRvWcacThSlw;Ranking Id for WCAC cooling circuit slow heat up fault;VcFiWcacThM;;; +VcLinBypVlvM;VcRvBypVlvPosTarDiff ;Ranking Id for LIN Bypass Valve Target VS position monitor;VcFiLinBypVlvM;;; +VcKersBltSlipM;VcRvKersBltSlipTimeSpan;Ranking Id for KERS Belt Slip monitor during Time Span;VcFiKersBltSlipM;;; +VcKersBltSlipM;VcRvKersBltSlipDCY;Ranking Id for KERS Belt Slip monitor during DCY;VcFiKersBltSlipM;;; +VcLeakMon;VcRvLeakMonRefPresLo;Ranking Id for leakage detection monitor reference pressure low fault;VcFiLeakMon;;; +VcLeakMon;VcRvLeakMonRefPresHi;Ranking Id for leakage detection monitor reference pressure high fault;VcFiLeakMon;;; +VcLeakMon;VcRvLeakMonSensOffs;Ranking Id for leakage detection monitor sensor offset;VcFiLeakMon;;; +VcLeakMon;VcRvLeakMonRefDiff;Ranking Id for leakage detection monitor sensor offset;VcFiLeakMon;;; +VcCdPinM;VcRvCdPinMLoAct1;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 1;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct2;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 2;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct3;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 3;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct4;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 4;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct5;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 5;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct6;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 6;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct7;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 7;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMLoAct8;Ranking Id for Sliding Camshaft Monitor Actuator Low Side Pin 8;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct1;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 1;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct2;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 2;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct3;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 3;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct4;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 4;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct5;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 5;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct6;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 6;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct7;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 7;VcFiCdPinM;;; +VcCdPinM;VcRvCdPinMHiAct8;Ranking Id for Sliding Camshaft Monitor Actuator High Side Pin 8;VcFiCdPinM;;; +VcObdDps;VcRvDpsStuck;Ranking Id for dpf Diff Pressure Sensor monitor stuck check;VcFiDpsStuck;;; +VcObdDps;VcRvDpsStuckIce;Ranking Id for dpf Diff Pressure Sensor monitor stuck check due to Ice;VcFiDpsStuck;;; +VcObdDps;VcRvDpsPlausHi;Ranking Id for dpf Diff Pressure Sensor monitor offset Hi check;VcFiDpsPlausMon;;; +VcObdDps;VcRvDpsPlausLo;Ranking Id for dpf Diff Pressure Sensor monitor offset Lo check;VcFiDpsPlausMon;;; +VcObdDps;VcRvDpsInvHoses;Ranking Id for dpf Diff Pressure Sensor monitor Inverted Hoses check;VcFiDpsInvHoses;;; +VcTempLtClntHi;VcRvTempLtClntHi;Ranking Id for WCAC cooling circuit high temperature monitor;VcFiTempLtClntHi;;; +AcPTOffsMonr;VcRvAcOhxPOffsHi;Ranking Id for Ohx pressure sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcOhxPOffsLo;Ranking Id for Ohx pressure sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcOhxTOffsHi;Ranking Id for Ohx temperature sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcOhxTOffsLo;Ranking Id for Ohx temperature sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcWcndOutPOffsHi;Ranking Id for water cooled condenser out pressure sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcWcndOutPOffsLo;Ranking Id for water cooled condenser out pressure sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcWcndOutTOffsHi;Ranking Id for water cooled condenser out temperature sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcWcndOutTOffsLo;Ranking Id for water cooled condenser out temperature sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprInPOffsHi;Ranking Id for compressor in pressure sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprInPOffsLo;Ranking Id for compressor in pressure sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprInTOffsHi;Ranking Id for compressor in temperature sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprInTOffsLo;Ranking Id for compressor in temperature sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprOutPOffsHi;Ranking Id for compressor out pressure sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprOutPOffsLo;Ranking Id for compressor out pressure sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprOutTOffsHi;Ranking Id for compressor out temperature sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcCmprOutTOffsLo;Ranking Id for compressor out temperature sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcChillrOutPOffsHi;Ranking Id for chiller out pressure sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcChillrOutPOffsLo;Ranking Id for chiller out pressure sensor offset low;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcChillrOutTOffsHi;Ranking Id for chiller out temperature sensor offset high;VcFiPTOffsMonr;;; +AcPTOffsMonr;VcRvAcChillrOutTOffsLo;Ranking Id for chiller out temperature sensor offset low;VcFiPTOffsMonr;;; +AcWcndVlvMonr;VcRvAcWcndVlvStuckOpend;Ranking Id for water cooled condenser shut off valve stuck opened;VcFiWcndVlvMonr;;; +AcWcndVlvMonr;VcRvAcWcndVlvStuckClsd;Ranking Id for water cooled condenser shut off valve stuck closed;VcFiWcndVlvMonr;;; +AcWcndBypVlvMonr;VcRvAcWcndBypVlvStuckOpend;Ranking Id for water cooled condenser bypass shut off valve stuck opened;VcFiWcndBypVlvMonr;;; +AcWcndBypVlvMonr;VcRvAcWcndBypVlvStuckClsd;Ranking Id for water cooled condenser bypass shut off valve stuck closed;VcFiWcndBypVlvMonr;;; +AcOhxToCmprVlvMonr;VcRvAcOhxToCmprVlvStuckOpend;Ranking Id for OHX to compressor shut off valve stuck opened;VcFiOhxToCmprVlvMonr;;; +AcOhxToCmprVlvMonr;VcRvAcOhxToCmprVlvStuckClsd;Ranking Id for OHX to compressor shut off valve stuck closed;VcFiOhxToCmprVlvMonr;;; +AcEvaprVlvMonr;VcRvAcEvaprVlvStuckOpend;Ranking Id for evaporator shut off valve stuck opened;VcFiEvaprVlvMonr;;; +AcEvaprVlvMonr;VcRvAcEvaprVlvStuckClsd;Ranking Id for evaporator shut off valve stuck closed;VcFiEvaprVlvMonr;;; +AcWcndChkVlvMonr;VcRvAcWcndChkVlvStuckOpend;Ranking Id for water cooled condenser check valve stuck opened;VcFiWcndChkVlvMonr;;; +AcWcndChkVlvMonr;VcRvAcWcndChkVlvStuckClsd;Ranking Id for water cooled condenser check valve stuck closed;VcFiWcndChkVlvMonr;;; +AcWcndChkVlvMonr;VcRvAcOhxExVlvStuckOpend;Ranking Id for OHX EX valve stuck opened;VcFiWcndChkVlvMonr;;; +AcWcndChkVlvMonr;VcRvAcOhxExVlvStuckClsd;Ranking Id for OHX EX valve stuck closed;VcFiWcndChkVlvMonr;;; +AcOhxChkVlvMonr;VcRvAcOhxChkVlvStuckOpend;Ranking Id for OHX check valve stuck opened;VcFiOhxChkVlvMonr;;; +AcOhxChkVlvMonr;VcRvAcOhxChkVlvStuckClsd;Ranking Id for OHX check valve stuck closed;VcFiOhxChkVlvMonr;;; +AcChillrVlvMonr;VcRvAcChillrVlvStuckOpend;Ranking Id for chiller valve, EXV or checkvalve, stuck opened;VcFiChillrVlvMonr;;; +AcChillrVlvMonr;VcRvAcChillrVlvStuckClsd;Ranking Id for chiller valve, EXV or checkvalve, stuck closed;VcFiChillrVlvMonr;;; +AcExVlvMonr;VcRvAcOhxExVlvSplyFlt;Ranking Id for OHX EX valve supply fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcOhxExVlvIntFlt;Ranking Id for OHX EX valve internal fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcOhxExVlvTFlt;Ranking Id for OHX EX valve temperature fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcOhxExVlvHallSnsrFlt;Ranking Id for OHX EX valve hall sensor fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcOhxExVlvStall;Ranking Id for OHX EX valve stall fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcOhxExVlvPlausFlt;Ranking Id for OHX EX valve plausibility fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcChillrExVlvSplyFlt;Ranking Id for chiller EX valve supply fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcChillrExVlvIntFlt;Ranking Id for chiller EX valve internal fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcChillrExVlvTFlt;Ranking Id for chiller EX valve temperature fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcChillrExVlvHallSnsrFlt;Ranking Id for chiller EX valve hall sensor fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcChillrExVlvStall;Ranking Id for chiller EX valve stall fault;VcFiExVlvMonr;;; +AcExVlvMonr;VcRvAcChillrExVlvPlausFlt;Ranking Id for chiller EX valve plausibility fault;VcFiExVlvMonr;;; +AcACCAMonr;VcRvAcCmprIntFlt;Ranking Id for Electrical AC compressor internal fault;VcFiACCAMonr;;; +AcACCAMonr;VcRvAcCmprSplyFlt;Ranking Id for Electrical AC compressor supply fault;VcFiACCAMonr;;; +AcACCAMonr;VcRvAcCmprMeclFlt;Ranking Id for Electrical AC compressor mechanical fault;VcFiACCAMonr;;; +AcACCAMonr;VcRvAcCmprTFlt;Ranking Id for Electrical AC compressor temperature fault;VcFiACCAMonr;;; +AcEvaprMonr;VcRvAcEvaprFlt;Ranking Id for Evaporator fault;VcFiEvaprMonr;;; +AcPOffsWoHpMonr;VcRvAcCmprOutPWoHpOffsHi;Ranking Id for Compressor out pressure sensor offset high in basic AC system;VcFiPOffsWoHpMonr;;; +AcPOffsWoHpMonr;VcRvAcCmprOutPWoHpOffsLo;Ranking Id for Compressor out pressure sensor offset low in basic AC system;VcFiPOffsWoHpMonr;;; +AcPOffsWoHpMonr;VcRvAcChillrOutPWoHpOffsHi;Ranking Id for Chiller out pressure sensor offset high in basic AC system;VcFiPOffsWoHpMonr;;; +AcPOffsWoHpMonr;VcRvAcChillrOutPWoHpOffsLo;Ranking Id for Chiller out pressure sensor offset low in basic AC system;VcFiPOffsWoHpMonr;;; +AcTOffsWoHpMonr;VcRvAcCmprOutTWoHpOffsHi;Ranking Id for Compressor out temperature sensor offset high in basic AC system;VcFiTOffsWoHpMonr;;; +AcTOffsWoHpMonr;VcRvAcCmprOutTWoHpOffsLo;Ranking Id for Compressor out temperature sensor offset low in basic AC system;VcFiTOffsWoHpMonr;;; +AcTOffsWoHpMonr;VcRvAcChillrOutTWoHpOffsHi;Ranking Id for Chiller out temperature sensor offset high in basic AC system;VcFiTOffsWoHpMonr;;; +AcTOffsWoHpMonr;VcRvAcChillrOutTWoHpOffsLo;Ranking Id for Chiller out temperature sensor offset low in basic AC system;VcFiTOffsWoHpMonr;;; +AcEvaprVlvWoHpMonr;VcRvAcEvaprVlvWoHpStuckOpend;Ranking Id for Evaporator shut off valve stuck opened in basic AC system;VcFiEvaprVlvWoHpMonr;;; +AcEvaprVlvWoHpMonr;VcRvAcEvaprVlvWoHpStuckClsd;Ranking Id for Evaporator shut off valve stuck closed in basic AC system;VcFiEvaprVlvWoHpMonr;;; +AcChillrVlvWoHpMonr;VcRvAcChillrVlvWoHpStuckOpend;Ranking Id for Chiller shut off valve stuck opened in basic AC system;VcFiChillrVlvWoHpMonr;;; +AcChillrVlvWoHpMonr;VcRvAcChillrVlvWoHpStuckClsd;Ranking Id for Chiller shut off valve stuck closed in basic AC system;VcFiChillrVlvWoHpMonr;;; +AcSysProtnMonr;VcRvCmprOutPeakP;Ranking Id for System protection at Compressor out peak pressure;VcFiSysProtnMonr;;; +AcSysProtnMonr;VcRvOhxPeakP;Ranking Id for System protection at Outer heat exchanger peak pressure;VcFiSysProtnMonr;;; +AcSysProtnMonr;VcRvWcndOutPeakP;Ranking Id for System protection at Water cooled condenser peak pressure;VcFiSysProtnMonr;;; +AcSysProtnMonr;VcRvCmprInLoP;Ranking Id for System protection at Compressor In low pressure;VcFiSysProtnMonr;;; +CmptmtClntTOffsDiag;VcRvCooltTPrpVlvOutOffsHi;Ranking Id for Compartment coolant temperature after branching (T2) offset high;VcFiCmptmtClntTOffs;;; +CmptmtClntTOffsDiag;VcRvCooltTPrpVlvOutOffsLo;Ranking Id for Compartment coolant temperature after branching (T2) offset low;VcFiCmptmtClntTOffs;;; +CmptmtClntTOffsDiag;VcRvCooltTPrpVlvInOffsHi;Ranking Id for Compartment coolant temperature before branching (T3) offset high;VcFiCmptmtClntTOffs;;; +CmptmtClntTOffsDiag;VcRvCooltTPrpVlvInOffsLo;Ranking Id for Compartment coolant temperature before branching (T3) offset low;VcFiCmptmtClntTOffs;;; +CmptmtClntTOffsDiag;VcRvCmptmtPmpTOffsHi;Ranking Id for Climate waterpump temperature offset high;VcFiCmptmtClntTOffs;;; +CmptmtClntTOffsDiag;VcRvCmptmtPmpTOffsLo;Ranking Id for Climate waterpump temperature offset low;VcFiCmptmtClntTOffs;;; +CmptmtClntTStkDiag;VcRvCooltTPrpVlvOutStk;Ranking Id for Compartment coolant temperature after branching (T2) stuck;VcFiCmptmtClntTStk;;; +CmptmtClntTStkDiag;VcRvCooltTPrpVlvInStk;Ranking Id for Compartment coolant temperature before branching (T3) stuck;VcFiCmptmtClntTStk;;; +CmptmtClntTStkDiag;VcRvCmptmtPmpTStk;Ranking Id for Climate waterpump temperature stuck;VcFiCmptmtClntTStk;;; +EdClntTOffsDiag;VcRvDtElecCooltTOffsHi;Ranking Id for ED coolant temperature (T1) offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvDtElecCooltTOffsLo;Ranking Id for ED coolant temperature (T1) offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvCiddClntTOffsHi;Ranking Id for CIDD inlet coolant temperature offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvCiddClntTOffsLo;Ranking Id for CIDD inlet coolant temperature offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvDcDcTOffsHi;Ranking Id for DCDC tempemperature in CIDD offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvDcDcTOffsLo;Ranking Id for DCDC temperature in CIDD offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvObcTOffsHi;Ranking Id for OBC temperature offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvObcTOffsLo;Ranking Id for OBC temperature offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvIemInvTOffsHi;Ranking Id for IEM inverter temperature offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvIemInvtOffsLo;Ranking Id for IEM inverter temperature offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvEradMotTOffsHi;Ranking Id for ERAD motor temperature offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvEradMotTOffsLo;Ranking Id for ERAD motor temperature offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvEfadMotTOffsHi;Ranking Id for EFAD motor temperature offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvEfadMotTOffsLo;Ranking Id for EFAD motor temperature offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvCiddInvTOffsHi;Ranking Id for Inverter temperature in CIDD offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvCiddInvTOffsLo;Ranking Id for Inverter temperature in CIDD offset low;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvDtElecPmpTOffsHi;Ranking Id for ED pump temperature offset high;VcFiEdClntTOffs;;; +EdClntTOffsDiag;VcRvDtElecPmpTOffsLo;Ranking Id for ED pump temperature offset low;VcFiEdClntTOffs;;; +EdClntTStkDiag;VcRvDtElecCooltTStk;Ranking Id for ED coolant temperature (T1) stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvCiddClntTStk;Ranking Id for CIDD inlet coolant temperature stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvDcDcTStk;Ranking Id for DCDC temperature in CIDD stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvObcTStk;Ranking Id for OBC temperature stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvIemInvTStk;Ranking Id for IEM inverter temperature stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvEradMotTStk;Ranking Id for ERAD motor temperature stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvEfadMotTStk;Ranking Id for EFAD motor temperature stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvDtElecPmpTStk;Ranking Id for ED pump temperature stuck;VcFiEdClntTStk;;; +EdClntTStkDiag;VcRvCiddInvTStk;Ranking Id for Inverter temperature in CIDD stuck;VcFiEdClntTStk;;; +EdClntTOffsDiag/CmptmtClntTOffsDiag;VcRvAmbTOffsHi;Ranking Id for Ambient temperature offset high;VcFiEdClntTOffs/VcFiCmptmtClntTOffs;;; +EdClntTOffsDiag/CmptmtClntTOffsDiag;VcRvAmbTOffsLo;Ranking Id for Ambient temperature offset low;VcFiEdClntTOffs/VcFiCmptmtClntTOffs;;; +EdVlvDiag;VcRvRadrBypVlvStk;Ranking Id for ED valve (V1) stuck;VcFiEdVlv;;; +EdVlvDiag;VcRvRadrBypVlvStkOpn;Ranking Id for ED valve (V1) stuck open;VcFiEdVlv;;; +EdVlvDiag;VcRvRadrBypVlvStkClsd;Ranking Id for ED valve (V1) stuck closed;VcFiEdVlv;;; +HvacVlvDiag;VcRvPropVlvStkClsd;Ranking Id for HVAC valve (V3) stuck closed;VcFiHvacVlv;;; +HvacVlvDiag;VcRvPropVlvStkOpn;Ranking Id for HVAC valve (V3) stuck open;VcFiHvacVlv;;; +HvBattVlvClsdDiag;VcRvCircCnctVlvStkClsd;Ranking Id for HvBatt Valve (V2) stuck closed;VcFiHvBattVlv;;; +HvBattVlvOpnDiag;VcRvCircCnctVlvStkOpn;Ranking Id for HvBatt Valve (V2) stuck open;VcFiHvBattVlv;;; +VcTqmASpdLimReq;VcRvISDSpeedLim;;-;;x; +AcACCAMonr;VcRvAcCmprOverIFlt;Ranking Id for Electrical AC compressor over current fault;VcFiACCAMonr;;; +AcACCAMonr;VcRvAcCmprSwFlt;Ranking Id for Electrical AC compressor memory and SW compatibility faults;VcFiACCAMonr;;; +AcPOffsWoHpMonr;VcRvAcWoHpPOffs;Ranking Id for Pressure offset fault, unknown sensor, in basic AC system;VcFiPOffsWoHpMonr;;; +AcTOffsWoHpMonr;VcRvAcWoHpTOffs;Ranking Id for Temperature offset fault, unknown sensor, in basic AC system;VcFiTOffsWoHpMonr;;; +ClntTOffsDiag;VcRvHvchOutlTOffsHi;Ranking Id for Hvch outlet temperature offset high;VcFiCmptmtClntTOffs;;; +ClntTOffsDiag;VcRvHvchOutlTOffsLo;Ranking Id for Hvch outlet temperature offset low;VcFiCmptmtClntTOffs;;; +ClntTOffsDiag;VcRvHvchIntkOffsHi;Ranking Id for Hvch intake temperature offset high;VcFiCmptmtClntTOffs;;; +ClntTOffsDiag;VcRvHvchIntkOffsLo;Ranking Id for Hvch intake temperature offset low;VcFiCmptmtClntTOffs;;; +LinPrpVlvDiag;VcRvLinPrpVlvTarDiffClsd;Ranking Id for Lin proportional valve (V3) Target position difference - closed;VcFiLinPrpVlv;;; +LinPrpVlvDiag;VcRvLinPrpVlvTarDiffOpn;Ranking Id for Lin proportional valve (V3) Target position difference - open;VcFiLinPrpVlv;;; +VcEmiPlsM;VcRvAftO2SnsrPlausLeanMon;Ranking Id for after oxygen sensor plausability monitor lean;VcFiAftO2SnsrPlausMon;;; +VcEmiPlsM;VcRvAftO2SnsrPlausRichMon;Ranking Id for after oxygen sensor plausability monitor rich;VcFiAftO2SnsrPlausMon;;; +VcEmiPlsM;VcRvAftO2SnsrPlausAmplMon;Ranking Id for after oxygen sensor plausability monitor amplitude;VcFiAftO2SnsrPlausMon;;; +VcOilTMon;VcRvOilTMon;Ranking Id for high oil temperature monitor;VcFiOilTMon;;; +VcNoxSensMgr;VcRvNOxSensMidHeater;Ranking id for Mid sensor heater performance error;VcFiNOxSensMidHeaterDiag;;; +VcNoxSensMgr;VcRvNOxSensMidAvailability;Ranking id for Mid sensor availability error;VcFiNOxSensMidAvailabilityDiag;;; +VcNoxSensMgr;VcRvNOxSensMidReadiness;Ranking id for Mid sensor readiness error;VcFiNOxSensMidReadinessDiag;;; +VcNoxSensMgr;VcRvNOxSensMidCurveAHi;Ranking id for Mid sensor curve diagnosis condition A;VcFiNOxSensMidCurveDiagA;;; +VcNoxSensMgr;VcRvNOxSensMidCurveALo;Ranking id for Mid sensor curve diagnosis condition A low;VcFiNOxSensMidCurveDiagA;;; +VcObdNoxStartUp;VcRvNOxSnsrUsHtr;Ranking id for Heater performance error;VcFiNOxSnsrUsHtr;;; +VcObdNoxStartUp;VcRvNOxSnsrMidHtr;Ranking id for Heater performance error;VcFiNOxSnsrMidHtr;;; +VcObdNoxStartUp;VcRvNOxSnsrDsHtr;Ranking id for Heater performance error;VcFiNOxSnsrDsHtr;;; +VcObdNoxStartUp;VcRvNOxSnsrUsReady;Ranking id for readiness not reached in time;VcFiNOxSnsrUsReady;;; +VcObdNoxStartUp;VcRvNOxSnsrMidReady;Ranking id for readiness not reached in time;VcFiNOxSnsrMidReady;;; +VcObdNoxStartUp;VcRvNOxSnsrDsReady;Ranking id for readiness not reached in time;VcFiNOxSnsrDsReady;;; +VcLamRespM;VcRvSymRespM;Ranking ID for Front Oxygen Sensor Symmetric Slow Response Monitor;VcFiRespM;;; +VcLamRespM;VcRvLRRespM;Ranking ID for Front Oxygen Sensor Lean to Rich Slow Response Monitor;VcFiRespM;;; +VcLamRespM;VcRvRLRespM;Ranking ID for Front Oxygen Sensor Rich to Lean Slow Response Monitor;VcFiRespM;;; +VcIntkVlvM;VcRvIntkVlvMin;Ranking ID for intake valve monitor;VcFiIntkVlv;;; +VcIntkVlvM;VcRvIntkVlvMax;Ranking ID for intake valve monitor;VcFiIntkVlv;;; +VcIntkVlvM;VcRvIntkVlvFreq;Ranking ID for intake valve monitor;VcFiIntkVlv;;; diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_Float32.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_Float32.csv new file mode 100644 index 0000000..f77e518 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_Float32.csv @@ -0,0 +1,51 @@ +Range Min;Range Max +0xE300;0xE32F +DID_NAME;DID ID +rVcDepTre_Tq_WhlMotSysTqEstForDID;0xE300 +rVcDepTre_Tq_IsgTqEstForDID;0xE301 +rVcDepTre_Tq_WhlMotSysTqReqForDID;0xE302 +rVcDepTre_Tq_IsgTqReqForDID;0xE303 +rVcDepTre_rt_TqTransmForDID;0xE304 +rVcDepTre_Tq_ReqAtWhlNoRcfForDID;0xE305 +rVcDepTre_Tq_BrkTqAtWhlsReqForDID;0xE306 +rVcDepTre_rt_TrsmTrqRatForDID;0xE307 +rVcDepTre_Tq_CrShaftForDID;0xE308 +rVcDepTre_Tq_EstFrontWheelTorqueForDID;0xE309 +rVcDepTre_Tq_PropCrshAllwTotForDID;0xE30A +rVcDepTre_Tq_PropWhlAllwTotForDID;0xE30B +rVcDepTre_Tq_DrReqForDID;0xE30C +rVcDepTre_F_DrReqForDID;0xE30D +rVcDepTre_F_CreepForDID;0xE30E +rVcMtThMon_Pw_HvBattCoolMedDID;0xE30F +rVcFtivMon_Z_GasVolAppr;0xE310 +rVcFtivMon_p_FtivPrOffs;0xE311 +rVcFtivMon_p_ElcmPrOffs;0xE312 +rVcMtThMon_E_LtSnsrStuckIntPw;0xE313 +rVcFtivMon_X_FastPassRatio;0xE314 +rVcFtivMon_D_FullDiagTotNum;0xE315 +rVcMtThMon_E_HvgTeStuckIntPw;0xE316 +rVcFtivMon_p_FtivPrEngOffDID;0xE317 +rVcFtivMon_p_FtivFpmOffs;0xE318 +rVcMtThMon_Te_HvBattCoolAvgDiffNVM;0xE319 +sVcMtThMon_Pw_HvBattCoolEff;0xE31A +rVcMtThMon_Pw_HvBattCooltPasAvg;0xE31B +rVcMtThMon_D_HvBattCoolAvgDidFloat;0xE31C +rVcMtThMon_Te_MedTWtrPmpInt;0xE31D +sVcHvg_Te_InvActl;0xE31E +sVcBec_Te_BattHv;0xE31F +sVcObc_Te_Actl;0xE320 +sVcErad_Te_InvActl;0xE321 +sVcCidd_Te_Coolt;0xE322 +sVcHvg_Te_WndgActl;0xE323 +sVcAccm_n_ElacCmprActl;0xE324 +sVcBec_Te_HvBattCooltT;0xE325 +sVcCcm_Te_EvapReq;0xE326 +sVcBec_Te_HvBattTAvg;0xE327 +rVcLinBypVlvM_X_PosnActFromPropVlvDID;0xE328 +rVcLinBypVlvM_X_PosnReqForPropVlvDID;0xE329 +rVcLinBypVlvM_X_TgtActTestValueDID;0xE32A +rVcTempThM_Z_MeanGaDID;0xE32B +rVcTempThM_Z_IdleRatioDID;0xE32C +sVcEc_Te_HvacClnt;0xE32D +rVcTqmBCrshM_Tq_CrshTrqAllwdDlyFilt;0xE32E +rVcTqmBWhlM_Tq_WhlTrqAllwdDlyFilt;0xE32F diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_Float32.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_Float32.csv new file mode 100644 index 0000000..359f644 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_Float32.csv @@ -0,0 +1,385 @@ +Range Min;Range Max +0xE300;0xE5FF +DID_NAME;DID ID +rVcDepTre_Tq_WhlMotSysTqEstForDID;0xE300 +rVcDepTre_Tq_IsgTqEstForDID;0xE301 +rVcDepTre_Tq_WhlMotSysTqReqForDID;0xE302 +rVcDepTre_Tq_IsgTqReqForDID;0xE303 +rVcDepTre_rt_TqTransmForDID;0xE304 +rVcDepTre_Tq_ReqAtWhlNoRcfForDID;0xE305 +rVcDepTre_Tq_BrkTqAtWhlsReqForDID;0xE306 +rVcDepTre_rt_TrsmTrqRatForDID;0xE307 +rVcDepTre_Tq_CrShaftForDID;0xE308 +rVcDepTre_Tq_EstFrontWheelTorqueForDID;0xE309 +rVcDepTre_Tq_PropCrshAllwTotForDID;0xE30A +rVcDepTre_Tq_PropWhlAllwTotForDID;0xE30B +rVcDepTre_Tq_DrReqForDID;0xE30C +rVcDepTre_F_DrReqForDID;0xE30D +rVcDepTre_F_CreepForDID;0xE30E +rVcMtThMon_Pw_HvBattCoolMedDID;0xE30F +rVcFtivMon_Z_GasVolAppr;0xE310 +rVcFtivMon_p_FtivPrOffs;0xE311 +rVcFtivMon_p_ElcmPrOffs;0xE312 +rVcMtThMon_E_LtSnsrStuckIntPw;0xE313 +rVcFtivMon_X_FastPassRatio;0xE314 +rVcFtivMon_D_FullDiagTotNum;0xE315 +rVcMtThMon_E_HvgTeStuckIntPw;0xE316 +rVcFtivMon_p_FtivPrEngOffDID;0xE317 +rVcFtivMon_p_FtivFpmOffs;0xE318 +rVcMtThMon_Te_HvBattCoolAvgDiffNVM;0xE319 +sVcMtThMon_Pw_HvBattCoolEff;0xE31A +rVcMtThMon_Pw_HvBattCooltPasAvg;0xE31B +rVcMtThMon_D_HvBattCoolAvgDidFloat;0xE31C +rVcMtThMon_Te_MedTWtrPmpInt;0xE31D +sVcHvg_Te_InvActl;0xE31E +sVcBec_Te_BattHv;0xE31F +sVcObc_Te_Actl;0xE320 +sVcErad_Te_InvActl;0xE321 +sVcCidd_Te_Coolt;0xE322 +sVcHvg_Te_WndgActl;0xE323 +sVcAccm_n_ElacCmprActl;0xE324 +sVcBec_Te_HvBattCooltT;0xE325 +sVcCcm_Te_EvapReq;0xE326 +sVcBec_Te_HvBattTAvg;0xE327 +rVcLamAdpM_rt_CtrlAdpTot;0xE328 +sVcEc_Te_LtClnt;0xE329 +sVcErad_Te_WndgActl;0xE32A +sVcDcdc_Te_Actl;0xE32B +sVcEdcp_Te_MedTWtrPmpInt;0xE32C +rVcNoxSensMgr_Z_UsCorO2P;0xE32D +rVcNoxSensMgr_Z_UsCorNH3;0xE32E +rVcNoxSensMgr_Z_UsCorNO2;0xE32F +rVcNoxSensMgr_Z_UsCorNOxP;0xE330 +rVcNoxSensMgr_Z_Empty1;0xE331 +sVcNoxSensMgr_X_NoxSensUsO2;0xE332 +sVcNoxSensMgr_X_NoxSensUsLambdaLin;0xE333 +sVcNoxSensMgr_Z_NoxSensUsNOx;0xE334 +rVcNoxSensMgr_rt_UsAvailable;0xE335 +rVcNoxSensMgr_t_UsNOxReadyTime;0xE336 +rVcNoxSensMgr_t_UsO2ReadyTime;0xE337 +rVcNoxSensMgr_X_SelfTstUsBufAvg;0xE338 +rVcNoxSensMgr_Z_DsCorNO2;0xE339 +rVcNoxSensMgr_Z_DsCorO2P;0xE33A +rVcNoxSensMgr_Z_DsCorNOxP;0xE33B +rVcNoxSensMgr_Z_DsCorNH3;0xE33C +rVcNoxSensMgr_Z_Empty2;0xE33D +sVcNoxSensMgr_X_NoxSensDsO2;0xE33E +sVcNoxSensMgr_X_NoxSensDsLambdaLin;0xE33F +sVcNoxSensMgr_Z_NoxSensDsNOx;0xE340 +rVcNoxSensMgr_rt_DsAvailable;0xE341 +rVcNoxSensMgr_t_DsNOxReadyTime;0xE342 +rVcNoxSensMgr_t_DsO2ReadyTime;0xE343 +rVcNoxSensMgr_X_SelfTstDsBufAvg;0xE344 +rVcObdCmn_Te_AveAmbiTempDID;0xE345 +rVcObdCmn_Te_AveBoostTempDID;0xE346 +rVcObdCmn_Te_AveClntTempDID;0xE347 +rVcObdCmn_Te_AveOilTempDID;0xE348 +rVcObdCmn_Te_AveInManiTempDID;0xE349 +sVcAesRx_n_EchrgrSpd;0xE34A +rVcTempClntMod_t_AftFirstStaTxDID;0xE34B +rVcTempClntMod_t_EngOffFirstStaTxDID;0xE34C +rVcTempClntMod_Te_EstClntTempDID;0xE34D +rVcTempClntMod_Te_EstClntTempOBDDID;0xE34E +rVcTempStkM_Z_BstPresDiffFltDID;0xE34F +rVcTempStkM_U_BstTempMaxDID;0xE350 +rVcTempStkM_U_BstTempMinDID;0xE351 +rVcTempStkM_Te_EstEctMaxTempDID;0xE352 +rVcTempStkM_Te_EstEctMinTempDID;0xE353 +rVcTempStkM_Te_ClntTempMaxDID;0xE354 +rVcTempStkM_Te_ClntTempMinDID;0xE355 +sVcAesTx_md_EgrFlowTar;0xE356 +rVcTempStkM_U_InManiTempMaxDID;0xE357 +rVcTempStkM_U_InManiTempMinDID;0xE358 +rVcAesVe_an_Ovlp;0xE359 +rVcEmiCatM_Z_PeriodCnt;0xE35A +rVcEmiCatM_Z_TestValue;0xE35B +rVcEmiPlsM_U_HegoMax;0xE35C +rVcEmiPlsM_U_HegoMin;0xE35D +rVcLamAdp_rt_Adp;0xE35E +rVcLamDynM_Z_PsTstVluSym;0xE35F +sVcAesMo_m_CylPurg;0xE360 +sVcAesMo_md_CylExh;0xE361 +sVcAesMo_md_CylPurg;0xE362 +sVcAesTe_Te_CatC;0xE363 +sVcAesTe_Te_CatMidC;0xE364 +sVcAesTx_m_CylLoad;0xE365 +sVcAesTx_X_TrbWgTar;0xE366 +sVcamAdp_rt_AdpTx;0xE367 +sVcCmnSta_t_AftFirstStaTotTx;0xE368 +sVcCmnSta_t_AftFirstStaTx;0xE369 +sVcEc_lam_LamLin;0xE36A +sVcEc_n_Eng;0xE36B +sVcEc_p_Amb;0xE36C +sVcEc_rt_VprConc;0xE36D +sVcEc_Te_EngClnt;0xE36E +sVcEc_U_LamBinRe;0xE36F +sVcEc_U_Sys;0xE370 +sVcEmiAdp_rt_AdpTx;0xE371 +sVcEmiCatM_Z_Rank;0xE372 +sVcEmiHeat_Z_CatHeatIdx;0xE373 +sVcFuelPTar_p_RailTx;0xE374 +sVcFuelTx_p_RailTar;0xE375 +sVcLamCtrl_rt_PhiMdl;0xE376 +sVcLamCtrl_rt_TarPhiMdl;0xE377 +sVcLamTar_lam_TarTx;0xE378 +sVcPurgAdp_phi_VapConc;0xE379 +sVcVVTTx_an_VVTeTar;0xE37A +sVcVVTTx_an_VVTiTar;0xE37B +yVcInjFuCut_B_Actv;0xE37C +rVcTempWcacClntMod_Te_EstWcacClntTempOBDDID;0xE37D +yVcLamTar_B_CatMCtrl;0xE37E +sVcEc_Te_Amb;0xE37F +sVcLamAdp_rt_AdpTx;0xE380 +rVcTrsmShfShkMon_Z_FAlmIncSc;0xE381 +rVcObdCmn_t_ClimaTiOfEndDID;0xE382 +rVcObdCmn_Te_AveWndgActlTempDID;0xE383 +rVcObdCmn_Te_AveInAirTempDID;0xE384 +rVcObdCmn_Te_AveLtClntWcacTempDID;0xE385 +yVcObdCmn_B_PreHeaterDID;0xE386 +rVcTrsmHeatMon_X_OilFlow;0xE387 +rVcTrsmShfShkMon_Z_Shk4LoGear;0xE388 +rVcTrsmShfShkMon_Z_Shk4GrGear;0xE389 +rVcTrsmShfShkMon_Z_Shk4HiGear;0xE38A +rVcScrAd_rt_Nh3CorrnOldBefLimn;0xE38B +rVcScrAd_rt_Nh3CorrnOldOldBefLimn;0xE38C +rVcObdGpf_Z_exhVolFlow;0xE38D +rVcObdGpf_p_GpfDiffSnsrAveFlt;0xE38E +rVcObdGpf_p_DiffPresModFlt;0xE38F +rVcPurgMon_Z_SwiftStatus;0xE390 +rVcPurgMon_p_CmpMeasAmpMp;0xE391 +rVcPurgMon_Z_DutyCmpMp;0xE392 +rVcPurgMon_p_MeasAmpMp;0xE393 +rVcPurgMon_Z_DutyCmpVp;0xE394 +rVcPurgMon_p_MeasAmpVp;0xE395 +rVcPurgMon_p_CmpMeasAmpVp;0xE396 +rVcTempStkM_Te_InAirTempMaxDID;0xE397 +rVcTempStkM_Te_InAirTempMinDID;0xE398 +rVcTrsmShfShkMon_Z_FAlm4GrGear;0xE399 +rVcTrsmShfShkMon_Z_FAlm4LoGear;0xE39A +rVcTrsmShfShkMon_Z_FAlm4HiGear;0xE39B +rVcTrsmShfShkMon_Z_FAlm4TipGear;0xE39C +rVcTrsmShfShkMon_Z_Shk4TipGear;0xE39D +sVcEdcp_I_CooltPmpAct;0xE39F +sVcEc_t_PrpsnSysOffTime;0xE3A0 +rVcTmEdMon_E_HvgStuck;0xE3A1 +rVcTmEdMon_E_EradStuck;0xE3A2 +rVcTmEdMon_E_LtSnsrStuck;0xE3A3 +sVcAesTx_md_EgrVirtSnsr;0xE3A4 +sVcTmAf_X_FanPwmReq;0xE3A5 +rVcTqeBCrsh_Tq_BrkInst;0xE3A6 +sVcTqeBFrntWhlProp_Tq_FrntWhlPropTrq;0xE3A7 +sVcTqeBRearWhl_Tq_PropTrqMax;0xE3A8 +sVcCidd_Tq_IsgTqEst;0xE3A9 +sVcIem_Tq_WhlMotSysTqEst;0xE3AA +sVcTqmCSpdLimArb_v_MaxAsilA;0xE3AB +rVcTqmBCrshM_Tq_AllwdCrshTqPropDly;0xE3AC +rVcTqmACrshM_Tq_AllwdCrshTqPropDly;0xE3AD +rVcTqmBFrntM_Tq_FrntWhlTrqAllwdFilt;0xE3AE +rVcTqmAFrntM_Tq_FrntWhlTrqAllwdFilt;0xE3AF +rVcTqmARearM_Tq_AllwdRearAxisTqPropDly;0xE3B1 +rVcTqmBRearM_Tq_AllwdRearAxisTqPropDly;0xE3B2 +rVcTqmBBrkM_Tq_AllwdWhlBrkTq;0xE3B3 +rVcTqmBBrkM_Tq_EstWhlBrkTq;0xE3B4 +rVcTqmAAr_Tq_DTReqCrsh;0xE3B5 +sVcVmcTfa_Tq_ReqAtWhlNoRcf;0xE3B6 +rVcEmiGpf_m_TotOilCns;0xE3B7 +rVcEmiGpf_m_SootFF;0xE3B8 +rVcObdNoxSO2_rt_LamRef;0xE3B9 +rVcObdNoxSO2_X_UsO2Flt;0xE3BA +rVcObdNoxSO2_X_DsO2Flt;0xE3BB +rVcObdNoxSO2_X_RefO2Flt;0xE3BC +rVcObdNoxSO2_X_UsO2DiffAvg;0xE3BD +rVcObdNoxSO2_X_DsO2DiffAvg;0xE3BE +sVcObdScr_rt_CnvnMeasd;0xE3BF +sVcObdScr_rt_CnvnRef;0xE3C0 +sVcObdScr_rt_CnvnMin;0xE3C1 +rVcObdScr_rt_Nh3ToNoxDsMdld;0xE3C2 +sVcAtTe_Te_ScrAvg;0xE3C3 +sVcScrDem_md_UreaDes;0xE3C4 +sVcScrMdl_M_StoredNh3;0xE3C5 +rVcScrMdl_rt_No2NoxWeight;0xE3C6 +rVcScrMdl_Z_Capacity;0xE3C7 +rVcScrMdl_rt_Nh3ExhWeightNoAd;0xE3C8 +rVcScrAsc_Z_AscConcNh3Ds;0xE3C9 +rVcScrAsc_md_AscNh3Ds;0xE3CA +rVcScrAsc_rt_AscNo2ToNoxDs;0xE3CB +rVcScrAsc_Z_AscNoxSensDsMdld;0xE3CC +rVcTmEdMon_Te_OffsAvg;0xE3CD +rVcTempStkM_Te_EstWcacTMaxTempDID;0xE3CE +rVcTempStkM_Te_EstWcacTMinTempDID;0xE3CF +rVcTempStkM_Te_WcacTMaxTempDID;0xE3D0 +rVcTempStkM_Te_WcacTMinTempDID;0xE3D1 +rVcTrsmShfShkMon_Z_FAlm4SpShfMode;0xE3D2 +rVcTrsmShfShkMon_Z_Shk4SpShfMode;0xE3D3 +rVcTempClntMod_Te_EstClntTempOBDLeakDID;0xE3D4 +sVcLamAdp_rt_AdpTx;0xE3D5 +rVcLamAdp_rt_Val11;0xE3D6 +rVcLamAdp_rt_Val12;0xE3D7 +rVcLamAdp_rt_Val13;0xE3D8 +rVcLamAdp_rt_Val21;0xE3D9 +rVcLamAdp_rt_Val22;0xE3DA +rVcLamAdp_rt_Val23;0xE3DB +rVcLamAdp_rt_Val31;0xE3DC +rVcLamAdp_rt_Val32;0xE3DD +rVcLamAdp_rt_Val33;0xE3DE +rVcLamAdp_rt_Val41;0xE3DF +rVcLamAdp_rt_Val42;0xE3E0 +rVcLamAdp_rt_Val43;0xE3E1 +rVcTempWcacClntMod_Te_EstWcacClntTempDID;0xE3E2 +sVcLamCtrl_rt_Phi;0xE3E3 +sVcLamCtrl_rt_PhiMdl;0xE3E4 +rVcObdCmn_Te_AveWcacUsAirTempDID;0xE3E5 +sVcAesRx_X_EchrgrTmpIdx;0xE3E6 +sVcLamFuel_rt_AFFB;0xE3E7 +sVcLamCtrl_rt_CtrlTx;0xE3E8 +sVcLamFuel_m_MeanTx;0xE3E9 +rVcObdCmn_Te_EngineClntTempAtStartDID;0xE3EA +rVcObdCmn_Te_WcacClntTempAtStartDID;0xE3EB +rVcObdCmn_Te_AveWcacUsTempDID;0xE3EC +rVcObdCmn_Te_AveLPFuelTempDID;0xE3ED +rVcObdCmn_Te_AveEChargerTempDID;0xE3EE +rVcTempStkM_Te_EstOilTempMaxDID;0xE3EF +rVcTempStkM_Te_EstOilTempMinDID;0xE3F0 +rVcTempStkM_Te_OilTempMaxDID;0xE3F1 +rVcTempStkM_Te_OilTempMinDID;0xE3F2 +sVcAesCmpr_p_CmprHPSp;0xE3F3 +sVcAesSp_rt_EgrSplit;0xE3F4 +rVcTempStkM_U_EChrgrTempMaxDID;0xE3F5 +rVcTempStkM_U_EChrgrTempMinDID;0xE3F6 +rVcTempStkM_Te_EstLPFuTMaxDID;0xE3F7 +rVcTempStkM_Te_EstLPFuTMinDID;0xE3F8 +rVcTempStkM_Te_LPFuelTempMaxDID;0xE3F9 +rVcTempStkM_Te_LPFuelTempMinDID;0xE3FA +sVcAesTx_md_EgrTotEstPosn;0xE3FB +sVcAesTx_p_ExhMnfld;0xE3FC +rVcTempStkM_U_WcacUsAirTMaxDID;0xE3FD +rVcTempStkM_U_WcacUsAirTMinDID;0xE3FE +sVcAesCmpr_p_CmprSp;0xE3FF +rVcLeakMon_p_RefRel;0xE500 +rVcLeakMon_p_RefRel2nd;0xE501 +rVcLeakMon_X_FuelLevelFilterOn;0xE502 +rVcLeakMon_Te_AmbOn;0xE503 +rVcLeakMon_p_ElcmAmb;0xE504 +rVcLeakMon_phi_VapConcFilt;0xE505 +rVcLeakMon_m_AccPurge;0xE506 +rVcLeakMon_L_TestValueLatest;0xE507 +rVcLeakMon_p_ElcmFltPa;0xE508 +rVcLeakMon_L_FaultLimLargeLeak;0xE509 +rVcLeakMon_L_FaultLimSmallLeak;0xE50A +sVcAccelM_An_LatEngOff;0xE50B +sVcAccelM_An_LongEngOff;0xE50C +rVcLeakMon_p_RefLatest;0xE50D +rVcLeakMon_an_LgtLatest;0xE50E +rVcLeakMon_an_LatLatest;0xE50F +rVcTqmBWhl_Tq_WhlTrqAllwdFilt;0xE510 +rVcFuelCtrl_n_MemPmpSpdInAr1;0xE511 +rVcFuelCtrl_n_MemPmpSpdInAr2;0xE512 +rVcFuelCtrl_n_MemPmpSpdInAr3;0xE513 +rVcFuelCtrl_n_MemPmpSpdInAr4;0xE514 +rVcFuelCtrl_t_MemTiInAr1;0xE515 +rVcFuelCtrl_t_MemTiInAr2;0xE516 +rVcFuelCtrl_t_MemTiInAr3;0xE517 +rVcFuelCtrl_t_MemTiInAr4;0xE518 +rVcFuelCtrl_Z_MemFuFlowFilVal;0xE51A +rVcFuelCtrl_Z_MemFuFlowCnsVal;0xE51B +sVcFuelTx_Te_LpFu;0xE51C +rVcLamAdp_rt_CylDeactvnVal11;0xE51D +rVcLamAdp_rt_CylDeactvnVal12;0xE51E +rVcLamAdp_rt_CylDeactvnVal13;0xE51F +rVcLamAdp_rt_CylDeactvnVal21;0xE520 +rVcLamAdp_rt_CylDeactvnVal22;0xE521 +rVcLamAdp_rt_CylDeactvnVal23;0xE522 +rVcLamAdp_rt_CylDeactvnVal31;0xE523 +rVcLamAdp_rt_CylDeactvnVal32;0xE524 +rVcLamAdp_rt_CylDeactvnVal33;0xE525 +rVcLamAdp_rt_CylDeactvnVal41;0xE526 +rVcLamAdp_rt_CylDeactvnVal42;0xE527 +rVcLamAdp_rt_CylDeactvnVal43;0xE528 +rVcScrDpm_m_DpmRngLo;0xE529 +rVcScrDpm_m_DpmRngHi;0xE52A +sVcAesRx_X_IntkMafSnsrHmd;0xE52C +sVcAesPs_p_CmprMechSp;0xE52D +sVcFuelTx_p_Tar;0xE52E +sVcFuelTx_X_LpPumpDuty;0xE52F +rVcLinBypVlvM_X_PosnActFromPropVlvDID;0xE530 +rVcLinBypVlvM_X_PosnReqForPropVlvDID;0xE531 +rVcLinBypVlvM_X_TgtActTestValueDID;0xE532 +rVcTempStkM_Z_BstWcacPresDiffFltDID;0xE533 +rVcTempThM_Z_IdleRatioDID;0xE534 +rVcTempThM_Z_MeanGaDID;0xE535 +rVcTqeBCrsh_Tq_BrkInstNe;0xE536 +rVcTqeBCrsh_Tq_BrkInstAir;0xE537 +sVcTqeBFrntWhl_Tq_PropTrq;0xE538 +sVcTqeBRearWhl_Tq_PropTrqMax;0xE539 +rVcTqmBCrshM_Tq_CrshTrqAllwdDlyFilt;0xE53A +rVcTqmBWhlM_Tq_WhlTrqAllwdDlyFilt;0xE53B +rVcRdp_Z_DrvNoxUrbCorrDID;0xE53C +rVcRdp_Z_DrvNoxTotCorrDID;0xE53D +rVcNoxSensMgr_t_UsHeatupTime;0xE54A +rVcNoxSensMgr_t_UsNotHeatedTime;0xE54B +rVcNoxSensMgr_t_DsHeatupTime;0xE54C +rVcNoxSensMgr_t_DsNotHeatedTime;0xE54D +rVcNoxSensMgr_X_SelfTstUsOxyDif;0xE54E +rVcNoxSensMgr_p_SelfTstUsDpfDif;0xE54F +rVcNoxSensMgr_X_SelfTstUsO2LpFlt;0xE550 +rVcNoxSensMgr_X_SelfTstDsOxyDif;0xE551 +rVcNoxSensMgr_p_SelfTstDsDpfDif;0xE552 +rVcNoxSensMgr_X_SelfTstDsO2LpFlt;0xE553 +rVcNoxSensMgr_D_DUMMY_1;0xE554 +rVcNoxSensMgr_D_DUMMY_2;0xE555 +rVcNoxSensMgr_D_DUMMY_3;0xE556 +rVcNoxSensMgr_D_DUMMY_4;0xE557 +rVcNoxSensMgr_t_SelfTstUsRunTiDid;0xE558 +rVcNoxSensMgr_t_SelfTstDsRunTiDid;0xE559 +rVcObdNoxSOfs_t_SnceEffDnox;0xE55A +rVcObdScr_rt_AlphaDosFlt;0xE55B +rVcObdLntNox_t_TiSnceEffDnox;0xE55C +rVcObdDps_t_IceRemAccTime;0xE55D +rVcObdDps_t_TimeSincePlCmplt;0xE55E +rVcObdDps_p_IHoLoTstVal;0xE55F +rVcDpmsCtrl_Te_SootSnsrRgnTeMax;0xE560 +rVcDpmsCtrl_t_SootSnsrRgnTi;0xE561 +rVcDpmsCtrl_t_SootSnsrAccRgnTi;0xE562 +rVcDpmsCtrl_t_SootSnsrMeasTi;0xE563 +rVcObdDpms_t_DUMMY_1;0xE564 +rVcObdDpms_t_DUMMY_2;0xE565 +rVcObdDpms_t_DUMMY_3;0xE566 +rVcObdDpms_Te_ClgTipTBfrClDwn;0xE567 +rVcObdDpms_Te_ClgTipTAftrClDwn;0xE568 +rVcObdDpms_Te_ClgTipClDwnTEst;0xE569 +rVcObdDpms_Te_OoeTstVal;0xE56A +rVcObdDpms_t_DUMMY_4;0xE56B +rVcObdDpms_t_DUMMY_5;0xE56C +rVcObdDpms_t_DUMMY_6;0xE56D +rVcObdDpms_t_DUMMY_7;0xE56E +sVcEc_Te_HvacClnt;0xE56F +rVcLeakMon_Te_ClntStart;0xE570 +rVcLeakMon_Te_AmbStart;0xE571 +sVcLeakMon_L_EstLeak;0xE572 +rVcLeakMon_D_State;0xE573 +rVcLeakMon_L_DistLatest;0xE574 +rVcEmiGpf_m_SootEst;0xE575 +rVcObdGpf_p_PTDifMdlFlt;0xE576 +sVcAesRx_p_EgrLrDiffSnsr;0xE577 +sVcAesRx_p_EgrLrDiffSnsrRaw;0xE578 +rVcNoxSensMgr_Z_MidCorO2P;0xE579 +rVcNoxSensMgr_Z_MidCorNH3;0xE57A +rVcNoxSensMgr_Z_MidCorNO2;0xE57B +rVcNoxSensMgr_Z_MidCorNOxP;0xE57C +sVcNoxSensMgr_X_NoxSensMidO2;0xE57D +sVcNoxSensMgr_X_NoxSensMidLambdaLin;0xE57E +sVcNoxSensMgr_Z_NoxSensMidNOx;0xE57F +rVcNoxSensMgr_t_MidHeatupTime;0xE580 +rVcNoxSensMgr_t_MidNotHeatedTime;0xE581 +rVcNoxSensMgr_rt_MidAvailable;0xE582 +rVcNoxSensMgr_t_MidNOxReadyTime;0xE583 +rVcNoxSensMgr_t_MidO2ReadyTime;0xE584 +rVcNoxSensMgr_X_SelfTstMidO2LpFlt;0xE585 +rVcNoxSensMgr_X_SelfTstMidOxyDif;0xE586 +rVcNoxSensMgr_p_SelfTstMidDpfDif;0xE587 +rVcNoxSensMgr_X_SelfTstMidBufAvg;0xE588 +rVcNoxSensMgr_t_SelfTstMidRunTiDid;0xE589 +rVcObdLnt_t_TiSnceEffDnox;0xE590 +rVcLamDynCcM_t_FinTvLastDly;0xE591 +rVcLamDynCcM_t_FinTvLastSlp;0xE592 +rVcTmEdMon_t_EdCPmpOffTime;0xE593 diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_UInt32.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_UInt32.csv new file mode 100644 index 0000000..36638dc --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_FullRange_UInt32.csv @@ -0,0 +1,132 @@ +Range Min;Range Max +0xE400;0xE4FF +DID_NAME;DID ID +rVcDepTre_D_CompositeDID1;0xE400 +yVcAc_B_EvaprVlvReqFrnt;0xE401 +rVcRegCh_D_RegenState;0xE402 +rVcFtivMon_D_FtivState;0xE403 +sVcOilLvl_D_EngOilLvl;0xE404 +yVcTmHcc_B_RadBypassValve;0xE405 +rVcNoxSensMgr_D_UsProbeLnFaultType;0xE406 +rVcNoxSensMgr_t_UsLftCnt;0xE407 +rVcNoxSensMgr_D_DsProbeLnFaultType;0xE408 +rVcNoxSensMgr_t_DsLftCnt;0xE409 +rVcLamDynCcM_t_FinTvLastDly;0xE40A +rVcLamDynCcM_t_FinTvLastSlp;0xE40B +rVcTrsmHeatMon_D_TrsmCtrlAct;0xE40C +rVcTrsmNeuShkMon_D_ShkLogA;0xE40D +rVcTrsmNeuShkMon_D_ShkLogB;0xE40E +rVcTrsmNeuShkMon_D_ShkLogC;0xE40F +rVcTrsmNeuShkMon_D_ShkLogD;0xE410 +sVcTrsmShfShkMon_D_ShfShkCnt;0xE411 +rVcObdCmn_D_OdbCmnCompositeDID1;0xE412 +rVcTempStkM_D_BstSlopeCntDID;0xE413 +rVcTempStkM_D_InAirFlwCntDID;0xE414 +rVcTempStkM_D_InManiFlwCntDID;0xE415 +rVcOilLvl_D_EngOilLvl;0xE416 +rVcTrsmHeatMon_D_TrsmTCM;0xE417 +rVcTrsmNeuShkMon_D_ShkLogE;0xE418 +rVcObdCmnDIDs_D_GeneralCompositeDID1;0xE419 +rVcObdCmnDIDs_D_GeneralCompositeDID2;0xE41A +rVcTqmASpdLimReq_Z_IsdAccum;0xE41B +sVcNoxSensMgr_D_NoxSensUsNOxQual;0xE41C +sVcNoxSensMgr_D_NoxSensDsNOxQual;0xE41D +sVcEdcp_Te_MedTWtrPmpInt;0xE41E +sVcEdcp_Te_MedTWtrPmpInt;0xE41F +rVcDclVu1_D_DclVersion;0xE420 +rVcTqmCSpdLimReq_D_GearSh1And2DID;0xE421 +rVcTqmCSpdLimReq_n_Inp1And2DID;0xE422 +rVcTmEdMon_t_EdCHep7PumpOffTime;0xE423 +rVcTrsmHeatMon_D_TrsmTCM2;0xE424 +yVcEc_B_BrFootOnPedalSafe;0xE425 +sVcEmiGpf_D_SrvRegReqSts;0xE426 +yVcAesTx_B_CmprHPBypReq;0xE427 +sVcAesRx_Z_EChrgrFltFlg;0xE428 +yVcLamAdp_B_ExeTx;0xE429 +yVcLamCtrl_B_ExeTx;0xE42A +yVcAesTx_B_EgrActv;0xE42B +rVcDsePcr_D_LosLogg;0xE42C +rVcVmcPmm_D_EngRunReqLogg;0xE42D +sVcEc_D_HvacCooltVlvStsExt;0xE42E +rVcScrLvl_vol_ScrLvlDidNrcm;0xE42F +rVcScrLvl_vol_ScrLvlDidEcm;0xE430 +rVcScrLvl_vol_ScrLvlDidEcmFlt;0xE431 +rVcDrvInd_D_NrcmFaltArryDid;0xE432 +rVcDrvInd_L_UreaDstRemActDid;0xE433 +rVcDrvInd_Z_UreaCnsDid;0xE434 +rVcDrvInd_L_UreaDstRemDid;0xE435 +rVcNoxSensMgr_D_UsCalid;0xE436 +rVcNoxSensMgr_D_UsVer;0xE437 +rVcNoxSensMgr_D_DsCalid;0xE438 +rVcNoxSensMgr_D_DsVer;0xE439 +rVcTempStkM_D_BstWcacSlopeCntDID;0xE43A +xVcFuelCtrl_B_MemTiCmpl;0xE43B +xVcFuelCtrl_B_FuFilBlkdDetd;0xE43C +sVcScrDpm_Z_DpmSevIdx;0xE43D +rVcDpmsCtrl_D_SootSnsrCVN;0xE43E +rVcDpmsCtrl_D_SootSnsrCALID;0xE43F +sVcEmCo_D_Mode;0xE440 +sVcEmCo_D_BaseMode;0xE441 +sVcEmCo_D_EngSoftPurpose;0xE442 +rVcNoxSensMgr_D_StDsMch;0xE443 +rVcNoxSensMgr_D_StUsMch;0xE444 +rVcNoxSensMgr_D_StUsMchPrv;0xE445 +rVcNoxSensMgr_D_StDsMchPrv;0xE446 +rVcObdDpfDpms_D_CompSootVal;0xE447 +rVcEmCo_D_CompModeDID;0xE448 +xVcObdDps_B_IceRiskFlg;0xE449 +sVcObdDpfDpms_D_DpfDiagSts;0xE44A +sVcObdDpms_D_OoeDiagSts;0xE44B +sVcObdDpms_D_ClgTipDiagSts;0xE44C +rVcDpmsCtrl_D_SootSnsrStsPrv;0xE44D +rVcDpmsCtrl_D_SootSnsrStsFltDet;0xE44E +rVcDpmsCtrl_D_SootSnsrNbrRgns;0xE44F +rVcObdDpms_D_SootSnsrErrSts;0xE450 +rVcObdDpms_D_SootSnsrPrvErrSts;0xE451 +rVcObdDpms_D_GainIumprCnt;0xE452 +rVcObdDpms_D_RgnIumprCnt;0xE453 +rVcObdDpms_D_NbrSootSnsrRstReq;0xE454 +rVcTrsmShfShkMon_D_SumGrShftsGarMod;0xE455 +rVcTrsmShfShkMon_D_SumShkShftsGarMod;0xE456 +rVcTrsmShfShkMon_D_SumGrShftsLoMod;0xE457 +rVcTrsmShfShkMon_D_SumShkShftsLoMod;0xE458 +rVcTrsmShfShkMon_D_SumGrShftsHiMod;0xE459 +rVcTrsmShfShkMon_D_SumShkShftsHiMod;0xE45A +rVcTrsmShfShkMon_D_SumGrShftsTipMod;0xE45B +rVcTrsmShfShkMon_D_SumShkShftsTipMod;0xE45C +rVcTrsmShfShkMon_D_SumGrShftsSpMod;0xE45D +rVcTrsmShfShkMon_D_SumShkShftsSpMod;0xE45E +sVcIhu_D_DrvModReq;0xE45F +rVcRdp_D_DrvValCnd;0xE460 +rVcNoxSensMgr_D_SelfTstUsBufMax;0xE461 +rVcNoxSensMgr_D_SelfTstUsBufMin;0xE462 +rVcNoxSensMgr_D_SelfTstDsBufMax;0xE463 +rVcNoxSensMgr_D_SelfTstDsBufMin;0xE464 +rVcObdDpms_t_TimeSnceSnsrRgn;0xE465 +rVcObdDpms_L_VehDstSnceSnsrRgn;0xE466 +rVcObdDpms_L_ExhDstSnceSnsrRgn;0xE467 +rVcObdDpms_R_GainTstVal;0xE468 +rVcObdDpms_R_GainErrThd;0xE46A +rVcObdDpms_X_RgnTstVal;0xE46B +rVcObdDpms_X_RgnErrThd;0xE46C +rVcObdDpms_t_ClgTipClDwnTi;0xE46D +rVcDclVuMdl_rVcDclVu1_D_DclVersion;0xE46E +rVcNoxSensMgr_D_StMidMchPrv;0xE46F +sVcNoxSensMgr_D_NoxSensMidNOxQual;0xE470 +rVcNoxSensMgr_D_MidProbeLnFaultType;0xE471 +rVcNoxSensMgr_D_MidCalid;0xE472 +rVcNoxSensMgr_D_MidVer;0xE473 +rVcNoxSensMgr_D_SelfTstMidBufMin;0xE474 +rVcNoxSensMgr_D_SelfTstMidBufMax;0xE475 +rVcNoxSensMgr_t_MidLftCnt;0xE476 +rVcLeakMon_D_State;0xE477 +rVcPurgMon_D_SwiftStatus;0xE478 +rVcTrsmTkOffMon_D_JudderShkLogA;0xE479 +rVcTrsmTkOffMon_D_JudderShkLogB;0xE47A +rVcTrsmTkOffMon_D_JudderShkLogC;0xE47B +rVcTrsmTkOffMon_D_JudderShkLogD;0xE47C +rVcTrsmTkOffMon_D_JudderShkLogE;0xE47D +rVcTrsmTkOffMon_D_JudderShkLogF;0xE47E +sVcEdcp_n_CooltPmpAct;0xE47F +rVcVscSl_v_VehMaxVSL;0xE487 +rVcVscSl_D_VehMaxPacked;0xE488 diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_UInt32.csv b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_UInt32.csv new file mode 100644 index 0000000..095a219 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ConfigDocuments/DIDIds_UInt32.csv @@ -0,0 +1,8 @@ +Range Min;Range Max +0xE400;0xE404 +DID_NAME;DID ID +rVcDepTre_D_CompositeDID1;0xE400 +yVcAc_B_EvaprVlvReqFrnt;0xE401 +rVcRegCh_D_RegenState;0xE402 +rVcFtivMon_D_FtivState;0xE403 +rVcLeakMon_D_State;0xE404 diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ProjectCfg.json b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ProjectCfg.json new file mode 100644 index 0000000..9f26928 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/ProjectCfg.json @@ -0,0 +1,74 @@ +{ + "ConfigFileVersion": "0.2.1", + "BaseConfig" : "../../../ConfigDocuments/BaseConfig.json", + "ProjectInfo" : { + "yamlInterface": true, + "projConfig" : "CSP_CATC", + "a2LFileName": "SPM.a2l", + "ecuSupplier" : "CSP", + "ecuType" : "", + "unitCfgDeliveryDir": "./output/UnitCfgs", + "configDir": "ConfigDocuments", + "prjCodeswitches": "CSP_Codeswitch_Setup*.csv", + "commonSrcDir": "../../../Models/Common/pybuild_src", + "prjUnitSrcDir": "../../../Models/*/Vc*/pybuild_src", + "prjUnitCfgDir": "../../../Models/*/Vc*/pybuild_cfg", + "prjUnitMdlDir": "../../../Models/*/Vc*" + }, + "UnitCfgs": "./conf.local/rasters.json", + "includesPaths": [ + "../../../ConfigDocuments/code_to_include/headers/csp", + "../../../matlab-scripts/CustomCode/VcMath/code", + "../../../matlab-scripts/CustomCode/CoreAPI/RBCoreAbstraction/VcCoreSupplierAbstraction.h", + "../../../matlab-scripts/CustomCode/CoreAPI/RBCoreAbstraction/VcRBCoreAdaptor.c", + "../../../matlab-scripts/CustomCode/CoreAPI/RBCoreAbstraction/VcRBCoreAlias.h", + "../../../matlab-scripts/CustomCode/CoreAPI/RBCoreAbstraction/VcRBCoreTmpIdMap.h" + ], + "includedCommonFiles": [ + "Tab1DIntp2I1T438", + "FirstOrderFilterExtraFeatF32", + "Tab1DIntpI1T0", + "Tab1DIntpI1T1", + "Tab1DIntpI1T14", + "Tab1DIntpI1T3", + "Tab1DIntpI1T4", + "Tab1DIntpI1T48", + "Tab1DIntpI1T49", + "Tab1DIntpI1T51", + "Tab1DIntpI1T52", + "Tab1DIntpI1T54", + "Tab1DIntpI1T6", + "Tab2DIntpI1T0", + "Tab2DIntpI1T1", + "Tab2DIntpI1T3456", + "Tab2DIntpI1T3457", + "Tab2DIntpI1T3460", + "Tab2DIntpI1T3462", + "Tab2DIntpI1T385", + "Tab2DIntpI1T4", + "Tab2DIntpI1T576", + "Tab2DIntpI1T577", + "Tab2DIntpI1T6", + "Tab2DIntpI1T902", + "TabIdxS18T0", + "TabIdxS18T1", + "TabIdxS18T3", + "TabIdxS18T384", + "TabIdxS18T385", + "TabIdxS18T387", + "TabIdxS18T388", + "TabIdxS18T390", + "TabIdxS18T4", + "TabIdxS18T6", + "TabIdxS18T72", + "TabIdxS18T73", + "TabIdxS18T75", + "TabIdxS18T76", + "tl_basetypes", + "tl_types", + "SaturationF32", + "LimitInterpolationF32", + "FirstOrderFilterF32", + "SafeDivideF32" + ] +} diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/DeviceDomains.json b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/DeviceDomains.json new file mode 100644 index 0000000..575002d --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/DeviceDomains.json @@ -0,0 +1,9 @@ +{ + "ihra": "ihra", + "ihfa": "ihfa", + "fioc": "fioc", + "hvbm": "hvbm", + "ccmb": "ccmb", + "hvacsys": "hvacsys", + "hbmf": "hbmf" +} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/ServiceInterfaces.json b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/ServiceInterfaces.json new file mode 100644 index 0000000..6df8ba6 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/ServiceInterfaces.json @@ -0,0 +1,5 @@ +{ + "ClimateAndThermalControlInternal": "climate-and-thermal-control-service", + "VehicleModesProvider": "vehicle_modes_provider", + "VehicleMotionState": "vehiclemotionstate-service" +} \ No newline at end of file diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/cs-module.yml b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/cs-module.yml new file mode 100644 index 0000000..73fdcdb --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/cs-module.yml @@ -0,0 +1,68 @@ +id: catc +description: + brief: climate-and-thermal-ctrl + full: Climate and Thermal Control +organisation: ARTCLIMATE, ARTUPTIME, ARTTM +url: https://dummy-gerrit.dummy-domain.biz/plugins/gitiles/dummy-repo/+/master/README.md +source: https://dummy-gerrit.dummy-domain.biz/admin/repos/dummy-repo +asil: QM +tags: + - Design Draft + - Implementation Draft +dependencies: + cs-core: + min-version: 0.0.2 + climate-and-thermal-control-service: + min-version: 0.1.0 + vehicle_modes_provider: + min-version: 6.0.0 + vehiclemotionstate-service: + min-version: 2.3.5 + dp-fioc: + min-version: 6.0.2 + dp-ccmb: + min-version: 0.0.2 + dp-hvacsys: + min-version: 0.0.5 + hal-hvec-thermal-properties: + min-version: 0.1.0 + hal-hvec-electrical-properties: + min-version: 0.1.2 + hal-hvcc-monitor: + min-version: 0.0.2 + # hal-hvcc-requests: + # min-version: 0.0.2 + hal-hlcm-electrical-measurement: + min-version: 1.0.1 + hal-hlcm-system-states: + min-version: 1.0.1 + # electrical_energy_coordinator: + # min-version: 5.0.4 + hal-hvec-contactor-status: + min-version: 0.1.1 + # dp-aqsm: + # min-version: 0.0.2 + +maintainer: + name: John Doe + email: john.doe@volvocars.com +peers: + - name: Aurora Stephenson + email: aurora.stephenson@volvocars.com + - name: Joe Hull + email: joe.hull@volvocars.com + - name: Riley Harrington + email: riley.harrington@volvocars.com + - name: Legacy Rose + email: legacy.rose@volvocars.com +# List of approved architectural debt +# All subfields are mandatory, and there must be at least one approver listed for each debt +architectural-debt: + - description: Some handy description. + motivation: > + Some handy motivation, with a bit more text. + Let's make it multiline. This is the second line. + And this is the third. Why not? + approvers: + - name: Noah Harper + email: noah.harper@volvocars.com diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/nvm_structs.json b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/nvm_structs.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/nvm_structs.json @@ -0,0 +1 @@ +[] diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/project_defaults.txt b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/project_defaults.txt new file mode 100644 index 0000000..a73803c --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/project_defaults.txt @@ -0,0 +1,7 @@ + +# Configuration to pick in SPM_Releaseswitch_Setup +ProjName=CSP_Thermal +branchName=Trunk + +MAKE_ENVIRONMENT_NAME=RB_MG1CS080_2B_B47_00Q000p +POWERWEAVER_IF_VERSION=35 diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/rasters.json b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/rasters.json new file mode 100644 index 0000000..67959b8 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/CATC/conf.local/rasters.json @@ -0,0 +1,69 @@ +{ + "SampleTimes": { + "VcExt50ms": 0.05, + "VcExt100ms": 0.1, + "VcExt1000ms": 1.0 + }, + "VcExt50ms": [ + "VcAcMRx", + "VcTestRx", + "VcAcHmiRx", + "VcAcHmiState", + "VcAcHmiTx", + "VcTestTx" + ], + "VcExt100ms": [ + "VcCcCmfRec", + "VcCcHvcTStatFil", + "VcCcCmfSpEvp", + "VcAcMSysPrtn", + "VcCcSnsrTx", + "VcAcSlim", + "VcAcRx", + "VcAcMPOffs", + "VcAcMTOffs", + "VcAcFan", + "VcAcMChillrExVlv", + "VcAcMEvapFr", + "VcAcMEvapChillr", + "VcAcMEvapFrChillr", + "VcAcModMgr", + "VcCcCmfTx", + "VcAcMExVlv", + "VcAcEgyMgr", + "VcAcLim", + "VcAcHtgMdlHex", + "VcCcHvcRx", + "VcCcHvacCtrl", + "VcCcHvcTActrCtr", + "VcCcHvcTAvg", + "VcCcHvcTSur", + "VcCcHvcTx", + "VcAcChillerExv", + "VcAcCmprCtrl", + "VcAcVlvCtrl", + "VcAcTx", + "VcCcCmfRx", + "VcTdTOffsM", + "VcTdSigHub", + "VcTcRx", + "VcTcAirFlow", + "VcTcCooltSysCtrl", + "VcTcEgyMgr", + "VcTcThermEstimn", + "VcTcThermCoorr", + "VcTcThermReq", + "VcTcVem", + "VcTdCptM", + "VcTdEdTStkM", + "VcTdCmptmtTStkM", + "VcTdHvBattTStkM", + "VcTdEdVlvM", + "VcTcTx" + ], + "VcExt1000ms": [ + "VcCcCmptRx", + "VcCcCmptEr", + "VcCcCmptTx" + ] +} diff --git a/tests/pybuild/cnfg_files/test-repo/Projects/CSP/hal_list.yaml b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/hal_list.yaml new file mode 100644 index 0000000..2fab253 --- /dev/null +++ b/tests/pybuild/cnfg_files/test-repo/Projects/CSP/hal_list.yaml @@ -0,0 +1,8 @@ +hal-hvec-thermal-properties: HVECThermalPropertiesHal +hal-hvec-electrical-properties: HVECElectricalPropertiesHal +hal-hvcc-monitor: HighVoltageChargingMonitorHal +hal-hvcc-requests: HighVoltageChargingRequestsHal +hal-hlcm-electrical-measurement: HighVoltageDcDcConverterElectricalMeasurementHal +hal-hlcm-system-states: HighVoltageDcDcConverterSystemStatesHal +hal-hvec-contactor-status: HVECContactorStatusHal + diff --git a/tests/pybuild/cnfg_files/test.a2l b/tests/pybuild/cnfg_files/test.a2l new file mode 100644 index 0000000..ad751ac --- /dev/null +++ b/tests/pybuild/cnfg_files/test.a2l @@ -0,0 +1,1545 @@ + + +/*===========================================================================*/ +/* VcAesTrboM */ +/*===========================================================================*/ + + /begin CHARACTERISTIC + cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP /* Name */ + "Use absolute pressure in peak monitor" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesTrboM_B_IsObdExeSpm /* Name */ + "Defines where is the obd exe flag coming from (1 if coming from SPM)" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesTrboM_B_IsObdExeSpm */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesTrboM_B_PpLkExhFiMPerm /* Name */ + "Switch to bypass FiM permission" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesTrboM_B_PpLkExhFiMPerm */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + + + /begin AXIS_PTS + mVcAesTrboM_rt_TrboMonrTgtLim_c /* Name */ + "Target turbo pressure ratio limit for low boost, engine speed breakpoints" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + UWORD_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_0_25 /* Conversion */ + 10 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + mVcAesTrboM_rt_TrboMonrTgtLim_r /* Name */ + "Target turbo pressure ratio limit for low boost, Trq breakpoints" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + SWORD_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_0_015625 /* Conversion */ + 10 /* MaxAxisPoints */ + -500 /* LowerLimit */ + 500 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesTrboM_n_EngSpdMinLim_x /* Name */ + "Pressure upstream turbo compressor breakpoint data " /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 110 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesTrboM_t_TrboMonrLoBoostTiDly_x /* Name */ + "Pressure upstream turbo compressor breakpoint data " /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 110 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin MEASUREMENT + rVcAesTrboM_D_TrboVntDpHiTmp /* Name */ + "Vnt turbo high error counter value " /* LongIdentifier */ + SBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -128 /* LowerLimit */ + 127 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesTrboM_D_TrboVntDpLoTmp /* Name */ + "Vnt turbo high error counter value " /* LongIdentifier */ + SBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -128 /* LowerLimit */ + 127 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesTrboM_p_EngProtnTrboPPeakPres /* Name */ + "Pressure for BSTPEAK monitor" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_a /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -3.4028234663852886e38 /* LowerLimit */ + 3.4028234663852886e38 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + + /begin COMPU_METHOD + EQ_LSB_0_000244140625 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%15.12" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 0.000244140625 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_0_015625 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%10.6" /* Format */ + "Nm" /* Unit */ + COEFFS 0 1 0 0 0 0.015625 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_0_25 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%8.2" /* Format */ + "rpm" /* Unit */ + COEFFS 0 1 0 0 0 0.25 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_a /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "kPa" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_b /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "rpm" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_c /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_d /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_e /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%3.0" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_f /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%3.0" /* Format */ + "deg C" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_g /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%3.0" /* Format */ + "s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_j /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "deg C" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_k /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "deg C" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_l /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_m /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "kPa/s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_n /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "g/s2" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + VOID_SCALING /* Name */ + "Void scaling for unscaled variables" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + VOID_SCALING_h /* Name */ + "Void scaling for unscaled variables" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + SAesTrboM101_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLoErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM102_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM103_1431_CoreLPHiBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLPHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_TrboMonrLPHiBoostRnkVal /* Identifier */ + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiErr /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiNrm /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiFalt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM123_P__rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM104_1432_CoreHPHiBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHPHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_TrboMonrHPHiBoostRnkVal /* Identifier */ + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiErr /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiNrm /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiFalt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM133_P__rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM105_1433_CoreLPLoBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLPLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_TrboMonrLPLoBoostRnkVal /* Identifier */ + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoErr /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoNrm /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoFalt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM143_P__rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM106_1434_CoreHPLoBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHPLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_TrboMonrHPLoBoostRnkVal /* Identifier */ + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoErr /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoNrm /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoFalt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM153_P__rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM123_P__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLPHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrLPHiErr /* Identifier */ + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM128_WithFault /* Identifier */ + SAesTrboM127_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM127_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPHiErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM128_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLPHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM133_P__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHPHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrHPHiErr /* Identifier */ + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM138_WithFault /* Identifier */ + SAesTrboM137_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM137_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPHiErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM138_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHPHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM143_P__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLPLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrLPLoErr /* Identifier */ + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM148_WithFault /* Identifier */ + SAesTrboM147_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM147_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPLoErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM148_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLPLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLPLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM153_P__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHPLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrHPLoErr /* Identifier */ + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM158_WithFault /* Identifier */ + SAesTrboM157_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM157_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPLoErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM158_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHPLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHPLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM159_21_PPeakTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakErrLim /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakHealLim /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakRnkMax /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakRnkMin /* Identifier */ + cVcAesTrboM_t_EngProtnTrboPeakErrDly /* Identifier */ + cVcAesTrboM_t_EngProtnTrboPeakHealDly /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_EngProtnTrboPPeakRnk /* Identifier */ + xVcAesTrboM_B_ObdExe /* Identifier */ + yVcAesTrboM_B_EngProtnTrboPPeakErr /* Identifier */ + rVcAesTrboM_p_EngProtnTrboPPeakPres /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM172_Vc_SetRanking /* Identifier */ + SAesTrboM168_P__rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM168_P__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_EngProtnTrboPPeakErrLim /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakRnkMax /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakRnkMin /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + yVcAesTrboM_B_EngProtnTrboPPeakErr /* Identifier */ + rVcAesTrboM_p_EngProtnTrboPPeakPres /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM174_WithFault /* Identifier */ + SAesTrboM173_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM172_Vc_SetRanking /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_EngProtnTrboPPeakRnk /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM173_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_EngProtnTrboPPeakErrLim /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakRnkMin /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_EngProtnTrboPPeakPres /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM174_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_EngProtnTrboPPeakErrLim /* Identifier */ + cVcAesTrboM_p_EngProtnTrboPPeakRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_EngProtnTrboPPeakPres /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM175_31_StuckTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpValveStuckNoPump /* Identifier */ + cVcAesTrboM_p_PpValveStuck /* Identifier */ + cVcAesTrboM_t_PpValveStuckErrDly /* Identifier */ + cVcAesTrboM_t_PpValveStuckHealDly /* Identifier */ + cVcAesTrboM_t_PpValveStuckOkDly /* Identifier */ + cVcAesTrboM_p_PpValveStuckMinPres /* Identifier */ + cVcAesTrboM_t_PpValveStuckRefResetDly /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_PpValveStkExe /* Identifier */ + xVcAesTrboM_B_PpValveStuckUnfiltErr /* Identifier */ + xVcAesTrboM_B_PpValveStuckOkExe /* Identifier */ + xVcAesTrboM_B_PpValveStuckErr /* Identifier */ + rVcAesTrboM_p_PpValveStuckPDiff /* Identifier */ + rVcAesTrboM_p_PpValveStuckPDiffMax /* Identifier */ + xVcAesTrboM_B_PpValveStuckEnable /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM19_111_PressureRt /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + mVcAesTrboM_rt_TrboMonrTgtLim /* Identifier */ + mVcAesTrboM_rt_TrboMonrTgtLim_r /* Identifier */ + mVcAesTrboM_rt_TrboMonrTgtLim_c /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_rt_TrboMonrTgtTqNLim /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + rVcAesTrboM_rt_TrboMonrTgtLim /* Identifier */ + rVcAesTrboM_rt_TrboMonrSnsr /* Identifier */ + rVcAesTrboM_rt_TrboMonrTgt /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM191_41_LeakTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpLkUseMaxtimeout /* Identifier */ + cVcAesTrboM_p_PpLkLim /* Identifier */ + cVcAesTrboM_t_PpLeakPlsDly /* Identifier */ + cVcAesTrboM_t_PpLeakTimeOut /* Identifier */ + cVcAesTrboM_t_PpLkErrDly /* Identifier */ + cVcAesTrboM_t_PpLkHealDly /* Identifier */ + cVcAesTrboM_t_PpLkOkDly /* Identifier */ + cVcAesTrboM_t_PpLkPumpReqTimeOut /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_PpLkPumpAct /* Identifier */ + xVcAesTrboM_B_PpLkExe /* Identifier */ + xVcAesTrboM_B_PpLkFltFlagUnfiltd /* Identifier */ + xVcAesTrboM_B_PpLkOk /* Identifier */ + rVcAesTrboM_p_PpLkTstValue /* Identifier */ + xVcAesTrboM_B_PpLkMaxPumpReqTimeOut /* Identifier */ + xVcAesTrboM_B_PpLkErr /* Identifier */ + xVcAesTrboM_B_PpLkFltFlag /* Identifier */ + xVcAesTrboM_B_PpLkPumpActDly /* Identifier */ + rVcAesTrboM_p_PpLkInitPres /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM192_42_LeakExhTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpLkExhNoPumpUse /* Identifier */ + cVcAesTrboM_p_PpLkExhLim /* Identifier */ + cVcAesTrboM_t_PpLkExhAftStrt /* Identifier */ + cVcAesTrboM_t_PpLkExhErrDly /* Identifier */ + cVcAesTrboM_t_PpLkExhHealDly /* Identifier */ + cVcAesTrboM_t_PpLkExhOkDly /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_PpLkExhFltFlagUnfiltd /* Identifier */ + xVcAesTrboM_B_PpLkExhExe /* Identifier */ + xVcAesTrboM_B_PpLkExhErr /* Identifier */ + xVcAesTrboM_B_PpLkExhFtlFlag /* Identifier */ + rVcAesTrboM_p_PpLkExhTstValue /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM215_51_PpSmalLeakTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpSmLkNotUseCmprOk /* Identifier */ + cVcAesTrboM_Te_PpSmLkMinTempEna /* Identifier */ + cVcAesTrboM_p_PpSmLkMaxDrop /* Identifier */ + cVcAesTrboM_t_PpSmLkErrDly /* Identifier */ + cVcAesTrboM_t_PpSmLkHealDly /* Identifier */ + cVcAesTrboM_t_PpSmLkMaxLastCompRun /* Identifier */ + cVcAesTrboM_t_PpSmLkMinLastCompRun /* Identifier */ + cVcAesTrboM_t_PpSmLkOkDly /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_PpSmLkOk /* Identifier */ + xVcAesTrboM_B_PpSmLkFltFlagUnfiltd /* Identifier */ + xVcAesTrboM_B_PpSmLkExe /* Identifier */ + xVcAesTrboM_B_PpSmalLeakExe /* Identifier */ + xVcAesTrboM_B_PpSmLkPreErr /* Identifier */ + rVcAesTrboM_p_PpSmLkTstVal /* Identifier */ + xVcAesTrboM_B_PpSmLkErr /* Identifier */ + xVcAesTrboM_B_PpSmLkFltFlag /* Identifier */ + rVcAesTrboM_p_PpSmLkInitPres /* Identifier */ + rVcAesTrboM_t_PpSmLkCompRun /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM227_61_RelayStuckTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_Rly1StkLim /* Identifier */ + cVcAesTrboM_p_Rly2StkLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_Rly2StkRly1Act /* Identifier */ + xVcAesTrboM_B_Rly2StkOk /* Identifier */ + xVcAesTrboM_B_Rly1StkErr /* Identifier */ + xVcAesTrboM_B_Rly2StkExe /* Identifier */ + xVcAesTrboM_B_Rly2StkErr /* Identifier */ + xVcAesTrboM_B_Rly1StkRly2Act /* Identifier */ + xVcAesTrboM_B_Rly1StkOk /* Identifier */ + xVcAesTrboM_B_Rly1StkExe /* Identifier */ + rVcAesTrboM_p_Rly2StkTstValue /* Identifier */ + rVcAesTrboM_p_Rly1StkTstValue /* Identifier */ + rVcAesTrboM_p_Rly2StkInitPres /* Identifier */ + rVcAesTrboM_p_Rly1StkInitPres /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM249_621_CoreVntDp /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_TrboVntDpRst /* Identifier */ + cVcAesTrboM_D_TrboVntDpHiErrLim /* Identifier */ + cVcAesTrboM_D_TrboVntDpHiNrmLim /* Identifier */ + cVcAesTrboM_D_TrboVntDpHiRstVal /* Identifier */ + cVcAesTrboM_D_TrboVntDpLoErrLim /* Identifier */ + cVcAesTrboM_D_TrboVntDpLoNrmLim /* Identifier */ + cVcAesTrboM_D_TrboVntDpLoRstVal /* Identifier */ + cVcAesTrboM_D_TrboVntStsCntMax /* Identifier */ + cVcAesTrboM_D_TrboVntStsCntMin /* Identifier */ + cVcAesTrboM_D_TrboVntStsNOKHI /* Identifier */ + cVcAesTrboM_D_TrboVntStsNOKInc /* Identifier */ + cVcAesTrboM_D_TrboVntStsNOKLO /* Identifier */ + cVcAesTrboM_D_TrboVntStsOK /* Identifier */ + cVcAesTrboM_D_TrboVntStsOKDec /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_D_TrboVntDpLoTmp /* Identifier */ + rVcAesTrboM_D_TrboVntDpHiTmp /* Identifier */ + xVcAesTrboM_B_TrboVntDpLoTmpNrm /* Identifier */ + xVcAesTrboM_B_TrboVntDpHiTmpErr /* Identifier */ + xVcAesTrboM_B_TrboVntDpLoTmpErr /* Identifier */ + xVcAesTrboM_B_TrboVntStsLoErr /* Identifier */ + xVcAesTrboM_B_TrboVntStsHiErr /* Identifier */ + xVcAesTrboM_B_TrboVntDpStsLoOk /* Identifier */ + xVcAesTrboM_B_TrboVntDpStsHiOk /* Identifier */ + sVcAesTrboM_D_TrboVntDpStsLoCnt /* Identifier */ + sVcAesTrboM_D_TrboVntDpStsHiCnt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM264_WriteNVM /* Identifier */ + SAesTrboM261_WriteNVM /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM261_WriteNVM /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcAesTrboM_D_TrboVntDpStsHiCnt /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM264_WriteNVM /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcAesTrboM_D_TrboVntDpStsLoCnt /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM29_123_2T /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_n_TrboMonrHPEngSpdMax /* Identifier */ + cVcAesTrboM_n_TrboMonrLPEngSpdMin /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrLoExe /* Identifier */ + xVcAesTrboM_B_TrboMonrHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoExe /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoExe /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM3_1_TrboMonr /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + tVcAesTrboM_t_TrboMonrLoBoostTiDly /* Identifier */ + tVcAesTrboM_t_TrboMonrLoBoostTiDly_x /* Identifier */ + tVcAesTrboM_n_EngSpdMinLim /* Identifier */ + tVcAesTrboM_n_EngSpdMinLim_x /* Identifier */ + cVcAesTrboM_t_TrboMonrHiAvgTi /* Identifier */ + cVcAesTrboM_t_TrboMonrLoAvgTi /* Identifier */ + cVcAesTrboM_B_TrboMonrBypFiMPerm /* Identifier */ + cVcAesTrboM_Te_TrboMonrEngClntMinLim /* Identifier */ + cVcAesTrboM_B_TrboMonrCmprBypCfg /* Identifier */ + cVcAesTrboM_B_TrboMonrCmprPUsCfg /* Identifier */ + cVcAesTrboM_B_TrboMonrLoEOM0 /* Identifier */ + cVcAesTrboM_B_TrboMonrLoEOM1 /* Identifier */ + cVcAesTrboM_B_TrboMonrLoEOM2 /* Identifier */ + cVcAesTrboM_B_TrboMonrLoEOM3 /* Identifier */ + cVcAesTrboM_B_TrboMonrLoEOM4 /* Identifier */ + cVcAesTrboM_B_TrboMonrLoEOM5 /* Identifier */ + cVcAesTrboM_B_TrboMonrLoRegDsbl /* Identifier */ + cVcAesTrboM_B_TrboMonrSCCluCfg /* Identifier */ + cVcAesTrboM_B_TrboMonrTrboActvLoDsbl /* Identifier */ + cVcAesTrboM_Te_TrboMonrLoRegMin /* Identifier */ + cVcAesTrboM_Z_TrboMonrPTrjDFilMaxLim /* Identifier */ + cVcAesTrboM_Z_TrboMonrPTrjDFilMinLim /* Identifier */ + cVcAesTrboM_p_TrboMonrIntkBoostPTrjMinLim /* Identifier */ + cVcAesTrboM_p_TrboMonrSCPMaxLim /* Identifier */ + cVcAesTrboM_t_TrboMonrLoRegDly /* Identifier */ + cVcAesTrboM_t_TrboMonrPTrjStabDly /* Identifier */ + cVcAesTrboM_tc_TrboMonrTiConPTrjDFil /* Identifier */ + cVcAesTrboM_B_TrboMonrHiEOM0 /* Identifier */ + cVcAesTrboM_B_TrboMonrHiEOM1 /* Identifier */ + cVcAesTrboM_B_TrboMonrHiEOM2 /* Identifier */ + cVcAesTrboM_B_TrboMonrHiEOM3 /* Identifier */ + cVcAesTrboM_B_TrboMonrHiEOM4 /* Identifier */ + cVcAesTrboM_B_TrboMonrHiEOM5 /* Identifier */ + cVcAesTrboM_B_TrboMonrHiRegDsbl /* Identifier */ + cVcAesTrboM_B_TrboMonrTrboActvHiDsbl /* Identifier */ + cVcAesTrboM_Te_TrboMonrHiRegMin /* Identifier */ + cVcAesTrboM_Z_TrboMonrHiPTrjDFilMaxLim /* Identifier */ + cVcAesTrboM_Z_TrboMonrHiPTrjDFilMinLim /* Identifier */ + cVcAesTrboM_Z_TrboMonrThrMFlowDMinLim /* Identifier */ + cVcAesTrboM_n_TrboMonrNEngMaxLim /* Identifier */ + cVcAesTrboM_p_TrboMonrAmbPDifMinLim /* Identifier */ + cVcAesTrboM_p_TrboMonrCacPDifMinLim /* Identifier */ + cVcAesTrboM_t_TrboMonrHiPTrjStabDly /* Identifier */ + cVcAesTrboM_t_TrboMonrHiRegDly /* Identifier */ + cVcAesTrboM_tc_TrboMonrHiTiConPTrjDFil /* Identifier */ + cVcAesTrboM_tc_TrboMonrThrMFlowDFil /* Identifier */ + cVcAesTrboM_B_TrboMonrBoostPCfg /* Identifier */ + cVcAesTrboM_B_TrboMonrSCPCfg /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_TrboMonrSHiErr /* Identifier */ + xVcAesTrboM_B_TrboMonrSLoErr /* Identifier */ + sVcAesTrboM_p_TrboMonrAmbPDif /* Identifier */ + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoTstValCmplt /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoExe /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + xVcAesTrboM_B_TrboMonrHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoExe /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrLoExe /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrGetPerm /* Identifier */ + xVcAesTrboM_B_TrboMonrEngClntEna /* Identifier */ + xVcAesTrboM_B_TrboMonrLoPTrjStab /* Identifier */ + xVcAesTrboM_B_TrboMonrLoRegEna /* Identifier */ + xVcAesTrboM_B_TrboMonrLoCmprBypActvEna /* Identifier */ + xVcAesTrboM_B_TrboMonrActvLoEna /* Identifier */ + xVcAesTrboM_B_TrboMonrLoRegActv /* Identifier */ + xVcAesTrboM_B_TrboMonrLoIntkBoostTrjEna /* Identifier */ + xVcAesTrboM_B_TrboMonrLoEngSpdEna /* Identifier */ + rVcAesTrboM_p_TrboMonrIntkBoostPTrjAmbDif /* Identifier */ + rVcAesTrboM_p_TrboMonrSCAmbPDiff /* Identifier */ + rVcAesTrboM_p_TrboMonrPCmprUs /* Identifier */ + xVcAesTrboM_B_TrboMonrLoRegDly /* Identifier */ + xVcAesTrboM_B_TrboMonrPTrjStabEna /* Identifier */ + xVcAesTrboM_B_TrboMonrLoDynEna /* Identifier */ + xVcAesTrboM_B_TrboMonrSCPEna /* Identifier */ + rVcAesTrboM_Z_TrboMonrPTrjDFil /* Identifier */ + xVcAesTrboM_B_TrboMonrHiPTrjStab /* Identifier */ + xVcAesTrboM_B_TrboMonrHiRegActv /* Identifier */ + xVcAesTrboM_B_TrboMonrHiRegEna /* Identifier */ + xVcAesTrboM_B_TrboMonrActvHiEna /* Identifier */ + xVcAesTrboM_B_TrboMonrCacPTrjDifEna /* Identifier */ + xVcAesTrboM_B_TrboMonrThrFlowDEna /* Identifier */ + xVcAesTrboM_B_TrboMonrNEngEna /* Identifier */ + xVcAesTrboM_B_TrboMonrPAmbDiffEna /* Identifier */ + xVcAesTrboM_B_TrboMonrHiRegDly /* Identifier */ + xVcAesTrboM_B_TrboMonrHiPTrjStabEna /* Identifier */ + rVcAesTrboM_Z_TrboThrMFlowDFild /* Identifier */ + rVcAesTrboM_Z_TrboMonrHiPTrjDFil /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM19_111_PressureRt /* Identifier */ + SAesTrboM73_143_2T /* Identifier */ + SAesTrboM72_142_CoreLoBoost /* Identifier */ + SAesTrboM71_141_CoreHiBoost /* Identifier */ + SAesTrboM53_Avg2 /* Identifier */ + SAesTrboM52_Avg1 /* Identifier */ + SAesTrboM51_131_2T /* Identifier */ + SAesTrboM29_123_2T /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM4_2_EngProtnTrboPPeak /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_TrboMonrPPeakBypFiMPerm /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + yVcAesTrboM_B_EngProtnTrboPPeakErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM159_21_PPeakTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM5_3_PPvalveStuckClosed /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM175_31_StuckTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM51_131_2T /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHPHiAvgTi /* Identifier */ + cVcAesTrboM_t_TrboMonrHPLoAvgTi /* Identifier */ + cVcAesTrboM_t_TrboMonrLPHiAvgTi /* Identifier */ + cVcAesTrboM_t_TrboMonrLPLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiExe /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiExe /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoExe /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoExe /* Identifier */ + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoTstValCmplt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM58_LPLoTstVal /* Identifier */ + SAesTrboM57_LPHiTstVal /* Identifier */ + SAesTrboM56_HPLoTstVal /* Identifier */ + SAesTrboM55_HPHiTstVal /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM52_Avg1 /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHiExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM68_Subsystem /* Identifier */ + SAesTrboM67_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM53_Avg2 /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLoExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM70_Subsystem /* Identifier */ + SAesTrboM69_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM55_HPHiTstVal /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHPHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrHPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM60_Subsystem /* Identifier */ + SAesTrboM59_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM56_HPLoTstVal /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHPLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrHPLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM62_Subsystem /* Identifier */ + SAesTrboM61_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM57_LPHiTstVal /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrLPHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrLPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM64_Subsystem /* Identifier */ + SAesTrboM63_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM58_LPLoTstVal /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrLPLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrLPLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM66_Subsystem /* Identifier */ + SAesTrboM65_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM59_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM6_4_PpLeakage /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpLkExhFiMPerm /* Identifier */ + cVcAesTrboM_B_PpLkFiMPerm /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM192_42_LeakExhTest /* Identifier */ + SAesTrboM191_41_LeakTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM60_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHPHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM61_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM62_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHPLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM63_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM64_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrLPHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM65_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM66_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrLPLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM67_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM68_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM69_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM7_5_PpSmallLeakage /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpSmLkBypFiMPerm /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM215_51_PpSmalLeakTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM70_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_t_TrboMonrLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrCacPTrjLimDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM71_141_CoreHiBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_TrboMonrSHiBoostRnkVal /* Identifier */ + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrSHiOk /* Identifier */ + xVcAesTrboM_B_TrboMonrSHiErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM83_Pr__rtional_Ranking /* Identifier */ + SAesTrboM75_1411_Mode06 /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM72_142_CoreLoBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_Z_TrboMonrSLoBoostRnkVal /* Identifier */ + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrSLoOk /* Identifier */ + xVcAesTrboM_B_TrboMonrSLoErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM97_Pr__rtional_Ranking /* Identifier */ + SAesTrboM89_1421_Mode06 /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM73_143_2T /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_TrboMUseIndHeal /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrSHiErr /* Identifier */ + xVcAesTrboM_B_TrboMonrHiTstValCmplt /* Identifier */ + xVcAesTrboM_B_TrboMonrHPLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrHPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrLPLoTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrHPLoTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrSLoErr /* Identifier */ + xVcAesTrboM_B_TrboMonrLoTstValCmplt /* Identifier */ + xVcAesTrboM_B_TrboMonrHPHiTstValCmplt /* Identifier */ + rVcAesTrboM_p_TrboMonrLPHiTstVal /* Identifier */ + xVcAesTrboM_B_TrboMonrHiErr /* Identifier */ + xVcAesTrboM_B_TrboMonrLoErr /* Identifier */ + xVcAesTrboM_B_TrboMonrLoOk /* Identifier */ + xVcAesTrboM_B_TrboMonrHiOk /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM106_1434_CoreHPLoBoost /* Identifier */ + SAesTrboM105_1433_CoreLPLoBoost /* Identifier */ + SAesTrboM104_1432_CoreHPHiBoost /* Identifier */ + SAesTrboM103_1431_CoreLPHiBoost /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM75_1411_Mode06 /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_TrboMonrMode6Enbl /* Identifier */ + cVcAesTrboM_p_TrboMonrHiErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM85_Dem_SetDTR /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM8_6_PpRelay /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_PpRlyStkFiMPerm /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM227_61_RelayStuckTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM83_Pr__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrSHiErr /* Identifier */ + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM88_WithFault /* Identifier */ + SAesTrboM87_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM85_Dem_SetDTR /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHiErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /end FUNCTION + + /begin FUNCTION + SAesTrboM87_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHiErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM88_WithFault /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrHiErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrHiErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM89_1421_Mode06 /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_TrboMonrMode6Enbl /* Identifier */ + cVcAesTrboM_p_TrboMonrLoErrLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesTrboM9_6_VNTAdp /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_TrboVntAdpnActDsbl /* Identifier */ + cVcAesTrboM_B_TrboVntDpFiMPerm /* Identifier */ + cVcAesTrboM_B_TrboVntEngIdleDsbl /* Identifier */ + cVcAesTrboM_D_TrboVntStsNOKHI /* Identifier */ + cVcAesTrboM_D_TrboVntStsNOKLO /* Identifier */ + cVcAesTrboM_D_TrboVntStsOK /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_ObdExe /* Identifier */ + xVcAesTrboM_B_TrboMonrVntExeFlk /* Identifier */ + xVcAesTrboM_B_TrboMonrVntAdpDone /* Identifier */ + xVcAesTrboM_B_TrboMonrVntExe /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM249_621_CoreVntDp /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesTrboM97_Pr__rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_p_TrboMonrLoErrLim /* Identifier */ + cVcAesTrboM_p_TrboMonrLoErrRnkMax /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesTrboM_B_TrboMonrSLoErr /* Identifier */ + rVcAesTrboM_p_TrboMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM102_WithFault /* Identifier */ + SAesTrboM101_FaultFree /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + VcAesTrboM /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesTrboM_B_IsObdExeSpm /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + yVcAesTrboM_B_EngProtnTrboPPeakErr /* Identifier */ + sVcAesTrboM_p_TrboMonrAmbPDif /* Identifier */ + xVcAesTrboM_B_ObdExe /* Identifier */ + /end LOC_MEASUREMENT + /begin OUT_MEASUREMENT + yVcAesTrboM_B_TrboMonrSHiErr /* Identifier */ + yVcAesTrboM_B_TrboMonrSLoErr /* Identifier */ + /end OUT_MEASUREMENT + /begin SUB_FUNCTION + SAesTrboM3_1_TrboMonr /* Identifier */ + SAesTrboM9_6_VNTAdp /* Identifier */ + SAesTrboM8_6_PpRelay /* Identifier */ + SAesTrboM7_5_PpSmallLeakage /* Identifier */ + SAesTrboM6_4_PpLeakage /* Identifier */ + SAesTrboM5_3_PPvalveStuckClosed /* Identifier */ + SAesTrboM4_2_EngProtnTrboPPeak /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin RECORD_LAYOUT + FLOAT32_IEEE_COL_DIRECT /* Name */ + FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + FLOAT32_IEEE_X_INCR_DIRECT /* Name */ + AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + SBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + SWORD_X_INCR_DIRECT /* Name */ + AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UWORD_COL_DIRECT /* Name */ + FNC_VALUES 1 UWORD COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UWORD_X_INCR_DIRECT /* Name */ + AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT + /end RECORD_LAYOUT + diff --git a/tests/pybuild/cnfg_files/test_consumer.a2l b/tests/pybuild/cnfg_files/test_consumer.a2l new file mode 100644 index 0000000..8fc6611 --- /dev/null +++ b/tests/pybuild/cnfg_files/test_consumer.a2l @@ -0,0 +1,23 @@ + /begin MEASUREMENT + sVcDtcAtr_D_TrgGear /* Name */ + "Target gear (incorrect)" /* LongIdentifier */ + SBYTE /* Datatype */ + EQ_LSB_1_OFF_m1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 8 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin COMPU_METHOD + EQ_LSB_1_OFF_m1 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%3.0" /* Format */ + "-" /* Unit */ + COEFFS 0 1 1 0 0 1 + /end COMPU_METHOD diff --git a/tests/pybuild/cnfg_files/test_mrg__kalle.a2l b/tests/pybuild/cnfg_files/test_mrg__kalle.a2l new file mode 100644 index 0000000..94d0d27 --- /dev/null +++ b/tests/pybuild/cnfg_files/test_mrg__kalle.a2l @@ -0,0 +1,2284 @@ + + +/*===========================================================================*/ +/* VcAesSupM */ +/*===========================================================================*/ + + /begin CHARACTERISTIC + cVcAesSupM_B_SupMonrHiBypFiMPerm /* Name */ + "Switch to bypass FiM permission, supercharger high boost monitor" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_B_SupMonrHiBypFiMPerm */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + VOID_SCALING /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_B_SupMonrHiCluOnSw /* Name */ + "Switch to bypass SC clutch on flag, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_B_SupMonrHiCluOnSw */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + VOID_SCALING /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_B_SupMonrLoBypFiMPerm /* Name */ + "Switch to bypass FiM permission" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_B_SupMonrLoBypFiMPerm */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + VOID_SCALING /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_B_SupMonrLoCluOnSw /* Name */ + "Switch to bypass SC clutch on flag, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_B_SupMonrLoCluOnSw */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + VOID_SCALING /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_dp_SupMonrHiSCTarNegDrv /* Name */ + "Supercharger pressure target negative derivative enable condition, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_dp_SupMonrHiSCTarNegDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + -1000 /* LowerLimit */ + 0 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_dp_SupMonrHiSCTarPosDrv /* Name */ + "Supercharger pressure target max positive derivative enable condition, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_dp_SupMonrHiSCTarPosDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_dp_SupMonrLoSCTarNegDrv /* Name */ + "Supercharger pressure target negative derivative enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_dp_SupMonrLoSCTarNegDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + -1000 /* LowerLimit */ + 0 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_dp_SupMonrLoSCTarPosDrv /* Name */ + "Supercharger pressure target max positive derivative enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_dp_SupMonrLoSCTarPosDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_d /* Conversion */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_m_SupMonrHiCylRevTotMax /* Name */ + "Max load enable condition, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_m_SupMonrHiCylRevTotMax */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_g /* Conversion */ + 0 /* LowerLimit */ + 5 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_m_SupMonrHiCylRevTotMin /* Name */ + "Min load enable condition, supercharger high boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_m_SupMonrHiCylRevTotMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_g /* Conversion */ + 0 /* LowerLimit */ + 5 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_m_SupMonrLoCylRevTotMax /* Name */ + "Max load enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_m_SupMonrLoCylRevTotMax */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_g /* Conversion */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_m_SupMonrLoCylRevTotMin /* Name */ + "Min load enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_m_SupMonrLoCylRevTotMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_g /* Conversion */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_n_SupMonrHiEngSpdMax /* Name */ + "Max engine speed enable condition, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_n_SupMonrHiEngSpdMax */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_n_SupMonrHiEngSpdMin /* Name */ + "Min engine speed enable condition, supercharger high boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_n_SupMonrHiEngSpdMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_n_SupMonrLoEngSpdMax /* Name */ + "Max engine speed enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_n_SupMonrLoEngSpdMax */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_n_SupMonrLoEngSpdMin /* Name */ + "Min engine speed enable condition, supercharger low boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_n_SupMonrLoEngSpdMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupChrgrPPeakHealLim /* Name */ + "Supercharger pressure peak healing delay" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupChrgrPPeakHealLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + 0 /* LowerLimit */ + 200 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupChrgrStuckErrLim /* Name */ + "Error limit for stuck supercharger engine protection (prot off under this limit)" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupChrgrStuckErrLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + 0 /* LowerLimit */ + 500 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupMonrHiAmbpMin /* Name */ + "Min ambient pressure enable condition, supercharger high boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupMonrHiAmbpMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + 0 /* LowerLimit */ + 110 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupMonrHiTarMin /* Name */ + "Min target boost pressure enable condition, supercharger high boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupMonrHiTarMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + -1000 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupMonrLoAmbpMin /* Name */ + "Min ambient pressure enable condition, supercharger low boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupMonrLoAmbpMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupMonrLoTarMax /* Name */ + "Min target boost pressure enable condition, supercharger low boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupMonrLoTarMax */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + 0 /* LowerLimit */ + 200 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_p_SupMonrLoTarMin /* Name */ + "Min target boost pressure enable condition, supercharger low boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_p_SupMonrLoTarMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + -1000 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupChrgrPPeakErrDly /* Name */ + "Supercharger peak pressure engine protection activation delay" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupChrgrPPeakErrDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupChrgrPPeakHealDly /* Name */ + "Supercharger peak pressure engine protection deactivation delay" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupChrgrPPeakHealDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 3.402823466e38 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupChrgrStuckErrDly /* Name */ + "Supercharger Stuck engine protection activation delay" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupChrgrStuckErrDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupChrgrStuckHealDly /* Name */ + "Supercharger stuck engine protection deactivation delay (allow retest after this delay time)" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupChrgrStuckHealDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 3.402823466e38 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupChrgrStuckRefResetDly /* Name */ + "Supercharger Stuck monitor maximum activation time" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupChrgrStuckRefResetDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 3.402823466e38 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupMonrHiAvgTi /* Name */ + "Supercharger high boost test value average calculation time" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupMonrHiAvgTi */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_t_SupMonrLoAvgTi /* Name */ + "Supercharger low boost test value average calculation time" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_t_SupMonrLoAvgTi */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_tc_SupMonrHiSCTar /* Name */ + "Supercharger boost pressure monitor, target pressure deriviative time constant" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_tc_SupMonrHiSCTar */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_tc_SupMonrHiTiConCmprThr /* Name */ + "Supercharger bypass throttle position derivative time constant, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_tc_SupMonrHiTiConCmprThr */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_tc_SupMonrLoSCTar /* Name */ + "Supercharger boost pressure monitor, target pressure deriviative time constant, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_tc_SupMonrLoSCTar */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_tc_SupMonrLoTiConCmprThr /* Name */ + "Supercharger bypass throttle position derivative time constant, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_tc_SupMonrLoTiConCmprThr */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_Te_SupMonrHiTempMin /* Name */ + "Min temperature upstream SC enable condition, supercharger high boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_Te_SupMonrHiTempMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + -40 /* LowerLimit */ + 500 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_Te_SupMonrLoTempMin /* Name */ + "Min temperature upstream SC enable condition, supercharger low boost " /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_Te_SupMonrLoTempMin */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupChrgrStuckThrPosMaxLim /* Name */ + "Error limit for stuck supercharger engine protection (prot off under this limit)" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupChrgrStuckThrPosMaxLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_k /* Conversion */ + 0 /* LowerLimit */ + 500 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupChrgrStuckThrPosRefLim /* Name */ + "Bypass throttle max limit to freeze pressure reference value" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupChrgrStuckThrPosRefLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_k /* Conversion */ + 0 /* LowerLimit */ + 500 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrHiCmprThrMaxLim /* Name */ + "Supercharger throttle enable coindition, SC high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrHiCmprThrMaxLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_k /* Conversion */ + 0 /* LowerLimit */ + 110 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrHiThrNegDrv /* Name */ + "Supercharger throttle max negative derivative enable condition, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrHiThrNegDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_l /* Conversion */ + -1000 /* LowerLimit */ + 0 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrHiThrPosDrv /* Name */ + "Supercharger throttle max positive derivative enable condition, supercharger high boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrHiThrPosDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_l /* Conversion */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrLoThrMaxLim /* Name */ + "Supercharger throttle enable coindition, SC low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrLoThrMaxLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_k /* Conversion */ + 0 /* LowerLimit */ + 300 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrLoThrMinLim /* Name */ + "Supercharger throttle enable coindition, SC low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrLoThrMinLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_k /* Conversion */ + -10 /* LowerLimit */ + 100 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrLoThrNegDrv /* Name */ + "Supercharger throttle max negative derivative enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrLoThrNegDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_l /* Conversion */ + -1000 /* LowerLimit */ + 0 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAesSupM_X_SupMonrLoThrPosDrv /* Name */ + "Supercharger throttle max positive derivative enable condition, supercharger low boost" /* LongIdentifier */ + VALUE /* Type */ + 0x00000000 /* address: cVcAesSupM_X_SupMonrLoThrPosDrv */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_l /* Conversion */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + mVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Name */ + "Supercharger stuck load limit" /* LongIdentifier */ + MAP /* Type */ + 0x00000000 /* address: mVcAesSupM_m_SupChrgrStuckMaxLoadLim */ + UWORD_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_0_000244140625 /* Conversion */ + 0 /* LowerLimit */ + 5 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_0_00390625 /* Conversion */ + 3 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 200 /* UpperLimit */ + AXIS_PTS_REF mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_0_25 /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + AXIS_PTS_REF mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp /* Name */ + "temperature factor for load limit compensation" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp */ + UWORD_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_6_103515625em05 /* Conversion */ + 0 /* LowerLimit */ + 3.99 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_0_03125 /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_p_SupChrgrPPeakLim /* Name */ + "Supercharger peak boost pressure protection activation limit" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_p_SupChrgrPPeakLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + -3.4028234663852886e38 /* LowerLimit */ + 3.4028234663852886e38 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_1_a /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_p_SupChrgrPPeakLim_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_p_SupMonrHiErrLim /* Name */ + "Supercharger high boost pressure monitor error limit" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_p_SupMonrHiErrLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + -50 /* LowerLimit */ + 200 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_1_b /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_p_SupMonrHiErrLim_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_p_SupMonrLoErrLim /* Name */ + "Supercharger low boost pressure monitor error limit" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_p_SupMonrLoErrLim */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1 /* Conversion */ + -200 /* LowerLimit */ + 50 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_1_b /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_p_SupMonrLoErrLim_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_t_SupMonrHiEnaDly /* Name */ + "Supercharger high boost pressure monitor, enable condition delay time" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_t_SupMonrHiEnaDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_1_a /* Conversion */ + 5 /* MaxAxisPoints */ + -50 /* LowerLimit */ + 500 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_t_SupMonrHiEnaDly_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_t_SupMonrLoEnaDly /* Name */ + "Supercharger low boost pressure monitor, enable condition delay time" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_t_SupMonrLoEnaDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_1_a /* Conversion */ + 5 /* MaxAxisPoints */ + -50 /* LowerLimit */ + 500 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_t_SupMonrLoEnaDly_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin CHARACTERISTIC + tVcAesSupM_tc_SupMonrSCTarDly /* Name */ + "Supercharger boost pressure monitor, target pressure lowpass filter time constant, engine speed support points" /* LongIdentifier */ + CURVE /* Type */ + 0x00000000 /* address: tVcAesSupM_tc_SupMonrSCTarDly */ + FLOAT32_IEEE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_c /* Conversion */ + 0 /* LowerLimit */ + 100 /* UpperLimit */ + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + EQ_LSB_1_b /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_tc_SupMonrSCTarDly_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR + /end CHARACTERISTIC + + /begin AXIS_PTS + mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c /* Name */ + "Engine speed breakpoint data for supercharger stuck load limit " /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + UWORD_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_0_25 /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r /* Name */ + "Ambient Pressure breakpoint data for supercharger stuck load limit " /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + UWORD_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_0_00390625 /* Conversion */ + 3 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 200 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x /* Name */ + "Temperature correction for supercharger stuck load limit" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + UWORD_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_0_03125 /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_p_SupChrgrPPeakLim_x /* Name */ + "Supercharger downstream temperature breakpoint data" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + 4 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 1000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_p_SupMonrHiErrLim_x /* Name */ + "Supercharger high boost pressure monitor error limit engine speed support points" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_p_SupMonrLoErrLim_x /* Name */ + "Supercharger low boost pressure monitor error limit engine speed support points" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_t_SupMonrHiEnaDly_x /* Name */ + "Supercharger high boost pressure monitor, enable condition delay time support points" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + 5 /* MaxAxisPoints */ + -50 /* LowerLimit */ + 500 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_t_SupMonrLoEnaDly_x /* Name */ + "Supercharger low boost pressure monitor, enable condition delay time support points" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_a /* Conversion */ + 5 /* MaxAxisPoints */ + -50 /* LowerLimit */ + 500 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin AXIS_PTS + tVcAesSupM_tc_SupMonrSCTarDly_x /* Name */ + "Supercharger boost pressure monitor, target pressure lowpass filter time constant, engine speed support points" /* LongIdentifier */ + 0x00000000 + NO_INPUT_QUANTITY /* InputQuantity */ + FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */ + 0 /* MaxDiff */ + EQ_LSB_1_b /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + DEPOSIT ABSOLUTE + /end AXIS_PTS + + /begin MEASUREMENT + rVcAesSupM_fac_SupChrgrStuckMaxLoadCmp /* Name */ + "temperature factor for load limit compensation" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_h /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Name */ + "Supercharger stuck load limit" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_g /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -3.4028234663852886e38 /* LowerLimit */ + 3.4028234663852886e38 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_m_SupChrgrStuckMaxLoadLimBase /* Name */ + "Supercharger stuck load limit" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_g /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 5 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupChgrStuckPDiff /* Name */ + "Diff pressure before/after supercharger engagement" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -300 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupChrgrPDsAtmDiff /* Name */ + "Over pressure downstream supercharger" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -3.4028234663852886e38 /* LowerLimit */ + 3.4028234663852886e38 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupChrgrStuckPDiffMax /* Name */ + "Maximum supercharger diff pressure during stuck test" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -500 /* LowerLimit */ + 500 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupMonrHiTstVal /* Name */ + "Supercharger high boost pressure test value " /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -300 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupMonrLoTstVal /* Name */ + "Supercharger low boost pressure test value " /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -300 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupMonrPDif /* Name */ + "Supercharger actual- and target pressure difference" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -300 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupMonrSCTar /* Name */ + "Supercharger target boost pressure, compensated for ambient pressure" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -300 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_p_SupMonrSCTarDly /* Name */ + "Low pass filtered supercharger target pressure" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_Z_SupMonrHiBoostRnkVal /* Name */ + "Supercharger high boost ranking value" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + VOID_SCALING_f /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 255 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_Z_SupMonrHiSCTarDrv /* Name */ + "Trajectory differential" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_d /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_Z_SupMonrHiSCThrDrv /* Name */ + "Trajectory differential" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_d /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_Z_SupMonrLoBoostRnkVal /* Name */ + "Supercharger low boost ranking value" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + VOID_SCALING_f /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 255 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_Z_SupMonrLoSCTarDrv /* Name */ + "Trajectory differential" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_d /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + rVcAesSupM_Z_SupMonrLoSCThrDrv /* Name */ + "Trajectory differential" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + EQ_LSB_1_d /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -100000 /* LowerLimit */ + 100000 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupChrgrPPeakErr /* Name */ + "Engine protection from high supercharger pressure activation flag" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupChrgrStuckEnable /* Name */ + "SC CLutch and bypass throttle Enable conditions enabled" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupChrgrStuckErr /* Name */ + "Engine protection from high supercharger pressure activation flag" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupChrgrStuckExe /* Name */ + "Supercharger stuck monitor executes" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupChrgrStuckUnfiltErr /* Name */ + "Supercharger stuck error, unfiltered" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiAmbpEna /* Name */ + "Ambient pressure enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiCluOnEna /* Name */ + "Supercharger clutch enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiCmprThrEna /* Name */ + "Supercharger bypass throttle enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiCylRevEna /* Name */ + "Engine load enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiEna /* Name */ + "" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiEngSpdEna /* Name */ + "Engine speed enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiErr /* Name */ + "Supercharger boost pressure to high error" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiExe /* Name */ + "High boost pressure monitor entry condition" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiOk /* Name */ + "Supercharger monitor high boost OK" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiSCTarDrvEna /* Name */ + "Supercharger target pressure derivative enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiSCTempEna /* Name */ + "Supercharger inlet temperature enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiStabEna /* Name */ + "Delayed trajectory pressure stable entry condition" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiTarEna /* Name */ + "Supercharger target pressure enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiThrDrvEna /* Name */ + "Supercharger bypass throttle derivative enable condition, supercharger high boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrHiTstValCmplt /* Name */ + "Supercharger high boost pressure monitor test value (average calculation) complete" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoAmbpEna /* Name */ + "Ambient pressure enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoCluOnEna /* Name */ + "Supercharger clutch enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoCmprThrEna /* Name */ + "Supercharger target pressure derivative enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoCmprThrMaxEna /* Name */ + "Supercharger bypass throttle enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoCmprThrMinEna /* Name */ + "Supercharger bypass throttle enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoCylRevEna /* Name */ + "Engine load enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoEna /* Name */ + "" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoEngSpdEna /* Name */ + "Engine speed enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoErr /* Name */ + "Supercharger boost pressure too low error" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoExe /* Name */ + "Low boost pressure monitor entry condition" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoOk /* Name */ + "Supercharger monitor low boost OK" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoSCTarDrvEna /* Name */ + "Supercharger target pressure derivative enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoSCTempEna /* Name */ + "Supercharger inlet temperature enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoStabEna /* Name */ + "Delayed trajectory pressure stable entry condition" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoTarEna /* Name */ + "Supercharger target pressure derivative enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoTarMaxEna /* Name */ + "Supercharger target pressure enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoTarMinEna /* Name */ + "Supercharger target pressure enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_e /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoThrDrvEna /* Name */ + "Supercharger bypass throttle derivative enable condition, supercharger low boost" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + xVcAesSupM_B_SupMonrLoTstValCmplt /* Name */ + "Supercharger low boost pressure monitor test value (average calculation) complete" /* LongIdentifier */ + UBYTE /* Datatype */ + VOID_SCALING /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin MEASUREMENT + yVcAesSupM_B_SupChrgrErr /* Name */ + "Supercharger Peak Pressure engine protection activation flag" /* LongIdentifier */ + UBYTE /* Datatype */ + EQ_LSB_1_j /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + BIT_MASK 0x1 + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin COMPU_METHOD + EQ_LSB_0_000244140625 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%15.12" /* Format */ + "g/rev" /* Unit */ + COEFFS 0 1 0 0 0 0.000244140625 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_0_00390625 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.8" /* Format */ + "kPa" /* Unit */ + COEFFS 0 1 0 0 0 0.00390625 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_0_03125 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%10.5" /* Format */ + "K" /* Unit */ + COEFFS 0 1 0 0 0 0.03125 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_0_25 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%8.2" /* Format */ + "rpm" /* Unit */ + COEFFS 0 1 0 0 0 0.25 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "kPa" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_a /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "K" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_b /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "rpm" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_c /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_d /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "kPa/s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_e /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_g /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "g/rev" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_h /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_j /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "%" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_k /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "%" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_1_l /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "%/s" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + EQ_LSB_6_103515625em05 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%16.14" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 6.103515625e-05 + /end COMPU_METHOD + + /begin COMPU_METHOD + VOID_SCALING /* Name */ + "Void scaling for unscaled variables" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%1.0" /* Format */ + "" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + VOID_SCALING_f /* Name */ + "Void scaling for unscaled variables" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%12.6" /* Format */ + "" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + SAesSupM__g29_Avg1 /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesSupM_t_SupMonrHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrPDif /* Identifier */ + xVcAesSupM_B_SupMonrHiExe /* Identifier */ + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + xVcAesSupM_B_SupMonrHiTstValCmplt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g32_Subsystem /* Identifier */ + SAesSupM__g31_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g30_Avg2 /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesSupM_t_SupMonrLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrPDif /* Identifier */ + xVcAesSupM_B_SupMonrLoExe /* Identifier */ + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + xVcAesSupM_B_SupMonrLoTstValCmplt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g34_Subsystem /* Identifier */ + SAesSupM__g33_EnabledSubsystem /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g31_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g32_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesSupM_t_SupMonrHiAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrPDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g33_EnabledSubsystem /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g34_Subsystem /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesSupM_t_SupMonrLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrPDif /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g35_141_CoreHiBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + tVcAesSupM_p_SupMonrHiErrLim /* Identifier */ + tVcAesSupM_p_SupMonrHiErrLim_x /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + rVcAesSupM_Z_SupMonrHiBoostRnkVal /* Identifier */ + xVcAesSupM_B_SupMonrHiOk /* Identifier */ + xVcAesSupM_B_SupMonrHiErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g41___rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g36_142_CoreLoBoost /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + tVcAesSupM_p_SupMonrLoErrLim /* Identifier */ + tVcAesSupM_p_SupMonrLoErrLim_x /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + rVcAesSupM_Z_SupMonrLoBoostRnkVal /* Identifier */ + xVcAesSupM_B_SupMonrLoOk /* Identifier */ + xVcAesSupM_B_SupMonrLoErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g50___rtional_Ranking /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g41___rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + xVcAesSupM_B_SupMonrHiErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g44_FaultFree /* Identifier */ + SAesSupM__g45_WithFault /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g44_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g45_WithFault /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g5_11_SupChrgrSys /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + tVcAesSupM_t_SupMonrLoEnaDly /* Identifier */ + tVcAesSupM_t_SupMonrLoEnaDly_x /* Identifier */ + tVcAesSupM_t_SupMonrHiEnaDly /* Identifier */ + tVcAesSupM_t_SupMonrHiEnaDly_x /* Identifier */ + tVcAesSupM_tc_SupMonrSCTarDly /* Identifier */ + tVcAesSupM_tc_SupMonrSCTarDly_x /* Identifier */ + cVcAesSupM_B_SupMonrHiBypFiMPerm /* Identifier */ + cVcAesSupM_B_SupMonrHiCluOnSw /* Identifier */ + cVcAesSupM_B_SupMonrLoBypFiMPerm /* Identifier */ + cVcAesSupM_B_SupMonrLoCluOnSw /* Identifier */ + cVcAesSupM_Te_SupMonrHiTempMin /* Identifier */ + cVcAesSupM_Te_SupMonrLoTempMin /* Identifier */ + cVcAesSupM_X_SupMonrHiCmprThrMaxLim /* Identifier */ + cVcAesSupM_X_SupMonrHiThrNegDrv /* Identifier */ + cVcAesSupM_X_SupMonrHiThrPosDrv /* Identifier */ + cVcAesSupM_X_SupMonrLoThrMaxLim /* Identifier */ + cVcAesSupM_X_SupMonrLoThrMinLim /* Identifier */ + cVcAesSupM_X_SupMonrLoThrNegDrv /* Identifier */ + cVcAesSupM_X_SupMonrLoThrPosDrv /* Identifier */ + cVcAesSupM_dp_SupMonrHiSCTarNegDrv /* Identifier */ + cVcAesSupM_dp_SupMonrHiSCTarPosDrv /* Identifier */ + cVcAesSupM_dp_SupMonrLoSCTarNegDrv /* Identifier */ + cVcAesSupM_dp_SupMonrLoSCTarPosDrv /* Identifier */ + cVcAesSupM_m_SupMonrHiCylRevTotMax /* Identifier */ + cVcAesSupM_m_SupMonrHiCylRevTotMin /* Identifier */ + cVcAesSupM_m_SupMonrLoCylRevTotMax /* Identifier */ + cVcAesSupM_m_SupMonrLoCylRevTotMin /* Identifier */ + cVcAesSupM_n_SupMonrHiEngSpdMax /* Identifier */ + cVcAesSupM_n_SupMonrHiEngSpdMin /* Identifier */ + cVcAesSupM_n_SupMonrLoEngSpdMax /* Identifier */ + cVcAesSupM_n_SupMonrLoEngSpdMin /* Identifier */ + cVcAesSupM_p_SupMonrHiAmbpMin /* Identifier */ + cVcAesSupM_p_SupMonrHiTarMin /* Identifier */ + cVcAesSupM_p_SupMonrLoAmbpMin /* Identifier */ + cVcAesSupM_p_SupMonrLoTarMax /* Identifier */ + cVcAesSupM_p_SupMonrLoTarMin /* Identifier */ + cVcAesSupM_tc_SupMonrHiSCTar /* Identifier */ + cVcAesSupM_tc_SupMonrHiTiConCmprThr /* Identifier */ + cVcAesSupM_tc_SupMonrLoSCTar /* Identifier */ + cVcAesSupM_tc_SupMonrLoTiConCmprThr /* Identifier */ + cVcAesSupM_t_SupMonrHiAvgTi /* Identifier */ + cVcAesSupM_t_SupMonrLoAvgTi /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrSCTarDly /* Identifier */ + rVcAesSupM_p_SupMonrPDif /* Identifier */ + rVcAesSupM_Z_SupMonrHiSCThrDrv /* Identifier */ + rVcAesSupM_Z_SupMonrLoSCThrDrv /* Identifier */ + rVcAesSupM_Z_SupMonrHiSCTarDrv /* Identifier */ + rVcAesSupM_Z_SupMonrLoSCTarDrv /* Identifier */ + xVcAesSupM_B_SupMonrLoEna /* Identifier */ + xVcAesSupM_B_SupMonrHiCluOnEna /* Identifier */ + xVcAesSupM_B_SupMonrLoExe /* Identifier */ + xVcAesSupM_B_SupMonrLoCluOnEna /* Identifier */ + xVcAesSupM_B_SupMonrLoThrDrvEna /* Identifier */ + xVcAesSupM_B_SupMonrHiThrDrvEna /* Identifier */ + xVcAesSupM_B_SupMonrHiSCTarDrvEna /* Identifier */ + xVcAesSupM_B_SupMonrLoSCTarDrvEna /* Identifier */ + xVcAesSupM_B_SupMonrLoTarEna /* Identifier */ + xVcAesSupM_B_SupMonrLoCmprThrEna /* Identifier */ + xVcAesSupM_B_SupMonrHiCylRevEna /* Identifier */ + xVcAesSupM_B_SupMonrHiExe /* Identifier */ + xVcAesSupM_B_SupMonrLoCylRevEna /* Identifier */ + xVcAesSupM_B_SupMonrHiEngSpdEna /* Identifier */ + xVcAesSupM_B_SupMonrHiEna /* Identifier */ + xVcAesSupM_B_SupMonrLoEngSpdEna /* Identifier */ + xVcAesSupM_B_SupMonrHiAmbpEna /* Identifier */ + xVcAesSupM_B_SupMonrHiTarEna /* Identifier */ + xVcAesSupM_B_SupMonrLoAmbpEna /* Identifier */ + xVcAesSupM_B_SupMonrLoTarMaxEna /* Identifier */ + xVcAesSupM_B_SupMonrHiSCTempEna /* Identifier */ + xVcAesSupM_B_SupMonrLoSCTempEna /* Identifier */ + xVcAesSupM_B_SupMonrLoTarMinEna /* Identifier */ + xVcAesSupM_B_SupMonrLoCmprThrMinEna /* Identifier */ + xVcAesSupM_B_SupMonrLoCmprThrMaxEna /* Identifier */ + xVcAesSupM_B_SupMonrHiCmprThrEna /* Identifier */ + xVcAesSupM_B_SupMonrHiStabEna /* Identifier */ + xVcAesSupM_B_SupMonrLoStabEna /* Identifier */ + rVcAesSupM_p_SupMonrSCTar /* Identifier */ + rVcAesSupM_p_SupMonrHiTstVal /* Identifier */ + xVcAesSupM_B_SupMonrHiTstValCmplt /* Identifier */ + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + xVcAesSupM_B_SupMonrLoTstValCmplt /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g36_142_CoreLoBoost /* Identifier */ + SAesSupM__g35_141_CoreHiBoost /* Identifier */ + SAesSupM__g29_Avg1 /* Identifier */ + SAesSupM__g30_Avg2 /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g50___rtional_Ranking /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + xVcAesSupM_B_SupMonrLoErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g53_FaultFree /* Identifier */ + SAesSupM__g54_WithFault /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g53_FaultFree /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g54_WithFault /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrLoTstVal /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g55_21_SupChrgrPPeak /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + xVcAesSupM_B_SupChrgrPPeakErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g59_211_PPeakTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g56_22_SupChrgrStuck /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + xVcAesSupM_B_SupChrgrStuckErr /* Identifier */ + /end LOC_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g70_221_StuckTest /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin FUNCTION + SAesSupM__g59_211_PPeakTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + tVcAesSupM_p_SupChrgrPPeakLim /* Identifier */ + tVcAesSupM_p_SupChrgrPPeakLim_x /* Identifier */ + cVcAesSupM_p_SupChrgrPPeakHealLim /* Identifier */ + cVcAesSupM_t_SupChrgrPPeakErrDly /* Identifier */ + cVcAesSupM_t_SupChrgrPPeakHealDly /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesSupM_B_SupChrgrPPeakErr /* Identifier */ + rVcAesSupM_p_SupChrgrPDsAtmDiff /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + SAesSupM__g70_221_StuckTest /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + mVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Identifier */ + mVcAesSupM_m_SupChrgrStuckMaxLoadLim_r /* Identifier */ + mVcAesSupM_m_SupChrgrStuckMaxLoadLim_c /* Identifier */ + tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp /* Identifier */ + tVcAesSupM_fac_SupChrgrStuckMaxLoadCmp_x /* Identifier */ + cVcAesSupM_X_SupChrgrStuckThrPosRefLim /* Identifier */ + cVcAesSupM_t_SupChrgrStuckRefResetDly /* Identifier */ + cVcAesSupM_X_SupChrgrStuckThrPosMaxLim /* Identifier */ + cVcAesSupM_p_SupChrgrStuckErrLim /* Identifier */ + cVcAesSupM_t_SupChrgrStuckErrDly /* Identifier */ + cVcAesSupM_t_SupChrgrStuckHealDly /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + xVcAesSupM_B_SupChrgrStuckEnable /* Identifier */ + rVcAesSupM_p_SupChgrStuckPDiff /* Identifier */ + xVcAesSupM_B_SupChrgrStuckExe /* Identifier */ + xVcAesSupM_B_SupChrgrStuckUnfiltErr /* Identifier */ + rVcAesSupM_p_SupChrgrStuckPDiffMax /* Identifier */ + rVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Identifier */ + xVcAesSupM_B_SupChrgrStuckErr /* Identifier */ + rVcAesSupM_fac_SupChrgrStuckMaxLoadCmp /* Identifier */ + rVcAesSupM_m_SupChrgrStuckMaxLoadLimBase /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin FUNCTION + test_mrg /* Name */ + "" /* LongIdentifier */ + /begin OUT_MEASUREMENT + yVcAesSupM_B_SupChrgrErr /* Identifier */ + /end OUT_MEASUREMENT + /begin SUB_FUNCTION + SAesSupM__g56_22_SupChrgrStuck /* Identifier */ + SAesSupM__g55_21_SupChrgrPPeak /* Identifier */ + SAesSupM__g5_11_SupChrgrSys /* Identifier */ + /end SUB_FUNCTION + /end FUNCTION + + /begin RECORD_LAYOUT + FLOAT32_IEEE_COL_DIRECT /* Name */ + FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + FLOAT32_IEEE_X_INCR_DIRECT /* Name */ + AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UWORD_COL_DIRECT /* Name */ + FNC_VALUES 1 UWORD COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UWORD_X_INCR_DIRECT /* Name */ + AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT + /end RECORD_LAYOUT + diff --git a/tests/pybuild/cnfg_files/test_producer.a2l b/tests/pybuild/cnfg_files/test_producer.a2l new file mode 100644 index 0000000..bdc2a04 --- /dev/null +++ b/tests/pybuild/cnfg_files/test_producer.a2l @@ -0,0 +1,23 @@ + /begin MEASUREMENT + sVcDtcAtr_D_TrgGear /* Name */ + "Target gear" /* LongIdentifier */ + SBYTE /* Datatype */ + EQ_LSB_1 /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -1 /* LowerLimit */ + 8 /* UpperLimit */ + READ_WRITE + /begin IF_DATA ASAP1B_ADDRESS + KP_BLOB 0x00000000 + /end IF_DATA + /end MEASUREMENT + + /begin COMPU_METHOD + EQ_LSB_1 /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%3.0" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0 0 0 1 + /end COMPU_METHOD diff --git a/tests/pybuild/cnfg_files/tl_aux_defines_VmcPmm__HE.h b/tests/pybuild/cnfg_files/tl_aux_defines_VmcPmm__HE.h new file mode 100644 index 0000000..f8a0939 --- /dev/null +++ b/tests/pybuild/cnfg_files/tl_aux_defines_VmcPmm__HE.h @@ -0,0 +1,709 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcVmcPmm__HEP7_OPortMvd + *** TargetLink subsystem : VcVmcPmm__HEP7_OPortMvd/VcVmcPmm + *** Codefile : tl_aux_defines_VmcPmm__HE.h + *** + *** Generation date: 2019-04-30 07:53:02 + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef TL_AUX_DEFINES_VMCPMM__HE_H +#define TL_AUX_DEFINES_VMCPMM__HE_H + + +#include "VcVmcPmm__HEP7_OPortMvd_LocalDefs.h" + + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF */ +#if Vc_Pvc_Hw_B_Efad + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE1_VcVmcPmm_AUX +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* Vc_Pvc_Hw_B_Efad */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +#define SVmcPmm__HE171__lOperator35_AUX +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 +#define SVmcPmm__HE171__lOperator35_A_a +#endif + +/* VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE171__lOperator35_A_a +#define SVmcPmm__HE171__lOperator35_AUX +#endif + +/* SVmcPmm__HE171__lOperator35_A_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE173_Merge_AUX_a +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE173_Merge_AUX_a +#define SVmcPmm__HE173_Merge_AUX +#endif + +/* SVmcPmm__HE173_Merge_AUX_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF */ +#if Vc_Pvc_Hw_B_Efad +#define SVmcPmm__HE173_Merge_AUX_b +#endif + +/* Vc_Pvc_Hw_B_Efad */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE173_Merge_AUX_b +#define SVmcPmm__HE173_Merge_AUX +#endif + +/* SVmcPmm__HE173_Merge_AUX_b */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE173_Merge_AUX_c +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE173_Merge_AUX_c +#define SVmcPmm__HE173_Merge_AUX +#endif + +/* SVmcPmm__HE173_Merge_AUX_c */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE173_Merge_AUX +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE173_Merge1_AUX +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF */ +#if Vc_Pvc_Hw_B_Efad + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE173_Merge1_AUX_a +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* Vc_Pvc_Hw_B_Efad */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE173_Merge1_AUX_a +#define SVmcPmm__HE173_Merge1_AUX +#endif + +/* SVmcPmm__HE173_Merge1_AUX_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 +#define SVmcPmm__HE173_Merge1_AUX_b +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#ifdef SVmcPmm__HE173_Merge1_AUX_b +#define SVmcPmm__HE173_Merge1_AUX +#endif + +/* SVmcPmm__HE173_Merge1_AUX_b */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1224_EngageReqHybrid_7 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +#define SVmcPmm__HE477_MinMax_AUX +#endif + +/* Vc_Pvc_Hw_B_AT */ +#endif + +/* VcVmcPmm__HEP7_1224_EngageReqHybrid_7 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +#define SVmcPmm__HE477__lOperator18_AUX +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1224_EngageReqHybrid_7 +#define SVmcPmm__HE477__lOperator18_A_a +#endif + +/* VcVmcPmm__HEP7_1224_EngageReqHybrid_7 */ +#endif + +/* Vc_Pvc_Hw_B_AT */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF1 */ +#ifdef SVmcPmm__HE477__lOperator18_A_a +#define SVmcPmm__HE477__lOperator18_AUX +#endif + +/* SVmcPmm__HE477__lOperator18_A_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_AT +#define SVmcPmm__HE512_Switch_AUX +#endif + +/* Vc_Pvc_Hw_B_AT */ +#endif + +/* VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF3 */ +#if Vc_Pvc_Hw_B_Erad +#define SVmcPmm__HE614__lOperator11_AUX +#endif + +/* Vc_Pvc_Hw_B_Erad */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 */ +#if Vc_Pvc_Hw_B_12VStartMotor + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE784_Merge_AUX_a +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* Vc_Pvc_Hw_B_12VStartMotor */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784_Merge_AUX_a +#define SVmcPmm__HE784_Merge_AUX +#endif + +/* SVmcPmm__HE784_Merge_AUX_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF */ +#if Vc_Pvc_Hw_B_12VStartMotor == 0 +#define SVmcPmm__HE784_Merge_AUX_b +#endif +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF */ +#ifdef SVmcPmm__HE784_Merge_AUX_b +#define SVmcPmm__HE784_Merge_AUX +#endif + +/* SVmcPmm__HE784_Merge_AUX_b */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 */ +#if Vc_Pvc_Hw_B_12VStartMotor + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE784_Merge_AUX_c +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* Vc_Pvc_Hw_B_12VStartMotor */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784_Merge_AUX_c +#define SVmcPmm__HE784_Merge_AUX +#endif + +/* SVmcPmm__HE784_Merge_AUX_c */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE784_Merge_AUX_d +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784_Merge_AUX_d +#define SVmcPmm__HE784_Merge_AUX +#endif + +/* SVmcPmm__HE784_Merge_AUX_d */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF */ +#if Vc_Pvc_Hw_B_12VStartMotor == 0 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE784_Merge5_AUX_a +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784_Merge5_AUX_a +#define SVmcPmm__HE784_Merge5_AUX +#endif + +/* SVmcPmm__HE784_Merge5_AUX_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 */ +#if Vc_Pvc_Hw_B_12VStartMotor + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE784_Merge5_AUX_b +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* Vc_Pvc_Hw_B_12VStartMotor */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784_Merge5_AUX_b +#define SVmcPmm__HE784_Merge5_AUX +#endif + +/* SVmcPmm__HE784_Merge5_AUX_b */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE784_Merge5_AUX_c +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE784_Merge5_AUX_c +#define SVmcPmm__HE784_Merge5_AUX +#endif + +/* SVmcPmm__HE784_Merge5_AUX_c */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 +#define SVmcPmm__HE784__lOperator19_AUX +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 */ +#if Vc_Pvc_Hw_B_12VStartMotor +#define SVmcPmm__HE808__calOperator_AUX +#endif + +/* Vc_Pvc_Hw_B_12VStartMotor */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF */ +#if Vc_Pvc_Hw_B_12VStartMotor == 0 +#define SVmcPmm__HE818_Switch_AUX +#endif +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF2 */ +#if Vc_Pvc_Hw_B_TqConverterGbx + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE821__ransHeatReq_AUX +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* Vc_Pvc_Hw_B_TqConverterGbx */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF */ +#if Vc_Pvc_Hw_B_Efad + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE637__hEnable_dbi_A_a +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* Vc_Pvc_Hw_B_Efad */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE637__hEnable_dbi_A_a +#define SVmcPmm__HE637__hEnable_dbi_AUX +#endif + +/* SVmcPmm__HE637__hEnable_dbi_A_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE637__hEnable_dbi_A_b +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE637__hEnable_dbi_A_b +#define SVmcPmm__HE637__hEnable_dbi_AUX +#endif + +/* SVmcPmm__HE637__hEnable_dbi_A_b */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_121M_StartModeHybrid_3 +#define SVmcPmm__HE389__ReqUseTrans_AUX +#endif + +/* VcVmcPmm__HEP7_121M_StartModeHybrid_3 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 +#define SVmcPmm__HE389__ReqUseTrans_AUX +#endif + +/* VcVmcPmm__HEP7_121N_StartModeHybrid12V_4 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 */ +#if Vc_Pvc_Hw_B_12VStartMotor + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE785__sgStrtAllow_A_a +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ +#endif + +/* Vc_Pvc_Hw_B_12VStartMotor */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Preprocessor + IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE785__sgStrtAllow_A_a +#define SVmcPmm__HE785__sgStrtAllow_AUX +#endif + +/* SVmcPmm__HE785__sgStrtAllow_A_a */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1243_Isg_8 + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#if VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 +#define SVmcPmm__HE785__sgStrtAllow_A_b +#endif + +/* VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 */ +#endif + +/* VcVmcPmm__HEP7_1243_Isg_8 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/Preprocessor IF1 + VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/Preprocessor IF */ +#ifdef SVmcPmm__HE785__sgStrtAllow_A_b +#define SVmcPmm__HE785__sgStrtAllow_AUX +#endif + +/* SVmcPmm__HE785__sgStrtAllow_A_b */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF1 */ +#if VcVmcPmm__HEP7_1150_Gradient_estimation_2 +#define SVmcPmm__HE148_Switch_AUX +#endif + +/* VcVmcPmm__HEP7_1150_Gradient_estimation_2 */ + +/* results from + VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/Preprocessor IF */ +#if VcVmcPmm__HEP7_1140_Brake_1 +#define SVmcPmm__HE148_Switch_AUX +#endif + +/* VcVmcPmm__HEP7_1140_Brake_1 */ +#endif /* TL_AUX_DEFINES_VMCPMM__HE_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/cnfg_files/unit_cfgs/Invalid_If_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs/Invalid_If_LocalDefs.h new file mode 100644 index 0000000..9b98003 --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/Invalid_If_LocalDefs.h @@ -0,0 +1,5 @@ +#include "VcCodeSwDefines.h" + +#if (Vc_Pvc_Hw_B_Invalid||Vc_Pvc_Hw_B_EClutch) + #define Launch_2 +#endif diff --git a/tests/pybuild/cnfg_files/unit_cfgs/Invalid_Include_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs/Invalid_Include_LocalDefs.h new file mode 100644 index 0000000..3c34892 --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/Invalid_Include_LocalDefs.h @@ -0,0 +1,5 @@ +#include "somefile.h" + +#if (Vc_Pvc_Hw_B_DualClutchGbx||Vc_Pvc_Hw_B_EClutch) + #define Launch_3 +#endif diff --git a/tests/pybuild/cnfg_files/unit_cfgs/Valid_Local_Reference_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs/Valid_Local_Reference_LocalDefs.h new file mode 100644 index 0000000..f67ac3f --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/Valid_Local_Reference_LocalDefs.h @@ -0,0 +1,5 @@ +#include "VcCodeSwDefines.h" + +#if (Launch_1&&Vc_Pvc_Hw_B_EClutch) + #define Launch_4 +#endif diff --git a/tests/pybuild/cnfg_files/unit_cfgs/Valid_Reference_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs/Valid_Reference_LocalDefs.h new file mode 100644 index 0000000..f67ac3f --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/Valid_Reference_LocalDefs.h @@ -0,0 +1,5 @@ +#include "VcCodeSwDefines.h" + +#if (Launch_1&&Vc_Pvc_Hw_B_EClutch) + #define Launch_4 +#endif diff --git a/tests/pybuild/cnfg_files/unit_cfgs/VcAesSupM__gen3_OPortMvd_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs/VcAesSupM__gen3_OPortMvd_LocalDefs.h new file mode 100644 index 0000000..581114a --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/VcAesSupM__gen3_OPortMvd_LocalDefs.h @@ -0,0 +1,5 @@ +#include "VcCodeSwDefines.h" + +#if (Vc_Pvc_Hw_B_DualClutchGbx||Vc_Pvc_Hw_B_EClutch) + #define Launch_1 +#endif diff --git a/tests/pybuild/cnfg_files/unit_cfgs/VcDeDa_OPortMvd_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs/VcDeDa_OPortMvd_LocalDefs.h new file mode 100644 index 0000000..90bf04d --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/VcDeDa_OPortMvd_LocalDefs.h @@ -0,0 +1,13 @@ +#include "VcCodeSwDefines.h" + +#if (((Vc_Pvc_Hw_B_Erad==0)&&(Vc_Pvc_Hw_B_Efad==0)&&((Vc_Pvc_Hw_B_VeaGen1==1)||(Vc_Pvc_Hw_B_VeaGen2==1)||(Vc_Pvc_Hw_B_VeaGen3==1)||(Vc_Pvc_Hw_B_Gep3Gen1==1)))) + #define VcDeDa_111_EcoIndcn_1 +#endif + +#if (((Vc_Pvc_Hw_B_Bev==1)||((Vc_Pvc_Hw_B_Erad==0)&&(Vc_Pvc_Hw_B_Efad==0)&&(Vc_Pvc_Hw_B_VeaGen1==0)&&(Vc_Pvc_Hw_B_VeaGen2==0)&&(Vc_Pvc_Hw_B_Gep3Gen1==0)))) + #define VcDeDa_112_PwrIndcn_2 +#endif + +#define Vc_Pvc_Hw_B_Efad_CN (Vc_Pvc_Hw_B_Efad) +#define Vc_Pvc_Hw_B_Erad_CN (Vc_Pvc_Hw_B_Erad) +#define Vc_Pvc_Hw_B_Isg_CN (Vc_Pvc_Hw_B_Isg) diff --git a/tests/pybuild/cnfg_files/unit_cfgs/config_VcAesSupM__gen3.json b/tests/pybuild/cnfg_files/unit_cfgs/config_VcAesSupM__gen3.json new file mode 100644 index 0000000..3687547 --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs/config_VcAesSupM__gen3.json @@ -0,0 +1,171 @@ +{ + "version": "0.2.1", + "outports": { + "yVcAesSupM_B_SupChrgrErr": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1", + "name": "yVcAesSupM_B_SupChrgrErr", + "configs": [ + "all"], + "description": "Supercharger Peak Pressure engine protection activation flag", + "type": "Bool", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP"}}, + "inports": { + "yVcEc_B_ObdExe": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal1", + "name": "yVcEc_B_ObdExe", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "OBD execution flag", + "type": "Bool", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT"}, + "sVcEc_p_Amb": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3", + "name": "sVcEc_p_Amb", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 200, + "class": "CVC_EXT"} + }, + "core": { + "Events": { + "VcEvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPF1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}, + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPP1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Dem_SetEventStatus Pre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "IUMPR": {}, + "FIDs": { + "VcFiSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/FiM_GetFunctionPermission", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond", + "API_blk_type": "FiM_GetFunctionPermission", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "Ranking": { + "VcRvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Vc_SetRanking", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant1", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "TstId": {}}, + "dids": {}, + "nvm": {}, + "pre_procs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "local_vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "type": "Float32", + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"}, + "rVcAesSupM_p_SupMonrPDif": { + "type": "Float32", + "unit": "kPa", + "description": "Supercharger actual and target pressure difference", + "max": "300", + "min": " 300", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5", + "configs": [ + "not_in_config"], + "width": "1"}, + "rVcAesSupM_p_SupChrgrPDsAtmDiff": { + "type": "Float32", + "unit": "kPa", + "description": "Over pressure downstream supercharger", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + }, + "calib_consts": { + "cVcAesSupM_B_SupMonrHiBypFiMPerm": { + "type": "Bool", + "unit": "", + "description": "Switch to bypass FiM permission supercharger high boost monitor", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + } +} diff --git a/tests/pybuild/cnfg_files/unit_cfgs_ec/VcAesSupM__gen3_OPortMvd_LocalDefs.h b/tests/pybuild/cnfg_files/unit_cfgs_ec/VcAesSupM__gen3_OPortMvd_LocalDefs.h new file mode 100644 index 0000000..581114a --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs_ec/VcAesSupM__gen3_OPortMvd_LocalDefs.h @@ -0,0 +1,5 @@ +#include "VcCodeSwDefines.h" + +#if (Vc_Pvc_Hw_B_DualClutchGbx||Vc_Pvc_Hw_B_EClutch) + #define Launch_1 +#endif diff --git a/tests/pybuild/cnfg_files/unit_cfgs_ec/config_VcAesSupM__gen3.json b/tests/pybuild/cnfg_files/unit_cfgs_ec/config_VcAesSupM__gen3.json new file mode 100644 index 0000000..a2a6847 --- /dev/null +++ b/tests/pybuild/cnfg_files/unit_cfgs_ec/config_VcAesSupM__gen3.json @@ -0,0 +1,172 @@ +{ + "code_generator": "embedded_coder", + "version": "0.2.1", + "outports": { + "yVcAesSupM_B_SupChrgrErr": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1", + "name": "yVcAesSupM_B_SupChrgrErr", + "configs": [ + "all"], + "description": "Supercharger Peak Pressure engine protection activation flag", + "type": "Bool", + "unit": "%", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_DISP"}}, + "inports": { + "yVcEc_B_ObdExe": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal1", + "name": "yVcEc_B_ObdExe", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "OBD execution flag", + "type": "Bool", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT"}, + "sVcEc_p_Amb": { + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3", + "name": "sVcEc_p_Amb", + "configs": [ + [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]], + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 200, + "class": "CVC_EXT"} + }, + "core": { + "Events": { + "VcEvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPF1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}, + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Dem_SetEventStatusPP1", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Dem_SetEventStatus Pre-Passed", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "IUMPR": {}, + "FIDs": { + "VcFiSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/FiM_GetFunctionPermission", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant2", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond", + "API_blk_type": "FiM_GetFunctionPermission", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "Ranking": { + "VcRvSupChrPMdlPlausHi": { + "API_blk": [ + { + "path": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost/Vc_SetRanking", + "config": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"]}], + "blk_name": "NamedConstant1", + "subsystem": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost", + "API_blk_type": "Vcc_SetRanking", + "description": "-", + "type": "-", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "-"} + }, + "TstId": {}}, + "dids": {}, + "nvm": {}, + "pre_procs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "local_vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "type": "Float32", + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"}, + "rVcAesSupM_p_SupMonrPDif": { + "type": "Float32", + "unit": "kPa", + "description": "Supercharger actual and target pressure difference", + "max": "300", + "min": " 300", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5", + "configs": [ + "not_in_config"], + "width": "1"}, + "rVcAesSupM_p_SupChrgrPDsAtmDiff": { + "type": "Float32", + "unit": "kPa", + "description": "Over pressure downstream supercharger", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + }, + "calib_consts": { + "cVcAesSupM_B_SupMonrHiBypFiMPerm": { + "type": "Bool", + "unit": "", + "description": "Switch to bypass FiM permission supercharger high boost monitor", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1"} + } +} diff --git a/tests/pybuild/common_src_files/Tab1DIntpI1T0.c b/tests/pybuild/common_src_files/Tab1DIntpI1T0.c new file mode 100644 index 0000000..248d8cc --- /dev/null +++ b/tests/pybuild/common_src_files/Tab1DIntpI1T0.c @@ -0,0 +1,229 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcAesAir_OPortMvd + *** TargetLink subsystem : VcAesAir_OPortMvd/VcAesAir + *** Codefile : Tab1DIntpI1T0.c + *** + *** Generated by TargetLink, the dSPACE production quality code generator + *** Generation date: 2019-02-05 11:36:51 + *** + *** CODE GENERATOR OPTIONS: + *** Code generation mode : Standard + *** Compiler : + *** Target : Generic + *** ANSI-C compatible code : yes + *** Code Optimization : enabled + *** Constant style : decimal + *** Clean code option : enabled + *** Logging mode : Do not log anything + *** Code Coverage : disabled + *** Generate empty conditional branches : disabled + *** Loop unroll threshold : 5 + *** Shift mode : automatic + *** Handle unscaled SF expr. with TL type : enabled + *** Assignment of conditions : AllBooleanOutputs + *** Scope reduction only to function level : disabled + *** Exploit ranges if not erasable : disabled + *** Exploit Compute Through Overflow : optimized + *** Linker sections : enabled + *** Enable Assembler : disabled + *** Variable name length : 31 chars + *** Use global bitfields : disabled + *** Stateflow: use of bitfields : enabled + *** State activity encoding limit : 5 + *** Omit zero inits in restart function : disabled + *** Share functions between TL subsystems : enabled + *** Generate 64bit functions : disabled + *** Inlining Threshold : 6 + *** Line break limit : 100 + *** Target optimized boolean data type : enabled + *** Keep saturation elements : disabled + *** Extended variable sharing : disabled + *** Extended lifetime optimization : enabled + *** Style definition file : C:\TL4_3\dSPACE TargetLink 4.3\Matlab\Tl\Config\code + *** gen\cconfig.xml + *** Root style sheet : C:\TL4_3\dSPACE TargetLink 4.3\Matlab\Tl\XML\CodeGen + *** \Stylesheets\TL_CSourceCodeSS.xsl + *** + *** SUBSYS CORRESPONDING SIMULINK SUBSYSTEM + *** SAesAir1 VcAesAir + *** SAesAir2 VcAesAir/VcAesAir + *** SAesAir3 VcAesAir/VcAesAir/1_AirTarDyn + *** SAesAir4 VcAesAir/VcAesAir/2_ThrCtrl + *** SAesAir5 VcAesAir/VcAesAir/3_AirCdn + *** SAesAir6 VcAesAir/VcAesAir/VccDocBlock + *** SAesAir7 VcAesAir/VcAesAir/1_AirTarDyn/11_CylTarStrt + *** SAesAir8 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin + *** SAesAir9 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge + *** SAesAir10 VcAesAir/VcAesAir/1_AirTarDyn/14_AirTarFil + *** SAesAir11 VcAesAir/VcAesAir/1_AirTarDyn/15_TcRgnDsl + *** SAesAir12 VcAesAir/VcAesAir/1_AirTarDyn/16_PreLookUp + *** SAesAir13 VcAesAir/VcAesAir/1_AirTarDyn/17_AirTarIni + *** SAesAir14 VcAesAir/VcAesAir/1_AirTarDyn/PreprocessorName + *** SAesAir15 VcAesAir/VcAesAir/1_AirTarDyn/PreprocessorName1 + *** SAesAir16 VcAesAir/VcAesAir/1_AirTarDyn/VccDocBlock + *** SAesAir17 VcAesAir/VcAesAir/1_AirTarDyn/11_CylTarStrt/VccDocBlock + *** SAesAir18 VcAesAir/VcAesAir/1_AirTarDyn/11_CylTarStrt/VccDocBlock/EmptySubsystem + *** SAesAir19 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/121_AirTarBoost + *** SAesAir20 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/122_AirCnvnFil + *** SAesAir21 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/VccDocBlock + *** SAesAir22 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/121_AirTarBoost/FirstOrderFilterMem + *** SAesAir23 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/121_AirTarBoost/VccDocBlock + *** SAesAir24 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/121_AirTarBoost/VccDocBlock/EmptySubs + *** ystem + *** SAesAir25 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/122_AirCnvnFil/FirstOrderFilterMem + *** SAesAir26 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/122_AirCnvnFil/VccDocBlock + *** SAesAir27 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/122_AirCnvnFil/VccDocBlock/EmptySubsy + *** stem + *** SAesAir28 VcAesAir/VcAesAir/1_AirTarDyn/12_AirTarMin/VccDocBlock/EmptySubsystem + *** SAesAir29 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/131_AirTarMinSurgeFct + *** SAesAir30 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/PreprocessorName + *** SAesAir31 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/PreprocessorName1 + *** SAesAir32 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/VccDocBlock + *** SAesAir33 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/131_AirTarMinSurgeFct/VccDocBloc + *** k + *** SAesAir34 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/131_AirTarMinSurgeFct/md_AirTarM + *** inSurgeNom + *** SAesAir35 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/131_AirTarMinSurgeFct/VccDocBloc + *** k/EmptySubsystem + *** SAesAir36 VcAesAir/VcAesAir/1_AirTarDyn/13_AirTarMinSurge/VccDocBlock/EmptySubsystem + *** SAesAir37 VcAesAir/VcAesAir/1_AirTarDyn/14_AirTarFil/FirstOrderFilterMem1 + *** SAesAir38 VcAesAir/VcAesAir/1_AirTarDyn/14_AirTarFil/VccDocBlock + *** SAesAir39 VcAesAir/VcAesAir/1_AirTarDyn/14_AirTarFil/VccDocBlock/EmptySubsystem + *** SAesAir40 VcAesAir/VcAesAir/1_AirTarDyn/15_TcRgnDsl/VccDocBlock + *** SAesAir41 VcAesAir/VcAesAir/1_AirTarDyn/15_TcRgnDsl/VccDocBlock/EmptySubsystem + *** SAesAir42 VcAesAir/VcAesAir/1_AirTarDyn/16_PreLookUp/VccDocBlock + *** SAesAir43 VcAesAir/VcAesAir/1_AirTarDyn/16_PreLookUp/VccDocBlock/EmptySubsystem + *** SAesAir44 VcAesAir/VcAesAir/1_AirTarDyn/VccDocBlock/EmptySubsystem + *** SAesAir45 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc + *** SAesAir46 VcAesAir/VcAesAir/2_ThrCtrl/22_IntkMnfldDyn + *** SAesAir47 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts + *** SAesAir48 VcAesAir/VcAesAir/2_ThrCtrl/24_ThrWotCtrl + *** SAesAir49 VcAesAir/VcAesAir/2_ThrCtrl/25_CtrlMax + *** SAesAir50 VcAesAir/VcAesAir/2_ThrCtrl/Saturation1 + *** SAesAir51 VcAesAir/VcAesAir/2_ThrCtrl/VccDocBlock + *** SAesAir52 VcAesAir/VcAesAir/2_ThrCtrl/Z_ThrCtrlTcGain + *** SAesAir53 VcAesAir/VcAesAir/2_ThrCtrl/fac_ThrCtrlPCmp + *** SAesAir54 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc/211_Hold + *** SAesAir55 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc/FirstOrderFilter1 + *** SAesAir56 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc/Saturation2 + *** SAesAir57 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc/VccDocBlock + *** SAesAir58 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc/tc_ImcCorrnCyl + *** SAesAir59 VcAesAir/VcAesAir/2_ThrCtrl/21_Imc/VccDocBlock/EmptySubsystem + *** SAesAir60 VcAesAir/VcAesAir/2_ThrCtrl/22_IntkMnfldDyn/VccDocBlock + *** SAesAir61 VcAesAir/VcAesAir/2_ThrCtrl/22_IntkMnfldDyn/VccDocBlock/EmptySubsystem + *** SAesAir62 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/FirstOrderFilter + *** SAesAir63 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/FirstOrderFilter1 + *** SAesAir64 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/VccDocBlock + *** SAesAir65 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/Z_ThrCtrlDEst + *** SAesAir66 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/Z_ThrCtrlDGain + *** SAesAir67 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/Z_ThrCtrlDTar + *** SAesAir68 VcAesAir/VcAesAir/2_ThrCtrl/23_DParts/VccDocBlock/EmptySubsystem + *** SAesAir69 VcAesAir/VcAesAir/2_ThrCtrl/24_ThrWotCtrl/VccDocBlock + *** SAesAir70 VcAesAir/VcAesAir/2_ThrCtrl/24_ThrWotCtrl/m_ThrWotCtrlThd + *** SAesAir71 VcAesAir/VcAesAir/2_ThrCtrl/24_ThrWotCtrl/VccDocBlock/EmptySubsystem + *** SAesAir72 VcAesAir/VcAesAir/2_ThrCtrl/25_CtrlMax/VccDocBlock + *** SAesAir73 VcAesAir/VcAesAir/2_ThrCtrl/25_CtrlMax/fac_ThrCtrlMaxCorrn + *** SAesAir74 VcAesAir/VcAesAir/2_ThrCtrl/25_CtrlMax/VccDocBlock/EmptySubsystem + *** SAesAir75 VcAesAir/VcAesAir/2_ThrCtrl/VccDocBlock/EmptySubsystem + *** SAesAir76 VcAesAir/VcAesAir/3_AirCdn/SignalDelay + *** SAesAir77 VcAesAir/VcAesAir/VccDocBlock/EmptySubsystem + *** + *** SUBSYS CORRESPONDING MODEL BLOCK (REFERENCED MODEL) + *** + *** SF-NODE CORRESPONDING STATEFLOW NODE DESCRIPTION + *** + *** TargetLink version : 4.3p2 from 20-Sep-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef TAB1DINTPI1T0_C +#define TAB1DINTPI1T0_C + +/*------------------------------------------------------------------------------------------------*\ + DEFINES (OPT) +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INCLUDES +\*------------------------------------------------------------------------------------------------*/ + +#include "Tab1DIntpI1T0.h" + +/*------------------------------------------------------------------------------------------------*\ + ENUMS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + DEFINES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + TYPEDEFS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + VARIABLES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + PARAMETERIZED MACROS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION PROTOTYPES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INLINE FUNCTIONS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION DEFINITIONS +\*------------------------------------------------------------------------------------------------*/ + +/**************************************************************************************************\ + *** FUNCTION: + *** Tab1DIntpI1T0 + *** + *** DESCRIPTION: + *** Automatic generated function for Interpolation using PreLook-Up blocks. + *** + *** PARAMETERS: + *** Type Name Description + *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + *** const UInt8 * z_table pointer to table vector + *** UInt8 irx[2] 1. table input index + *** + *** RETURNS: + *** UInt8 + *** + *** SETTINGS: + *** Number of table dimensions.........: 1 + *** Interpolation......................: on + *** Distances fit into given bitlengths: no + *** +\**************************************************************************************************/ +#include "CVC_CODE_START.h" +UInt8 Tab1DIntpI1T0(const UInt8 * z_table, UInt8 irx[2]) +{ + /* SLLocal: Default storage class for local variables | Width: 8 */ + UInt8 Aux_U8; + UInt8 Aux_U8_a; + + z_table += irx[0]; + Aux_U8 = *(z_table++); + if (irx[1] != 0) { + Aux_U8_a = *z_table; + if (Aux_U8 <= Aux_U8_a) { + Aux_U8 += ((UInt8) (((UInt16) (((UInt16) (UInt8) (Aux_U8_a - Aux_U8)) * ((UInt16) irx[1]))) + >> 8)); + } + else { + Aux_U8 -= ((UInt8) (((UInt16) (((UInt16) (UInt8) (Aux_U8 - Aux_U8_a)) * ((UInt16) irx[1]))) + >> 8)); + } + } + return Aux_U8; +} +#include "CVC_CODE_END.h" + +/*------------------------------------------------------------------------------------------------*\ + MODULE LOCAL FUNCTION DEFINITIONS +\*------------------------------------------------------------------------------------------------*/ +#endif /* TAB1DINTPI1T0_C */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ diff --git a/tests/pybuild/core_cnfg.py b/tests/pybuild/core_cnfg.py new file mode 100644 index 0000000..5dbbde4 --- /dev/null +++ b/tests/pybuild/core_cnfg.py @@ -0,0 +1,67 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Constant defining the expected result from reading the core config file, +using ReadCoreIds.get_core_ids_proj, and for usage by the feature config class +""" + +CORE_CFG = { + 'CFG1': { + 'EventIDs': { + 'VcEvAmbPCompPlausMon': 'Event Id for Ambient Pressure rationality monitor ' + '(comparison to other sensor at eng off)', + 'VcEvCacPCompPlausMon': 'Event Id for CAC Pressure Rationality Monitor ' + '(comparison to other sensor at eng off)' + }, + 'FunctionIDs': { + 'VcFiAmbPCompPlausMon': 'VcFi forAmbient Pressure Rationality Monitor ' + '(comparison to other sensor at eng off)', + 'VcFiCacPCompPlausMon': 'VcFi for CAC Pressure Rationality Monitor ' + '(comparison to other sensor at eng off)' + }, + 'IUMPR': { + 'Vc09BoostHiPlausMon': 'Ratio Id for Boost Pressure High Rationality Monitor', + 'Vc09BoostLoPlausMon': 'Ratio Id for Boost Pressure Low ' + 'Rationality Monitor' + }, + 'Mode$06': { + 'Vc06BoostHiPlausMon': ('Test Result Id for high boost pressure Monitoring', + '17'), + 'Vc06BoostLoPlausMon': ('Test Result Id for low boost pressure Monitoring', + '18') + }, + 'Ranking': { + 'VcRvAmbPCompPlausMon': 'Ranking Id for Ambient Pressure Rationality Monitor', + 'VcRvCacPAmbPPlausMon': 'Ranking Id for CAC pressure vs Ambient pressure test' + } + }, + 'CFG2': { + 'EventIDs': { + 'VcEvAmbPCompPlausMon': + 'Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off)', + 'VcEvExhMnfldPCompPlausMon': + 'Event Id for Exhaust Manifold Rationality Monitor (comparison to other sensor at eng off)' + }, + 'FunctionIDs': { + 'VcFiAmbPCompPlausMon': + 'VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off)', + 'VcFiExhMnfldPCompPlausMon': + 'VcFi for Exhaust Manifold Pressure Diff Rationality Monitor (comparison to other sensor at eng off)' + }, + 'IUMPR': { + 'Vc09BoostHiPlausMon': 'Ratio Id for Boost Pressure High Rationality Monitor', + 'Vc09Boost1HiPlausMon': 'Ratio Id for Boost Pressure 1 High Rationality Monitor' + }, + 'Mode$06': { + 'Vc06BoostHiPlausMon': ('Test Result Id for high boost pressure Monitoring', + '17'), + 'Vc06Boost1HiPlausMon': ('Test Result Id for high boost pressure 1 Monitoring', + '1A') + }, + 'Ranking': { + 'VcRvAmbPCompPlausMon': 'Ranking Id for Ambient Pressure Rationality Monitor', + 'VcRvCacPIntkPPlausMon': 'Ranking Id for Exhaust Manifold Pressure ' + 'Rationality Monitor (sensor vs model)' + } + } +} diff --git a/tests/pybuild/core_dummy_cnfg.py b/tests/pybuild/core_dummy_cnfg.py new file mode 100644 index 0000000..79c72fa --- /dev/null +++ b/tests/pybuild/core_dummy_cnfg.py @@ -0,0 +1,572 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Test data used by unit test for CoreDummy class.""" + +####################################################### +# RB + +RB_HEADER_H_TL = '''/* Autogenerated core id dummy file */ + +#ifndef TESTFILE_H +#define TESTFILE_H +#include "vcc_rb_core.h" +#include "tl_basetypes.h" +''' + +RB_HEADER_H_MIXED = '''/* Autogenerated core id dummy file */ + +#ifndef TESTFILE_H +#define TESTFILE_H +#include "vcc_rb_core.h" +#include "rtwtypes.h" +#include "tl_basetypes.h" +''' + +RB_HEADER_H_EC = '''/* Autogenerated core id dummy file */ + +#ifndef TESTFILE_H +#define TESTFILE_H +#include "vcc_rb_core.h" +#include "rtwtypes.h" +''' + +RB_HEADER_C = '''/* Autogenerated core id dummy file */ + +#include "TESTFILE.h" + +#include "CVC_CODE_START.h" + +#ifndef VcEvDummy_ID + #define VcEvDummy_ID 1 +#endif /* VcEvDummy_ID */ +#ifndef VcEvDummy_DEBMODE + #define VcEvDummy_DEBMODE 0 +#endif /* VcEvDummy_DEBMODE */ +#ifndef VcFiDummy_ID + #define VcFiDummy_ID 1 +#endif /* VcFiDummy_ID */ +#ifndef Vc06Dummy_ID + #define Vc06Dummy_ID 1 +#endif /* Vc06Dummy_ID */ +#ifndef Vc09Dummy_ID + #define Vc09Dummy_ID 1 +#endif /* Vc09Dummy_ID */ +#ifndef VcRvDummy_ID + #define VcRvDummy_ID 1 +#endif /* VcRvDummy_ID */ + +''' + +RB_EVENT_H = '''#ifndef VcEvAmbPCompPlausMon + /* Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off) */ + extern const DSM_DFCType DFC_VcEvAmbPCompPlausMon ; + #define VcEvAmbPCompPlausMon (((DFC_VcEvAmbPCompPlausMon.debmode) << 12u) | (DFC_VcEvAmbPCompPlausMon.id)) + #define VcEvAmbPCompPlausMon_Dummy +#endif + +#ifndef VcEvCacPCompPlausMon + /* Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */ + extern const DSM_DFCType DFC_VcEvCacPCompPlausMon ; + #define VcEvCacPCompPlausMon (((DFC_VcEvCacPCompPlausMon.debmode) << 12u) | (DFC_VcEvCacPCompPlausMon.id)) + #define VcEvCacPCompPlausMon_Dummy +#endif + +''' + +RB_EVENT_C = '''#ifdef VcEvAmbPCompPlausMon_Dummy + /* Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off) */ + const DSM_DFCType DFC_VcEvAmbPCompPlausMon = {VcEvDummy_ID, VcEvDummy_DEBMODE}; + #warning "CoreID: VcEvAmbPCompPlausMon is not defined in the supplier SW" +#endif + +#ifdef VcEvCacPCompPlausMon_Dummy + /* Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */ + const DSM_DFCType DFC_VcEvCacPCompPlausMon = {VcEvDummy_ID, VcEvDummy_DEBMODE}; + #warning "CoreID: VcEvCacPCompPlausMon is not defined in the supplier SW" +#endif + +''' + +RB_FID_H = '''#ifndef VcFiAmbPCompPlausMon + /* VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off) */ + extern const DSM_FIdType FId_VcFiAmbPCompPlausMon ; + #define VcFiAmbPCompPlausMon (FId_VcFiAmbPCompPlausMon.id) + #define VcFiAmbPCompPlausMon_Dummy +#endif + +#ifndef VcFiCacPCompPlausMon + /* VcFi for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */ + extern const DSM_FIdType FId_VcFiCacPCompPlausMon ; + #define VcFiCacPCompPlausMon (FId_VcFiCacPCompPlausMon.id) + #define VcFiCacPCompPlausMon_Dummy +#endif + +''' + +RB_FID_C = '''#ifdef VcFiAmbPCompPlausMon_Dummy + /* VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off) */ + const DSM_FIdType FId_VcFiAmbPCompPlausMon = {VcFiDummy_ID}; + #warning "CoreID: VcFiAmbPCompPlausMon is not defined in the supplier SW" +#endif + +#ifdef VcFiCacPCompPlausMon_Dummy + /* VcFi for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */ + const DSM_FIdType FId_VcFiCacPCompPlausMon = {VcFiDummy_ID}; + #warning "CoreID: VcFiCacPCompPlausMon is not defined in the supplier SW" +#endif + +''' + +RB_IUMPR_H = '''#ifndef Vc09BoostHiPlausMon + /* Ratio Id for Boost Pressure High Rationality Monitor */ + extern const DSM_FIdType FId_Vc09BoostHiPlausMon ; + #define Vc09BoostHiPlausMon (FId_Vc09BoostHiPlausMon.id) + #define Vc09BoostHiPlausMon_Dummy +#endif + +#ifndef Vc09BoostLoPlausMon + /* Ratio Id for Boost Pressure Low Rationality Monitor */ + extern const DSM_FIdType FId_Vc09BoostLoPlausMon ; + #define Vc09BoostLoPlausMon (FId_Vc09BoostLoPlausMon.id) + #define Vc09BoostLoPlausMon_Dummy +#endif + +''' + +RB_IUMPR_C = '''#ifdef Vc09BoostHiPlausMon_Dummy + /* Ratio Id for Boost Pressure High Rationality Monitor */ + const DSM_FIdType FId_Vc09BoostHiPlausMon = {Vc09Dummy_ID}; + #warning "CoreID: Vc09BoostHiPlausMon is not defined in the supplier SW" +#endif + +#ifdef Vc09BoostLoPlausMon_Dummy + /* Ratio Id for Boost Pressure Low Rationality Monitor */ + const DSM_FIdType FId_Vc09BoostLoPlausMon = {Vc09Dummy_ID}; + #warning "CoreID: Vc09BoostLoPlausMon is not defined in the supplier SW" +#endif + +''' + +RB_MODE06_H = '''#ifndef Vc06BoostHiPlausMon + /* Test Result Id for high boost pressure Monitoring, UAS 17 */ + extern const DSM_DTRType DTR_Vc06BoostHiPlausMon; + #define Vc06BoostHiPlausMon (DTR_Vc06BoostHiPlausMon.id) + #define Vc06BoostHiPlausMon_Dummy +#endif + +#ifndef Vc06BoostLoPlausMon + /* Test Result Id for low boost pressure Monitoring, UAS 18 */ + extern const DSM_DTRType DTR_Vc06BoostLoPlausMon; + #define Vc06BoostLoPlausMon (DTR_Vc06BoostLoPlausMon.id) + #define Vc06BoostLoPlausMon_Dummy +#endif + +''' + +RB_MODE06_C = '''#ifdef Vc06BoostHiPlausMon_Dummy + /* Test Result Id for high boost pressure Monitoring, UAS 17 */ + const DSM_DTRType DTR_Vc06BoostHiPlausMon = {Vc06Dummy_ID}; +#warning "CoreID: Vc06BoostHiPlausMon is not defined in the supplier SW" +#endif + +#ifdef Vc06BoostLoPlausMon_Dummy + /* Test Result Id for low boost pressure Monitoring, UAS 18 */ + const DSM_DTRType DTR_Vc06BoostLoPlausMon = {Vc06Dummy_ID}; +#warning "CoreID: Vc06BoostLoPlausMon is not defined in the supplier SW" +#endif + +''' + +RB_RNK_H_TL = '''#ifndef VcRvAmbPCompPlausMon + /* Ranking Id for Ambient Pressure Rationality Monitor */ + extern const UInt16 DSMAppl_RnkValStorg_RnkId_VcRvAmbPCompPlausMon; + #define VcRvAmbPCompPlausMon DSMAppl_RnkValStorg_RnkId_VcRvAmbPCompPlausMon + #define VcRvAmbPCompPlausMon_Dummy +#endif + +#ifndef VcRvCacPAmbPPlausMon + /* Ranking Id for CAC pressure vs Ambient pressure test */ + extern const UInt16 DSMAppl_RnkValStorg_RnkId_VcRvCacPAmbPPlausMon; + #define VcRvCacPAmbPPlausMon DSMAppl_RnkValStorg_RnkId_VcRvCacPAmbPPlausMon + #define VcRvCacPAmbPPlausMon_Dummy +#endif + +''' + +RB_RNK_H_EC = '''#ifndef VcRvAmbPCompPlausMon + /* Ranking Id for Ambient Pressure Rationality Monitor */ + extern const uint16_T DSMAppl_RnkValStorg_RnkId_VcRvAmbPCompPlausMon; + #define VcRvAmbPCompPlausMon DSMAppl_RnkValStorg_RnkId_VcRvAmbPCompPlausMon + #define VcRvAmbPCompPlausMon_Dummy +#endif + +#ifndef VcRvCacPAmbPPlausMon + /* Ranking Id for CAC pressure vs Ambient pressure test */ + extern const uint16_T DSMAppl_RnkValStorg_RnkId_VcRvCacPAmbPPlausMon; + #define VcRvCacPAmbPPlausMon DSMAppl_RnkValStorg_RnkId_VcRvCacPAmbPPlausMon + #define VcRvCacPAmbPPlausMon_Dummy +#endif + +''' + +RB_RNK_C_TL = '''#ifdef VcRvAmbPCompPlausMon_Dummy + /* Ranking Id for Ambient Pressure Rationality Monitor */ + const UInt16 DSMAppl_RnkValStorg_RnkId_VcRvAmbPCompPlausMon = VcRvDummy_ID; + #warning "CoreID: VcRvAmbPCompPlausMon is not defined in the supplier SW" +#endif + +#ifdef VcRvCacPAmbPPlausMon_Dummy + /* Ranking Id for CAC pressure vs Ambient pressure test */ + const UInt16 DSMAppl_RnkValStorg_RnkId_VcRvCacPAmbPPlausMon = VcRvDummy_ID; + #warning "CoreID: VcRvCacPAmbPPlausMon is not defined in the supplier SW" +#endif + +''' + +RB_RNK_C_EC = '''#ifdef VcRvAmbPCompPlausMon_Dummy + /* Ranking Id for Ambient Pressure Rationality Monitor */ + const uint16_T DSMAppl_RnkValStorg_RnkId_VcRvAmbPCompPlausMon = VcRvDummy_ID; + #warning "CoreID: VcRvAmbPCompPlausMon is not defined in the supplier SW" +#endif + +#ifdef VcRvCacPAmbPPlausMon_Dummy + /* Ranking Id for CAC pressure vs Ambient pressure test */ + const uint16_T DSMAppl_RnkValStorg_RnkId_VcRvCacPAmbPPlausMon = VcRvDummy_ID; + #warning "CoreID: VcRvCacPAmbPPlausMon is not defined in the supplier SW" +#endif + +''' + +RB_END_H = r'''#endif /* TESTFILE */ +/*----------------------------------------------------------------------------*\ + END OF FILE +\*----------------------------------------------------------------------------*/ +''' + +RB_END_C = r'''#include "CVC_CODE_END.h" +/*----------------------------------------------------------------------------*\ + END OF FILE +\*----------------------------------------------------------------------------*/ +''' + + +####################################################### +# Denso + +DG2_HEADER_H = '''/* Autogenerated core id dummy file */ + +#ifndef TESTFILE +#define TESTFILE + +#include "VcCoreSupplierAbstraction.h" + +/* Check if denso make env. has defined the AUTOSAR declarations + if not, do dummy declaration to be able to build a dummy I/F in + an old make environment */ +#ifndef FUNC + #define FUNC(rettype, memclass) rettype /* from Compiler.h */ + #define P2VAR(ptrtype, memclass, ptrclass) ptrtype * /* from Compiler.h */ + typedef unsigned char Std_ReturnType; /* from Std_Types.h */ + typedef unsigned char Dem_EventStatusType; + typedef unsigned char boolean; + #define AUTOMATIC + #define RTE_APPL_DATA + #define RTE_CODE /* from Compiler_cfg.h */ +#endif /* TESTFILE */ + +#include "CVC_CODE_START.h" +''' + +DG2_HEADER_C_TL = '''/* Autogenerated core id dummy file */ + +#include "testfile" +#include "tl_basetypes.h" +#include "CVC_CODE_START.h" + +#define Vc06Undef 1 +#define Vc09Undef 1 +#define VcRvUndef 1 + +''' + +DG2_HEADER_C_MIXED = '''/* Autogenerated core id dummy file */ + +#include "testfile" +#include "rtwtypes.h" +#include "tl_basetypes.h" +#include "CVC_CODE_START.h" + +#define Vc06Undef 1 +#define Vc09Undef 1 +#define VcRvUndef 1 + +''' + +DG2_HEADER_C_EC = '''/* Autogenerated core id dummy file */ + +#include "testfile" +#include "rtwtypes.h" +#include "CVC_CODE_START.h" + +#define Vc06Undef 1 +#define Vc09Undef 1 +#define VcRvUndef 1 + +''' + +DG2_EVENT_H = ('#ifndef Rte_Call_Event_VcEvAmbPCompPlausMon_SetEventStatus\n' + ' /* Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off) */\n' + ' extern FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvAmbPCompPlausMon_SetEventStatus' + ' (Dem_EventStatusType EventStatus);\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_Event_VcEvAmbPCompPlausMon_SetEventDisabled\n' + ' /* Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off) */\n' + ' extern FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvAmbPCompPlausMon_SetEventDisabled' + ' (void);\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_Event_VcEvCacPCompPlausMon_SetEventStatus\n' + ' /* Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' extern FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvCacPCompPlausMon_SetEventStatus' + ' (Dem_EventStatusType EventStatus);\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_Event_VcEvCacPCompPlausMon_SetEventDisabled\n' + ' /* Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' extern FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvCacPCompPlausMon_SetEventDisabled' + ' (void);\n' + '#endif\n' + '\n') + +DG2_EVENT_C = ('#ifndef Rte_Call_Event_VcEvAmbPCompPlausMon_SetEventStatus\n' + ' /* Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off) */\n' + ' FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvAmbPCompPlausMon_SetEventStatus' + ' (Dem_EventStatusType EventStatus) { return 0;}\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_Event_VcEvAmbPCompPlausMon_SetEventDisabled\n' + ' /* Event Id for Ambient Pressure rationality monitor (comparison to other sensor at eng off) */\n' + ' FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvAmbPCompPlausMon_SetEventDisabled (void)' + ' { return 0;}\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_Event_VcEvCacPCompPlausMon_SetEventStatus\n' + ' /* Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvCacPCompPlausMon_SetEventStatus' + ' (Dem_EventStatusType EventStatus) { return 0;}\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_Event_VcEvCacPCompPlausMon_SetEventDisabled\n' + ' /* Event Id for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_Event_VcEvCacPCompPlausMon_SetEventDisabled (void)' + ' { return 0;}\n' + '#endif\n' + '\n') + +DG2_FID_H = ('#ifndef Rte_Call_FI_VcFiAmbPCompPlausMon_GetFunctionPermission\n' + ' /* VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' extern FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_FI_VcFiAmbPCompPlausMon_GetFunctionPermission' + ' (P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Permission);\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_FI_VcFiCacPCompPlausMon_GetFunctionPermission\n' + ' /* VcFi for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' extern FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_FI_VcFiCacPCompPlausMon_GetFunctionPermission' + ' (P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Permission);\n' + '#endif\n' + '\n') + +DG2_FID_C = ('#ifndef Rte_Call_FI_VcFiAmbPCompPlausMon_GetFunctionPermission\n' + ' /* VcFi forAmbient Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_FI_VcFiAmbPCompPlausMon_GetFunctionPermission' + ' (P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Permission) { *Permission = 1; return 0;}\n' + '#endif\n' + '\n' + '#ifndef Rte_Call_FI_VcFiCacPCompPlausMon_GetFunctionPermission\n' + ' /* VcFi for CAC Pressure Rationality Monitor (comparison to other sensor at eng off) */\n' + ' FUNC(Std_ReturnType, RTE_CODE) Rte_Call_Diag_FI_VcFiCacPCompPlausMon_GetFunctionPermission' + ' (P2VAR(boolean, AUTOMATIC, RTE_APPL_DATA) Permission) { *Permission = 1; return 0;}\n' + '#endif\n' + '\n') + +DG2_IUMPR_H_TL = '''#ifndef IUMID_Vc09BoostHiPlausMon + /* Ratio Id for Boost Pressure High Rationality Monitor */ + #define IUMID_Vc09BoostHiPlausMon cIUMID_Vc09BoostHiPlausMon + #define Vc09BoostHiPlausMon_DUMMY + extern const UInt16 cIUMID_Vc09BoostHiPlausMon; +#endif + +#ifndef IUMID_Vc09BoostLoPlausMon + /* Ratio Id for Boost Pressure Low Rationality Monitor */ + #define IUMID_Vc09BoostLoPlausMon cIUMID_Vc09BoostLoPlausMon + #define Vc09BoostLoPlausMon_DUMMY + extern const UInt16 cIUMID_Vc09BoostLoPlausMon; +#endif + +''' + +DG2_IUMPR_C_TL = '''#ifdef Vc09BoostHiPlausMon_DUMMY + /* Ratio Id for Boost Pressure High Rationality Monitor */ + const UInt16 cIUMID_Vc09BoostHiPlausMon = Vc09Undef; +#endif + +#ifdef Vc09BoostLoPlausMon_DUMMY + /* Ratio Id for Boost Pressure Low Rationality Monitor */ + const UInt16 cIUMID_Vc09BoostLoPlausMon = Vc09Undef; +#endif + +''' + +DG2_MODE06_H_TL = '''#ifndef TR_Vc06BoostHiPlausMon + /* Test Result Id for high boost pressure Monitoring, UAS 17 */ + #define TR_Vc06BoostHiPlausMon cTR_Vc06BoostHiPlausMon + #define Vc06BoostHiPlausMon_DUMMY + extern const UInt16 cTR_Vc06BoostHiPlausMon; +#endif + +#ifndef TR_Vc06BoostLoPlausMon + /* Test Result Id for low boost pressure Monitoring, UAS 18 */ + #define TR_Vc06BoostLoPlausMon cTR_Vc06BoostLoPlausMon + #define Vc06BoostLoPlausMon_DUMMY + extern const UInt16 cTR_Vc06BoostLoPlausMon; +#endif + +''' + +DG2_MODE06_C_TL = '''#ifdef Vc06BoostHiPlausMon_DUMMY + /* Test Result Id for high boost pressure Monitoring, UAS 17 */ + const UInt16 cTR_Vc06BoostHiPlausMon = Vc06Undef; +#endif + +#ifdef Vc06BoostLoPlausMon_DUMMY + /* Test Result Id for low boost pressure Monitoring, UAS 18 */ + const UInt16 cTR_Vc06BoostLoPlausMon = Vc06Undef; +#endif + +''' + +DG2_RNK_H_TL = '''#ifndef RVID_VcRvAmbPCompPlausMon + /* Ranking Id for Ambient Pressure Rationality Monitor */ + #define RVID_VcRvAmbPCompPlausMon cRVID_VcRvAmbPCompPlausMon + #define VcRvAmbPCompPlausMon_DUMMY + extern const UInt16 cRVID_VcRvAmbPCompPlausMon; +#endif + +#ifndef RVID_VcRvCacPAmbPPlausMon + /* Ranking Id for CAC pressure vs Ambient pressure test */ + #define RVID_VcRvCacPAmbPPlausMon cRVID_VcRvCacPAmbPPlausMon + #define VcRvCacPAmbPPlausMon_DUMMY + extern const UInt16 cRVID_VcRvCacPAmbPPlausMon; +#endif + +''' + +DG2_RNK_C_TL = '''#ifdef VcRvAmbPCompPlausMon_DUMMY + /* Ranking Id for Ambient Pressure Rationality Monitor */ + const UInt16 cRVID_VcRvAmbPCompPlausMon = VcRvUndef; +#endif + +#ifdef VcRvCacPAmbPPlausMon_DUMMY + /* Ranking Id for CAC pressure vs Ambient pressure test */ + const UInt16 cRVID_VcRvCacPAmbPPlausMon = VcRvUndef; +#endif + +''' + +DG2_IUMPR_H_EC = '''#ifndef IUMID_Vc09BoostHiPlausMon + /* Ratio Id for Boost Pressure High Rationality Monitor */ + #define IUMID_Vc09BoostHiPlausMon cIUMID_Vc09BoostHiPlausMon + #define Vc09BoostHiPlausMon_DUMMY + extern const uint16_T cIUMID_Vc09BoostHiPlausMon; +#endif + +#ifndef IUMID_Vc09BoostLoPlausMon + /* Ratio Id for Boost Pressure Low Rationality Monitor */ + #define IUMID_Vc09BoostLoPlausMon cIUMID_Vc09BoostLoPlausMon + #define Vc09BoostLoPlausMon_DUMMY + extern const uint16_T cIUMID_Vc09BoostLoPlausMon; +#endif + +''' + +DG2_IUMPR_C_EC = '''#ifdef Vc09BoostHiPlausMon_DUMMY + /* Ratio Id for Boost Pressure High Rationality Monitor */ + const uint16_T cIUMID_Vc09BoostHiPlausMon = Vc09Undef; +#endif + +#ifdef Vc09BoostLoPlausMon_DUMMY + /* Ratio Id for Boost Pressure Low Rationality Monitor */ + const uint16_T cIUMID_Vc09BoostLoPlausMon = Vc09Undef; +#endif + +''' + +DG2_MODE06_H_EC = '''#ifndef TR_Vc06BoostHiPlausMon + /* Test Result Id for high boost pressure Monitoring, UAS 17 */ + #define TR_Vc06BoostHiPlausMon cTR_Vc06BoostHiPlausMon + #define Vc06BoostHiPlausMon_DUMMY + extern const uint16_T cTR_Vc06BoostHiPlausMon; +#endif + +#ifndef TR_Vc06BoostLoPlausMon + /* Test Result Id for low boost pressure Monitoring, UAS 18 */ + #define TR_Vc06BoostLoPlausMon cTR_Vc06BoostLoPlausMon + #define Vc06BoostLoPlausMon_DUMMY + extern const uint16_T cTR_Vc06BoostLoPlausMon; +#endif + +''' + +DG2_MODE06_C_EC = '''#ifdef Vc06BoostHiPlausMon_DUMMY + /* Test Result Id for high boost pressure Monitoring, UAS 17 */ + const uint16_T cTR_Vc06BoostHiPlausMon = Vc06Undef; +#endif + +#ifdef Vc06BoostLoPlausMon_DUMMY + /* Test Result Id for low boost pressure Monitoring, UAS 18 */ + const uint16_T cTR_Vc06BoostLoPlausMon = Vc06Undef; +#endif + +''' + +DG2_RNK_H_EC = '''#ifndef RVID_VcRvAmbPCompPlausMon + /* Ranking Id for Ambient Pressure Rationality Monitor */ + #define RVID_VcRvAmbPCompPlausMon cRVID_VcRvAmbPCompPlausMon + #define VcRvAmbPCompPlausMon_DUMMY + extern const uint16_T cRVID_VcRvAmbPCompPlausMon; +#endif + +#ifndef RVID_VcRvCacPAmbPPlausMon + /* Ranking Id for CAC pressure vs Ambient pressure test */ + #define RVID_VcRvCacPAmbPPlausMon cRVID_VcRvCacPAmbPPlausMon + #define VcRvCacPAmbPPlausMon_DUMMY + extern const uint16_T cRVID_VcRvCacPAmbPPlausMon; +#endif + +''' + +DG2_RNK_C_EC = '''#ifdef VcRvAmbPCompPlausMon_DUMMY + /* Ranking Id for Ambient Pressure Rationality Monitor */ + const uint16_T cRVID_VcRvAmbPCompPlausMon = VcRvUndef; +#endif + +#ifdef VcRvCacPAmbPPlausMon_DUMMY + /* Ranking Id for CAC pressure vs Ambient pressure test */ + const uint16_T cRVID_VcRvCacPAmbPPlausMon = VcRvUndef; +#endif + +''' +DG2_END_H = r'''#include "CVC_CODE_END.h" +#endif /* TESTFILE */ +/*----------------------------------------------------------------------------*\ + END OF FILE +\*----------------------------------------------------------------------------*/ +''' + +DG2_END_C = r'''#include "CVC_CODE_END.h" +/*----------------------------------------------------------------------------*\ + END OF FILE +\*----------------------------------------------------------------------------*/ +''' diff --git a/tests/pybuild/io_cnfg.py b/tests/pybuild/io_cnfg.py new file mode 100644 index 0000000..53c5452 --- /dev/null +++ b/tests/pybuild/io_cnfg.py @@ -0,0 +1,282 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Constant defining the expected result from reading the unit config files. + +Reads from a test configuration file, and checks the if the output is +accorfing to expectioans. +""" + +IO_CNFG_DICT = { + 'VED4_GENIII': { + 'CAN-Input': { + 'sVcAc_D_EngRunReqClim': { + 'IOType': 'd', + 'description': 'Engine running request (inhibit stop) from climate', + 'element_index': 5, + 'init': 0, + 'max': 3, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'Private CAN-Input': { + 'sVcTc_p_LockUp': { + 'IOType': 'x', + 'description': 'AW Pressure request to LU', + 'element_index': 5, + 'init': 0, + 'max': 16383, + 'min': 0, + 'type': 'Float32', + 'unit': 'gf/cm2' + } + }, + 'Private CAN-Output': {} + }, + 'VEP4_GENIII': { + 'CAN-Input': {}, + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {} + } +} + +INPUT_CNFG_DICT = { + 'VED4_GENIII': { + 'CAN-Input': { + 'sVcAc_D_EngRunReqClim': { + 'IOType': 'd', + 'description': 'Engine running request (inhibit stop) from climate', + 'element_index': 5, + 'init': 0, + 'max': 3, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + }, + 'sVcAcc_a_Max': { + 'IOType': 's', + 'description': 'Max acceleration request from ACC', + 'element_index': 6, + 'init': 0, + 'max': 5, + 'min': -5, + 'type': 'Float32', + 'unit': 'm/s2' + } + }, + 'EMS-Input': {}, + 'LIN-Input': {}, + 'Private CAN-Input': { + 'sVcTc_p_LockUp': { + 'IOType': 'x', + 'description': 'AW Pressure request to LU', + 'element_index': 5, + 'init': 0, + 'max': 16383, + 'min': 0, + 'type': 'Float32', + 'unit': 'gf/cm2' + } + } + }, + 'VEP4_GENIII': { + 'CAN-Input': {}, + 'EMS-Input': {}, + 'LIN-Input': {}, + 'Private CAN-Input': {}, + } +} + +OUTPUT_CNFG_DICT = { + 'VED4_GENIII': { + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'EMS-Output': {}, + 'LIN-Output': {}, + 'Private CAN-Output': {} + }, + 'VEP4_GENIII': { + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'EMS-Output': {}, + 'LIN-Output': {}, + 'Private CAN-Output': {} + } +} + +DEP_IO_CNFG_DICT = { + 'VED4_GENIII': { + 'CAN-Input': { + 'sVcAcc_a_Max': { + 'IOType': 's', + 'description': 'Max acceleration request from ACC', + 'element_index': 6, + 'init': 0, + 'max': 5, + 'min': -5, + 'type': 'Float32', + 'unit': 'm/s2'}}, + 'CAN-Output': {}, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {} + }, + 'VEP4_GENIII': { + 'CAN-Input': {}, + 'CAN-Output': {}, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {} + } +} + +DBG_CNFG_DICT = { + 'VED4_GENIII': { + 'CAN-Input': { + 'sVcAc_D_EngRunReqClim': { + 'IOType': 'd', + 'description': 'Engine running ' + 'request (inhibit ' + 'stop) from climate', + 'element_index': 5, + 'init': 0, + 'max': 3, + 'min': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {} + }, + 'VEP4_GENIII': { + 'CAN-Input': {}, + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {} + } +} + +EC_CNFG_DICT = { + 'ADAS': { + 'CAN-Input': { + 'sVcAc_D_EngRunReqClim': { + 'IOType': 'd', + 'description': 'Engine running request (inhibit stop) from climate', + 'element_index': 5, + 'init': 0, + 'max': 3, + 'min': 0, + 'type': 'ulong_T', + 'unit': '-' + } + }, + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'real32_T', + 'unit': '-' + } + }, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {} + } +} diff --git a/tests/pybuild/reference_files/EmptySigCheck.html b/tests/pybuild/reference_files/EmptySigCheck.html new file mode 100644 index 0000000..5bf737d --- /dev/null +++ b/tests/pybuild/reference_files/EmptySigCheck.html @@ -0,0 +1,65 @@ + + + + + + + + +

    Table of contents

    +

    Missing external signals

    +

    Unused external signals

    +

    Detailed Unit Information

    +

    Signals missing and unused in the interface definition

    +

    Missing external signals

    +

    Signals not generated by Vcc SW, but are defined in the Interface definition to be generated

    + + + + + + + + + +
    VariableConfigurations
    +

    Unused external signals

    +

    Signals defined to be generated by supplier SW, but are not used by VCC SW

    + + + + + + + + + +
    VariableConfigurations
    + + diff --git a/tests/pybuild/reference_files/EnumTest.m b/tests/pybuild/reference_files/EnumTest.m new file mode 100644 index 0000000..700dd59 --- /dev/null +++ b/tests/pybuild/reference_files/EnumTest.m @@ -0,0 +1,27 @@ +classdef EnumTest < Simulink.IntEnumType + + enumeration + ClimaOff(0) + ClimaHeatgToHvacAndHvBatt(1) + ClimaHeatgToHvBatt(2) + ClimaHeatgToHvac(3) + ClimaFlow(4) + Degas(5) + FailSafe(6) + end + + methods (Static) + function retVal = getDescription() + retVal = 'EnumTest'; + end + function retVal = getDefaultValue() + retVal = EnumTest.ClimaOff; + end + function retVal = getDataScope() + retVal = 'Exported'; + end + function retVal = addClassNameToEnumNames() + retVal = true; + end + end +end diff --git a/tests/pybuild/reference_files/OPort_defs.json b/tests/pybuild/reference_files/OPort_defs.json new file mode 100644 index 0000000..cb11652 --- /dev/null +++ b/tests/pybuild/reference_files/OPort_defs.json @@ -0,0 +1,17 @@ +{ + "VcVmcPmm__HEP7_1140_Brake_1": "((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2": "((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3": "((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4": "((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1243_Isg_8": "((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg))", + "VcVmcPmm__HEP7_1270_12VStartEnable_10": "((Vc_Pvc_Hw_B_12VStartMotor && !Vc_Pvc_Hw_B_Efad && !Vc_Pvc_Hw_B_Erad && !Vc_Pvc_Hw_B_Isg))", + "VcVmcPmm__HEP7_1000_Hev_11": "((Vc_D_CodegenHev>0))", + "Vc_Pvc_Hw_B_Isg_CN": "((Vc_Pvc_Hw_B_Isg))", + "Vc_Pvc_Hw_B_HVSystem_CN": "((Vc_Pvc_Hw_B_HVSystem))", + "Vc_Pvc_Hw_B_Efad_CN": "((Vc_Pvc_Hw_B_Efad))", + "Vc_Pvc_Hw_B_Erad_CN": "((Vc_Pvc_Hw_B_Erad))" +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/SS1/test_model/VcTestModel.h b/tests/pybuild/reference_files/SS1/test_model/VcTestModel.h new file mode 100644 index 0000000..330bca7 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model/VcTestModel.h @@ -0,0 +1,109 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel_OPortMvd + *** TargetLink subsystem : VcTestModel_OPortMvd/VcTestModel + *** Codefile : VcTestModel.h + *** + *** Generated by TargetLink, the dSPACE production quality code generator + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef VCTESTMODEL_H +#define VCTESTMODEL_H + +/*------------------------------------------------------------------------------------------------*\ + DEFINES (OPT) +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INCLUDES +\*------------------------------------------------------------------------------------------------*/ + +#include "tl_defines_TestModel.h" +#include "tl_basetypes.h" +#include "udt_VcTestModel.h" + +/*------------------------------------------------------------------------------------------------*\ + ENUMS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + DEFINES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + TYPEDEFS +\*------------------------------------------------------------------------------------------------*/ + +struct sVcTestModel_Bus_Dummy { + Float32 sVcTestModel_D_One; + Bool yVcTestModel_B_One; +}; /* Description: bus outport struct */ + +/*------------------------------------------------------------------------------------------------*\ + VARIABLES +\*------------------------------------------------------------------------------------------------*/ + +#include "PREDECL_CAL_START.h" +/**************************************************************************************************\ + CVC_CAL: CVC calibration constants in FLASH | Width: 32 +\**************************************************************************************************/ +extern CVC_CAL UInt8 cVcDummy_D_CalDummyOne32; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Debug switch for profile manager value for rear air flow. */ +#include "PREDECL_CAL_END.h" + +#include "PREDECL_DISP_START.h" +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 32 +\**************************************************************************************************/ +extern CVC_DISP Float32 sVcDummy_D_DispDummyOne32; + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 8 +\**************************************************************************************************/ +extern CVC_DISP Int8 sVcDummy_D_DispDummyOne8; + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: N.A. +\**************************************************************************************************/ +extern CVC_DISP struct sVcTestModel_Bus_Dummy + sVcTestModel_Bus_Dummy; +#include "PREDECL_DISP_END.h" + +#include "PREDECL_START.h" +/**************************************************************************************************\ + CVC_EXT: CVC external interface input variables | Width: 32 +\**************************************************************************************************/ +CVC_EXT Float32 sVcDummy_D_DummyOne; /* Description: Nvram temp stored Driver Temp setting. + */ +CVC_EXT Float32 sVcDummy_D_DummyTwo; /* + Unit: - + Description: Driver Temperature Value Request */ + +/**************************************************************************************************\ + CVC_EXT: CVC external interface input variables | Width: N.A. +\**************************************************************************************************/ +CVC_EXT struct sVc_Bus_Dummy sVc_Bus_Dummy; /* Description: Profil + e manager settings */ + +#include "PREDECL_END.h" + +/*------------------------------------------------------------------------------------------------*\ + PARAMETERIZED MACROS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION PROTOTYPES +\*------------------------------------------------------------------------------------------------*/ + +/**************************************************************************************************\ + GLOBAL_FCN: global function(s) (exported to other modules) +\**************************************************************************************************/ +extern void RESTART_VcTestModel(void); +extern void VcTestModel(void); + +#endif /* VCTESTMODEL_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/reference_files/SS1/test_model/VcTestModel_par.m b/tests/pybuild/reference_files/SS1/test_model/VcTestModel_par.m new file mode 100644 index 0000000..6527261 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model/VcTestModel_par.m @@ -0,0 +1,6 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% VcTestModel %%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +SgpDefault.VcTestModel.All = 'SG_P'; + diff --git a/tests/pybuild/reference_files/SS1/test_model/VcTestModel_sgp.xml b/tests/pybuild/reference_files/SS1/test_model/VcTestModel_sgp.xml new file mode 100644 index 0000000..1608133 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model/VcTestModel_sgp.xml @@ -0,0 +1,1027 @@ + + + + + Persson, Per (G) + Persson, Per (G) + 2016-06-07T06:47:00Z + 15.00 + + + + + + + symbol_groups + symbol_groups + + 1740 + 23016 + 0 + 0 + False + False + + + + + + + + + + + + + + + + + Calibration label + Symbol group diesel + Symbol group petrol + Symbol group hybrid + Subsystem + + + mVcTestModel_fac_BoostMaxTCmp + EC_ACS_TURBO + EC_ACS_TURBO + NotApplicable + + + tVcTestModel_n_PreIgnitionRpm + DD_DCL + DD_DCL + DD_DCL + NotApplicable + + + cVcTestModel_n_PreIgnitionTrigger + DD_DCL + DD_DCL + DD_DCL + NotApplicable + + + cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db + PVC_DEP + PVC_DEP + PVC_DEP + +
    + + +
    +
    + + + + + + 1 + 1 + 2 + + + 3 + + + 2 + 0 + + + False + False + + + R2C2:R9998C4 + List + symbol_groups!#REF! + + + + + + + + CS_AC + CS_AC + CS_AC + + + CS_AL + CS_AL + CS_AL + + + CS_AUXLOADCONTROL + CS_AUXLOADCONTROL + CS_AUXLOADCONTROL + + + CS_ECMRELAYCONTROL + CS_ECMRELAYCONTROL + CS_ECMRELAYCONTROL + + + CS_ENGINEOIL + CS_ENGINEFUEL + CS_ENGINEFUEL + + + CS_ENGINESTATE + CS_ENGINEOIL + CS_ENGINEOIL + + + CS_FAN + CS_ENGINESTATE + CS_ENGINESTATE + + + CS_IMMO + CS_FAN + CS_FAN + + + CS_MVEGYMGR + CS_HVEGYMGR + CS_HVEGYMGR + + + CS_REGENCHARGE + CS_IMMO + CS_IMMO + + + CS_REGENCHARGESPM + CS_MVEGYMGR + CS_MVEGYMGR + + + CS_SHIFTBYWIRE + CS_REGENCHARGE + CS_REGENCHARGE + + + CS_WAKEUP + CS_REGENCHARGESPM + CS_REGENCHARGESPM + + + DD_AIRFILL + CS_SHIFTBYWIRE + CS_SHIFTBYWIRE + + + DD_COMP + CS_WAKEUP + CS_SWCONFIG + + + DD_COM_GROUP1 + DD_AIRFILL + CS_WAKEUP + + + DD_CORE + DD_COMP + DD_AIRFILL + + + DD_DCL + DD_COM_GROUP1 + DD_COMP + + + DD_DEBUG + DD_CORE + DD_COM_GROUP1 + + + DD_DEP + DD_CORE_SCHEDULER + DD_CORE + + + DD_DEP_ACCRPEDL + DD_DCL + DD_CORE_SCHEDULER + + + DD_DEP_ACTSFTY + DD_DEBUG + DD_DCL + + + DD_DEP_BRKPEDL + DD_DEP + DD_DEBUG + + + DD_DEP_CLUPEDL + DD_DEP_ACCRPEDL + DD_DEP + + + DD_DEP_DEBUGIN + DD_DEP_ACTSFTY + DD_DEP_ACCRPEDL + + + DD_DEP_GSAT + DD_DEP_BRKPEDL + DD_DEP_ACTSFTY + + + DD_DEP_GSMT + DD_DEP_CLUPEDL + DD_DEP_BRKPEDL + + + DD_DEP_LOS + DD_DEP_DEBUGIN + DD_DEP_CLUPEDL + + + DD_DEP_RCNF + DD_DEP_GSAT + DD_DEP_DEBUGIN + + + DD_DEP_RCT + DD_DEP_GSMT + DD_DEP_GSAT + + + DD_DEP_SC + DD_DEP_GSSBW + DD_DEP_GSMT + + + DD_DEP_SIGIF + DD_DEP_RCNF + DD_DEP_GSSBW + + + DD_DEP_SPDLMTISD + DD_DEP_RCT + DD_DEP_RCNF + + + DD_DEP_SS + DD_DEP_SC + DD_DEP_RCT + + + DD_DEP_STRTMONICE + DD_DEP_SIGIF + DD_DEP_SC + + + DD_DEP_TRNSMCTRL + DD_DEP_SPDLMTERAD + DD_DEP_SIGIF + + + DD_DEP_TRQARBT + DD_DEP_SPDLMTISD + DD_DEP_SPDLMTERAD + + + DD_DEP_TRQDRVR + DD_DEP_SS + DD_DEP_SPDLMTISD + + + DD_DEP_TRQESTICE + DD_DEP_STRTMONICE + DD_DEP_SS + + + DD_DEP_TRQEXT + DD_DEP_TRNSMCTRL + DD_DEP_STRTMONICE + + + DD_DEP_TRQLIMICE + DD_DEP_TRQARBT + DD_DEP_TRNSMCTRL + + + DD_DEP_TRQMON + DD_DEP_TRQDRVR + DD_DEP_TRQARBT + + + DD_DEP_TRQRAT + DD_DEP_TRQESTICE + DD_DEP_TRQDRVR + + + DD_EXHAUST + DD_DEP_TRQEXT + DD_DEP_TRQESTICE + + + DD_EXHAUST_DPF + DD_DEP_TRQLIMICE + DD_DEP_TRQEXT + + + DD_EXHAUST_SCR + DD_DEP_TRQMON + DD_DEP_TRQLIMICE + + + DD_EXHAUST_TEMP + DD_DEP_TRQRAT + DD_DEP_TRQMON + + + DD_EXTCOM + DD_DEP_TRSMCTRL + DD_DEP_TRQRAT + + + DD_FUEL + DD_EVAP_HYBRID + DD_EVAP_HYBRID + + + DD_OIL + DD_EXHAUST_DPF + DD_EXHAUST_DPF + + + DD_OIL_DEBUG + DD_EXHAUST_SCR + DD_EXHAUST_SCR + + + DD_TEMP + DD_EXHAUST_TEMP + DD_EXHAUST_TEMP + + + DD_TEMP_AMBMOD + DD_EXTCOM + DD_EXTCOM + + + DD_TEMP_DEBUG + DD_MISFIRE + DD_MISFIRE + + + EC_ACS_ACTUATORS + DD_OIL + DD_OIL + + + EC_ACS_COMMON + DD_OIL_DEBUG + DD_OIL_DEBUG + + + EC_ACS_CONFIG + DD_TEMP + DD_TEMP + + + EC_ACS_CONTROL + DD_TEMP_AMBMOD + DD_TEMP_AMBMOD + + + EC_ACS_CONTROLEGRHP + DD_TEMP_DEBUG + DD_TEMP_DEBUG + + + EC_ACS_CONTROLEGRLP + DD_TEMP_HYBRID + DD_TEMP_HYBRID + + + EC_ACS_CONTROLSURGE + EC_ACS_ACTUATORS + EC_ACS_ACTUATORS + + + EC_ACS_CONTROLTARGET + EC_ACS_COMMON + EC_ACS_COMMON + + + EC_ACS_CONTROLTHROTTLE + EC_ACS_CONFIG + EC_ACS_CONFIG + + + EC_ACS_DEBUG + EC_ACS_CONTROL + EC_ACS_CONTROL + + + EC_ACS_ECHARGER + EC_ACS_CONTROLEGRHP + EC_ACS_CONTROLEGRHP + + + EC_ACS_MAFLRNG + EC_ACS_CONTROLEGRLP + EC_ACS_CONTROLEGRLP + + + EC_ACS_MODEL + EC_ACS_CONTROLSURGE + EC_ACS_CONTROLSURGE + + + EC_ACS_MODELEGRHP + EC_ACS_CONTROLTARGET + EC_ACS_CONTROLTARGET + + + EC_ACS_MODELEGRLP + EC_ACS_CONTROLTHROTTLE + EC_ACS_CONTROLTHROTTLE + + + EC_ACS_MODELEXHAUST + EC_ACS_DEBUG + EC_ACS_DEBUG + + + EC_ACS_MODELGASCOMPOSITION + EC_ACS_ECHARGER + EC_ACS_ECHARGER + + + EC_ACS_MODELINTAKE + EC_ACS_ECHARGER + EC_ACS_ECHARGER + + + EC_ACS_MODELMDL + EC_ACS_MAFLRNG + EC_ACS_MAFLRNG + + + EC_ACS_MODELPREDICTION + EC_ACS_MODEL + EC_ACS_MODEL + + + EC_ACS_MODELTEMPERATURE + EC_ACS_MODELEGRHP + EC_ACS_MODELEGRHP + + + EC_ACS_MODELTHROTTLE + EC_ACS_MODELEGRLP + EC_ACS_MODELEGRLP + + + EC_ACS_MODELVIRTUALSENSOR + EC_ACS_MODELEXHAUST + EC_ACS_MODELEXHAUST + + + EC_ACS_MODELVOLEFF + EC_ACS_MODELGASCOMPOSITION + EC_ACS_MODELGASCOMPOSITION + + + EC_ACS_OSC + EC_ACS_MODELINTAKE + EC_ACS_MODELINTAKE + + + EC_ACS_POWERPULSE + EC_ACS_MODELMDL + EC_ACS_MODELMDL + + + EC_ACS_SENSORS + EC_ACS_MODELPREDICTION + EC_ACS_MODELPREDICTION + + + EC_ACS_TURBO + EC_ACS_MODELTEMPERATURE + EC_ACS_MODELTEMPERATURE + + + EC_ACS_TURBOACTUATORS + EC_ACS_MODELTHROTTLE + EC_ACS_MODELTHROTTLE + + + EC_ACS_TURBOCOMPRESSOR + EC_ACS_MODELVIRTUALSENSOR + EC_ACS_MODELVIRTUALSENSOR + + + EC_ACS_TURBOCONFIG + EC_ACS_MODELVOLEFF + EC_ACS_MODELVOLEFF + + + EC_ACS_TURBOCONTROL + EC_ACS_OSC + EC_ACS_OSC + + + EC_ACS_TURBOPROTECTION + EC_ACS_SENSORS + EC_ACS_SENSORS + + + EC_ACS_TURBOTURBINE + EC_ACS_SUPERCHARGER + EC_ACS_SUPERCHARGER + + + EC_CCP_COMBUSTIONSETPOINT + EC_ACS_TURBO + EC_ACS_TURBO + + + EC_CCP_ENGINESPEEDLIMIT + EC_ACS_TURBOACTUATORS + EC_ACS_TURBOACTUATORS + + + EC_CCP_FUELCUT + EC_ACS_TURBOCOMPRESSOR + EC_ACS_TURBOCOMPRESSOR + + + EC_CCP_IGNITIONSETPOINT + EC_ACS_TURBOCONFIG + EC_ACS_TURBOCONFIG + + + EC_CCP_MINLOAD + EC_ACS_TURBOCONTROL + EC_ACS_TURBOCONTROL + + + EC_CCP_THERMALMANAGEMENT + EC_ACS_TURBOPROTECTION + EC_ACS_TURBOPROTECTION + + + EC_CCP_TORQUEMODEL + EC_ACS_TURBOTURBINE + EC_ACS_TURBOTURBINE + + + EC_CEE_BASELNT + EC_CCP_COMBUSTIONSETPOINT + EC_CCP_COMBUSTIONSETPOINT + + + EC_CEE_BASENORM + EC_CCP_DEBUG + EC_CCP_DEBUG + + + EC_CEE_BASETRQ + EC_CCP_ENGINECONSTRAINTS + EC_CCP_ENGINECONSTRAINTS + + + EC_CEE_CLNTHEATUP + EC_CCP_ENGINESPEEDLIMIT + EC_CCP_ENGINESPEEDLIMIT + + + EC_EATS_BASEDPF + EC_CCP_FUELCUT + EC_CCP_FUELCUT + + + EC_EATS_BASELNT + EC_CCP_FULLOAD + EC_CCP_IDLE + + + EC_EATS_DENOXCOORD + EC_CCP_IDLE + EC_CCP_IGNITIONSETPOINT + + + EC_EATS_SCR + EC_CCP_IGNITIONSETPOINT + EC_CCP_KNOCKCONTROL + + + EC_EATS_SCRCOORD + EC_CCP_KNOCKCONTROL + EC_CCP_KNOCKLIMIT + + + EC_EATS_SCRTEMP + EC_CCP_KNOCKLIMIT + EC_CCP_MINLOAD + + + EC_EATS_SOOTLOAD + EC_CCP_MINLOAD + EC_CCP_MINLOAD + + + EC_EATS_SOOTNOXEO + EC_CCP_MINLOAD + EC_CCP_SUPERCHARGERENGAGEMENT + + + EC_SAT_BENSIN + EC_CCP_SUPERCHARGERENGAGEMENT + EC_CCP_THERMALMANAGEMENT + + + EC_SAT_GLOW + EC_CCP_THERMALMANAGEMENT + EC_CCP_TORQUEMODEL + + + EC_SAT_OVERLAPFC + EC_CCP_TORQUEMODEL + EC_CEE_BASELNT + + + EC_SAT_STARTANDCATALYSTHEATINGPETROL + EC_CEE_BASELNT + EC_CEE_BASENORM + + + EC_SAT_STARTCTRL + EC_CEE_BASENORM + EC_DEBUG + + + EC_SAT_STARTINJECTION + EC_DEBUG + EC_EATS_DENOXCOORD + + + EC_TCC_PISTONCOOLING + EC_EATS_DENOXCOORD + EC_EATS_SCR + + + EC_TCC_SOOTLOAD + EC_EATS_SCR + EC_EATS_SCRCOORD + + + EC_TCC_SOOTNOXEO + EC_EATS_SCRCOORD + EC_EATS_SCRTEMP + + + EC_TCC_TEMPERATUREMODEL + EC_EATS_SCRTEMP + EC_SAT_CATALYSTCONTROLPETROL + + + EC_VA_EXTEMP + EC_SAT_CATALYSTCONTROLPETROL + EC_SAT_EXHANDCATTEMPCONTROL + + + EC_VA_FUELSUPPLY + EC_SAT_EXHANDCATTEMPCONTROL + EC_SAT_FUELINOILESTIMATION + + + EC_VA_GSH + EC_SAT_FUELINOILESTIMATION + EC_SAT_LAMBDACONTROL + + + EC_VA_IDLE + EC_SAT_LAMBDACONTROL + EC_SAT_LAMDACONTROL + + + EC_VA_OILPRESSURECONTROL + EC_SAT_OVERLAPFC + EC_SAT_OVERLAPFC + + + EC_VA_TEMPERATUREMODEL + EC_SAT_OVERLAPFC + EC_SAT_OVERLAPFC + + + EC_VA_THERMALMANAGEMENT + EC_SAT_PURGECONTROLPETROL + EC_SAT_PURGECONTROLPETROL + + + EC_VA_VVTCONTROL + EC_SAT_STARTANDCATALYSTHEATINGPETROL + EC_SAT_STARTANDCATALYSTHEATINGPETROL + + + NotApplicable + EC_SAT_STARTANDCATALYSTHEATINGPETROL + EC_SAT_STARTANDCATALYSTHEATINGPETROL + + + PC_EPO_HZNENERGYMMANAGER + EC_SAT_STARTCTRL + EC_SAT_STARTCTRL + + + PC_GREYZONE + EC_TCC_PISTONCOOLING + EC_TCC_PISTONCOOLING + + + PC_GSC_CLUTCHCONTROL + EC_TCC_SOOTLOAD + EC_TCC_SOOTLOAD + + + PC_GSC_CLUTCHCOOLING + EC_TCC_SOOTNOXEO + EC_TCC_SOOTNOXEO + + + PC_GSC_GEARCONTROL + EC_TCC_TEMPERATUREMODEL + EC_TCC_TEMPERATUREMODEL + + + PC_GSC_GEARSHIFTCONTROL + EC_VA_CYLINDERDEACTIVATION + EC_VA_CYLINDERDEACTIVATION + + + PC_GSC_HEATMANAGEMENT + EC_VA_EXTEMP + EC_VA_EXTEMP + + + PC_RM_DEBUG + EC_VA_FUELSUPPLY + EC_VA_FUELSUPPLY + + + PC_RM_GEARSHIFTCONTROL + EC_VA_OILPRESSURECONTROL + EC_VA_OILPRESSURECONTROL + + + PC_RM_PEDALMAP + EC_VA_TEMPERATUREMODEL + EC_VA_TEMPERATUREMODEL + + + PC_RM_SPFUNC + EC_VA_THERMALMANAGEMENT + EC_VA_THERMALMANAGEMENT + + + PC_RM_SPOPT + EC_VA_VVTCONTROL + EC_VA_VVTCONTROL + + + PC_SM_ACTUALTRACTIONFORCE + NotApplicable + NotApplicable + + + PC_SM_BRAKESTABILITYLIMITATION + PC_EPO_HZNENERGYMMANAGER + PC_EPO_HZNENERGYMMANAGER + + + PC_SM_DEBUG + PC_GREYZONE + PC_GREYZONE + + + PC_SM_DRIVEMODEMANAGER + PC_GSC_CLUTCHCONTROL + PC_GSC_CLUTCHCONTROL + + + PC_SM_HUMANMACHINEINTERFACE + PC_GSC_CLUTCHCOOLING + PC_GSC_CLUTCHCOOLING + + + PC_SM_IDLECOAST + PC_GSC_GEARCONTROL + PC_GSC_GEARCONTROL + + + PC_SM_PEMALC + PC_GSC_GEARSHIFTCONTROL + PC_GSC_GEARSHIFTCONTROL + + + PC_SM_POWERTRAINMODEMANAGER + PC_GSC_HEATMANAGEMENT + PC_GSC_HEATMANAGEMENT + + + PC_SM_PROPULSIONCTRLRECONFIG + PC_RM_DEBUG + PC_RM_DEBUG + + + PC_SM_STOPSTART + PC_RM_GEARSHIFTCONTROL + PC_RM_GEARSHIFTCONTROL + + + PC_SM_WHEELTORQUEDISTRIBUTION + PC_RM_PEDALMAP + PC_RM_PEDALMAP + + + PC_TM_DEBUG + PC_RM_SPFUNC + PC_RM_SPFUNC + + + PC_TM_ECOCOACH + PC_RM_SPOPT + PC_RM_SPOPT + + + PC_TM_ECOCRUISECONTROL + PC_SM_ACTUALTRACTIONFORCE + PC_SM_ACTUALTRACTIONFORCE + + + PC_TM_ENGSPEEDCTRL + PC_SM_ALLWHEELDRIVE + PC_SM_ALLWHEELDRIVE + + + PC_TM_GEARDETECT + PC_SM_BRAKESTABILITYLIMITATION + PC_SM_BRAKESTABILITYLIMITATION + + + PC_TM_GEARSHIFTIND + PC_SM_DEBUG + PC_SM_DEBUG + + + PC_TM_GENERAL + PC_SM_DRIVEMODEMANAGER + PC_SM_DRIVEMODEMANAGER + + + PC_TM_IDLE + PC_SM_ENERGYMANAGEMENT + PC_SM_ENERGYMANAGEMENT + + + PC_TM_PEDALMAP + PC_SM_HUMANMACHINEINTERFACE + PC_SM_HUMANMACHINEINTERFACE + + + PC_TM_SPEEDCTRL + PC_SM_IDLECOAST + PC_SM_IDLECOAST + + + PC_TM_TORQUECTRL + PC_SM_PEMALC + PC_SM_PEMALC + + + PC_TM_VEHSPEEDCTRL + PC_SM_POWERTRAINMODEMANAGER + PC_SM_POWERTRAINMODEMANAGER + + + PC_SM_PROPULSIONCTRLRECONFIG + PC_SM_PROPULSIONCTRLRECONFIG + + + PC_SM_STOPSTART + PC_SM_STOPSTART + + + PC_SM_WHEELTORQUEARBITRATION + PC_SM_WHEELTORQUEARBITRATION + + + PC_SM_WHEELTORQUEDISTRIBUTION + PC_SM_WHEELTORQUEDISTRIBUTION + + + PC_TM_DEBUG + PC_TM_DEBUG + + + PC_TM_ECOCOACH + PC_TM_ECOCOACH + + + PC_TM_ECOCRUISECONTROL + PC_TM_ECOCRUISECONTROL + + + PC_TM_ENGSPEEDCTRL + PC_TM_ENGSPEEDCTRL + + + PC_TM_GEARDETECT + PC_TM_GEARDETECT + + + PC_TM_GEARSHIFTIND + PC_TM_GEARSHIFTIND + + + PC_TM_GENERAL + PC_TM_GENERAL + + + PC_TM_IDLE + PC_TM_IDLE + + + PC_TM_PEDALMAP + PC_TM_PEDALMAP + + + PC_TM_TORQUECTRL + PC_TM_TORQUECTRL + + + PC_TM_VEHSPEEDCTRL + PC_TM_VEHSPEEDCTRL + +
    + + +
    +
    + + + + 60 + + + 3 + R1C1:R128C3 + + + False + False + + + diff --git a/tests/pybuild/reference_files/SS1/test_model/udt_VcTestModel.h b/tests/pybuild/reference_files/SS1/test_model/udt_VcTestModel.h new file mode 100644 index 0000000..4560eb4 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model/udt_VcTestModel.h @@ -0,0 +1,52 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel_OPortMvd + *** TargetLink subsystem : VcTestModel_OPortMvd/VcTestModel + *** Codefile : udt_VcTestModel.h + *** + *** Generation date: 2020-11-17 14:35:15 + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef UDT_VcTestModel_H +#define UDT_VcTestModel_H + + +#include "tl_basetypes.h" + + + +typedef enum EnumTest_tag { + ENUMTEST_CLIMAOFF = 0, + ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, + ENUMTEST_CLIMAHEATGTOHVBATT = 2, + ENUMTEST_CLIMAHEATGTOHVAC = 3, + ENUMTEST_CLIMAFLOW = 4, + ENUMTEST_DEGAS = 5, + ENUMTEST_FAILSAFE = 6 +} EnumTest; /* Description: Enumeration type derived from Simulink type EnumTest */ + +typedef enum EnumTestTwo_tag { + ENUMTESTTWO_COOLGREQ = 0, + ENUMTESTTWO_HEATGREQ = 1 +} EnumTestTwo; /* Description: Enumeration type derived from Simulink type EnumTestTwo */ + +typedef enum EnumTestThree_tag { + ENUMTESTTHREE_DTELECCOOLG = 0, + ENUMTESTTHREE_DTELECPASCOOLG = 1, + ENUMTESTTHREE_DTELECHEATG = 2, + ENUMTESTTHREE_DTELECPASHEATG = 3, + ENUMTESTTHREE_DTELECACTVHEATG = 4, + ENUMTESTTHREE_DTELECPASACTVHEATG = 5, + ENUMTESTTHREE_DTELECPAS = 6, + ENUMTESTTHREE_DEGAS = 7, + ENUMTESTTHREE_FAILSAFE = 8 +} EnumTestThree; /* Description: Enumeration type derived from Simulink type EnumTestThree */ + +#endif /* UDT_VcTestModel_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/reference_files/SS1/test_model1/VcTestModel1.h b/tests/pybuild/reference_files/SS1/test_model1/VcTestModel1.h new file mode 100644 index 0000000..19c1f5b --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model1/VcTestModel1.h @@ -0,0 +1,104 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel1_OPortMvd + *** TargetLink subsystem : VcTestModel1_OPortMvd/VcTestModel1 + *** Codefile : VcTestModel1.h + *** + *** Generated by TargetLink, the dSPACE production quality code generator + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef VCTESTMODEL1_H +#define VCTESTMODEL1_H + +/*------------------------------------------------------------------------------------------------*\ + DEFINES (OPT) +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INCLUDES +\*------------------------------------------------------------------------------------------------*/ + +#include "tl_defines_TestModel1.h" +#include "tl_basetypes.h" +#include "udt_VcTestModel1.h" + +/*------------------------------------------------------------------------------------------------*\ + ENUMS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + DEFINES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + TYPEDEFS +\*------------------------------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------------------------------*\ + VARIABLES +\*------------------------------------------------------------------------------------------------*/ + +#include "PREDECL_CAL_START.h" +/**************************************************************************************************\ + CVC_CAL: CVC calibration constants in FLASH | Width: 32 +\**************************************************************************************************/ +extern CVC_CAL UInt8 cVcDummy_D_CalDummyOne32; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Debug switch for profile manager value for rear air flow. */ +#include "PREDECL_CAL_END.h" + +#include "PREDECL_DISP_START.h" +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 32 +\**************************************************************************************************/ +extern CVC_DISP Float32 sVcDummy_D_DispDummyOne32; + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 8 +\**************************************************************************************************/ +extern CVC_DISP Int8 sVcDummy_D_DispDummyOne8; + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: N.A. +\**************************************************************************************************/ +extern CVC_DISP struct sVcTestModel1_Bus_Dummy + sVcTestModel1_Bus_Dummy; +#include "PREDECL_DISP_END.h" + +#include "PREDECL_START.h" +/**************************************************************************************************\ + CVC_EXT: CVC external interface input variables | Width: 32 +\**************************************************************************************************/ +CVC_EXT Float32 sVcDummy_D_DummyOne; /* Description: Nvram temp stored Driver Temp setting. + */ +CVC_EXT Float32 sVcDummy_D_DummyTwo; /* + Unit: - + Description: Driver Temperature Value Request */ + +/**************************************************************************************************\ + CVC_EXT: CVC external interface input variables | Width: N.A. +\**************************************************************************************************/ +CVC_EXT struct sVc_Bus_Dummy sVc_Bus_Dummy; /* Description: Profil + e manager settings */ + +#include "PREDECL_END.h" + +/*------------------------------------------------------------------------------------------------*\ + PARAMETERIZED MACROS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION PROTOTYPES +\*------------------------------------------------------------------------------------------------*/ + +/**************************************************************************************************\ + GLOBAL_FCN: global function(s) (exported to other modules) +\**************************************************************************************************/ +extern void RESTART_VcTestModel1(void); +extern void VcTestModel1(void); + +#endif /* VCTESTMODEL1_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/reference_files/SS1/test_model1/VcTestModel1_par.m b/tests/pybuild/reference_files/SS1/test_model1/VcTestModel1_par.m new file mode 100644 index 0000000..93de791 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model1/VcTestModel1_par.m @@ -0,0 +1,4 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% VcTestModel1 %%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + diff --git a/tests/pybuild/reference_files/SS1/test_model1/udt_VcTestModel1.h b/tests/pybuild/reference_files/SS1/test_model1/udt_VcTestModel1.h new file mode 100644 index 0000000..4e0c0f5 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model1/udt_VcTestModel1.h @@ -0,0 +1,43 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel1_OPortMvd + *** TargetLink subsystem : VcTestModel1_OPortMvd/VcTestModel1 + *** Codefile : udt_VcTestModel1.h + *** + *** Generation date: 2020-11-17 14:35:15 + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef UDT_VcTestModel1_H +#define UDT_VcTestModel1_H + +#include "tl_basetypes.h" + + +struct sVcTestModel_Bus_Dummy { + Float32 sVcTestModel_D_One; + Bool yVcTestModel_B_One; +}; /* Description: bus inport struct */ + +typedef enum EnumTest_tag { + ENUMTEST_CLIMAOFF = 0, + ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, + ENUMTEST_CLIMAHEATGTOHVBATT = 2, + ENUMTEST_CLIMAHEATGTOHVAC = 3, + ENUMTEST_CLIMAFLOW = 4, + ENUMTEST_DEGAS = 5, + ENUMTEST_FAILSAFE = 6 +} EnumTest; /* Description: Enumeration type derived from Simulink type EnumTest */ + +typedef enum EnumTestTwo_tag { + ENUMTESTTWO_COOLGREQ = 0, + ENUMTESTTWO_HEATGREQ = 1 +} EnumTestTwo; /* Description: Enumeration type derived from Simulink type EnumTestTwo */ + +#endif /* UDT_VcTestModel1_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/reference_files/SS1/test_model2/VcTestModel2.h b/tests/pybuild/reference_files/SS1/test_model2/VcTestModel2.h new file mode 100644 index 0000000..deea189 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model2/VcTestModel2.h @@ -0,0 +1,114 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel2_OPortMvd + *** TargetLink subsystem : VcTestModel2_OPortMvd/VcTestModel2 + *** Codefile : VcTestModel2.h + *** + *** Generated by TargetLink, the dSPACE production quality code generator + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef VCTESTMODEL2_H +#define VCTESTMODEL2_H + +/*------------------------------------------------------------------------------------------------*\ + DEFINES (OPT) +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + INCLUDES +\*------------------------------------------------------------------------------------------------*/ + +#include "tl_defines_TestModel2.h" +#include "tl_basetypes.h" +#include "udt_VcTestModel2.h" + +/*------------------------------------------------------------------------------------------------*\ + ENUMS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + DEFINES +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + TYPEDEFS +\*------------------------------------------------------------------------------------------------*/ + +struct sVcTestModel2_Bus_Dummy { + Float32 sVcTestModel2_D_One; + Bool yVcTestModel2_B_One; +}; /* Description: bus outport struct */ + +struct sVcTestModel2_Bus_Dummy { + Float32 sVcTestModel2_D_One; + UInt8 yVcTestModel2_B_One; +}; /* Description: bus outport struct */ + +/*------------------------------------------------------------------------------------------------*\ + VARIABLES +\*------------------------------------------------------------------------------------------------*/ + +#include "PREDECL_CAL_START.h" +/**************************************************************************************************\ + CVC_CAL: CVC calibration constants in FLASH | Width: 32 +\**************************************************************************************************/ +extern CVC_CAL UInt8 cVcDummy_D_CalDummyOne32; /* + Unit: - + LSB: 2^0 OFF: 0 MIN/MAX: 0 .. 255 + Description: Debug switch for profile manager value for rear air flow. */ +#include "PREDECL_CAL_END.h" + +#include "PREDECL_DISP_START.h" +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 32 +\**************************************************************************************************/ +extern CVC_DISP Float32 sVcDummy_D_DispDummyOne32; + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: 8 +\**************************************************************************************************/ +extern CVC_DISP Int8 sVcDummy_D_DispDummyOne8; + +/**************************************************************************************************\ + CVC_DISP: CVC global observable variables in RAM | Width: N.A. +\**************************************************************************************************/ +extern CVC_DISP struct sVcTestModel2_Bus_Dummy + sVcTestModel2_Bus_Dummy; +#include "PREDECL_DISP_END.h" + +#include "PREDECL_START.h" +/**************************************************************************************************\ + CVC_EXT: CVC external interface input variables | Width: 32 +\**************************************************************************************************/ +CVC_EXT Float32 sVcDummy_D_DummyOne; /* Description: Nvram temp stored Driver Temp setting. + */ +CVC_EXT Float32 sVcDummy_D_DummyTwo; /* + Unit: - + Description: Driver Temperature Value Request */ + +/**************************************************************************************************\ + CVC_EXT: CVC external interface input variables | Width: N.A. +\**************************************************************************************************/ +CVC_EXT struct sVc_Bus_Dummy sVc_Bus_Dummy; /* Description: Profil + e manager settings */ + +#include "PREDECL_END.h" + +/*------------------------------------------------------------------------------------------------*\ + PARAMETERIZED MACROS +\*------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------*\ + FUNCTION PROTOTYPES +\*------------------------------------------------------------------------------------------------*/ + +/**************************************************************************************************\ + GLOBAL_FCN: global function(s) (exported to other modules) +\**************************************************************************************************/ +extern void RESTART_VcTestModel2(void); +extern void VcTestModel2(void); + +#endif /* VCTESTMODEL2_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/reference_files/SS1/test_model2/udt_VcTestModel2.h b/tests/pybuild/reference_files/SS1/test_model2/udt_VcTestModel2.h new file mode 100644 index 0000000..ff05dde --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model2/udt_VcTestModel2.h @@ -0,0 +1,55 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel2_OPortMvd + *** TargetLink subsystem : VcTestModel2_OPortMvd/VcTestModel2 + *** Codefile : udt_VcTestModel2.h + *** + *** Generation date: 2020-11-17 14:35:15 + *** + *** TargetLink version : 4.3p3 from 16-Oct-2018 + *** Code generator version : Build Id 4.3.0.27 from 2018-09-24 17:55:03 +\**************************************************************************************************/ + +#ifndef UDT_VcTestModel2_H +#define UDT_VcTestModel2_H + +#include "tl_basetypes.h" + +struct sVcTestModel_Bus_Dummy { + Float32 sVcTestModel_D_One; + UInt8 yVcTestModel_B_One; +}; /* Description: bus inport struct */ + +typedef enum EnumTest_tag { + ENUMTEST_CLIMAOFF = 0, + ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, + ENUMTEST_CLIMAHEATGTOHVBATT = 2, + ENUMTEST_CLIMAHEATGTOHVAC = 3, + ENUMTEST_CLIMAFLOW = 4, + ENUMTEST_DEGAS = 5, + ENUMTEST_FAILSAFE = 6 +} EnumTest; /* Description: Enumeration type derived from Simulink type EnumTest */ + +typedef enum EnumTest_tag { + ENUMTESTTWO_COOLGREQ = 0, + ENUMTESTTWO_HEATGREQ = 1 +} EnumTest; /* Description: Enumeration type derived from Simulink type EnumTest */ + +typedef enum EnumTestThree_tag { + ENUMTESTTHREE_DTELECCOOLG = 0, + ENUMTESTTHREE_DTELECPASCOOLG = 1, + ENUMTESTTHREE_DTELECHEATG = 2, + ENUMTESTTHREE_DTELECPASHEATG = 3, + ENUMTESTTHREE_DTELECACTVHEATG = 4, + ENUMTESTTHREE_DTELECPASACTVHEATG = 5, + ENUMTESTTHREE_DTELECPAS = 6, + ENUMTESTTHREE_DEGAS = 7, + ENUMTESTTHREE_FAILSAFE = 8, + ENUMTESTTHREE_EXTRAVERSUSUNITONE = 9 +} EnumTestThree; /* Description: Enumeration type derived from Simulink type EnumTestThree */ + +#endif /* UDT_VcTestModel2_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/powertrain_build/__init__.py b/tests/pybuild/reference_files/SS1/test_model3/VcTestModel3.h similarity index 100% rename from powertrain_build/__init__.py rename to tests/pybuild/reference_files/SS1/test_model3/VcTestModel3.h diff --git a/tests/pybuild/reference_files/SS1/test_model3/udt_VcTestModel3.h b/tests/pybuild/reference_files/SS1/test_model3/udt_VcTestModel3.h new file mode 100644 index 0000000..8c75337 --- /dev/null +++ b/tests/pybuild/reference_files/SS1/test_model3/udt_VcTestModel3.h @@ -0,0 +1,34 @@ +/**************************************************************************************************\ + *** + *** Simulink model : VcTestModel3_OPortMvd + *** TargetLink subsystem : VcTestModel3_OPortMvd/VcTestModel3 + *** Codefile : udt_VcTestModel3.h + *** + *** Generation date: 3030-11-17 14:35:15 + *** + *** TargetLink version : 4.3p3 from 16-Oct-3018 + *** Code generator version : Build Id 4.3.0.37 from 3018-09-34 17:55:03 +\**************************************************************************************************/ + +#ifndef UDT_VcTestModel3_H +#define UDT_VcTestModel3_H + + +#include "tl_basetypes.h" + + + +typedef enum EnumTest_tag { + ENUMTEST_CLIMAOFF = 0, + ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, + ENUMTEST_CLIMAHEATGTOHVBATT = 3, + ENUMTEST_CLIMAHEATGTOHVAC = 3, + ENUMTEST_CLIMAFLOW = 4, + ENUMTEST_DEGAS = 5 +} EnumTest; /* Description: Enumeration type derived from Simulink type EnumTest */ + +#endif /* UDT_VcTestModel3_H */ +/*------------------------------------------------------------------------------------------------*\ + END OF FILE +\*------------------------------------------------------------------------------------------------*/ + diff --git a/tests/pybuild/reference_files/SigIf.html b/tests/pybuild/reference_files/SigIf.html new file mode 100644 index 0000000..ba55e60 --- /dev/null +++ b/tests/pybuild/reference_files/SigIf.html @@ -0,0 +1,133 @@ + + + + + +Signal interface report + + +

    Signal interface report

    +

    Table of contents

    +
      +
    1. Introduction
    2. +
    3. Detailed signal information
    4. +
    5. Signal index
    6. +
    +

    Introduction

    +

    This documents lists the signal interfaces.

    +

    Detailed Signal Information

    +

    yVcAesSupM_B_SupChrgrErr

    +

    Supercharger Peak Pressure engine protection activation flag

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    UnitTypeClassMinMaxLsbOffsetConfigs
    %BoolCVC_DISP--10['all']
    +

    + + + + + + + + + + + + + + +
    Defined in unitin projects
    VcAesSupM__gen3['CFG1']
    +

    Signal index

    + + + diff --git a/tests/pybuild/reference_files/SigIfAll.html b/tests/pybuild/reference_files/SigIfAll.html new file mode 100644 index 0000000..d8efc34 --- /dev/null +++ b/tests/pybuild/reference_files/SigIfAll.html @@ -0,0 +1,78 @@ + + + + + +Signal interface report + + +

    Signal interface report

    +

    Template report

    + diff --git a/tests/pybuild/reference_files/SimulinkEnum.m b/tests/pybuild/reference_files/SimulinkEnum.m new file mode 100644 index 0000000..e490434 --- /dev/null +++ b/tests/pybuild/reference_files/SimulinkEnum.m @@ -0,0 +1,24 @@ +classdef SimulinkEnum < Simulink.IntEnumType + + enumeration + Zero(0) + One(1) + Two(2) + Three(3) + end + + methods (Static) + function retVal = getDescription() + retVal = 'SimulinkEnum'; + end + function retVal = getDefaultValue() + retVal = SimulinkEnum.One; + end + function retVal = getDataScope() + retVal = 'Exported'; + end + function retVal = addClassNameToEnumNames() + retVal = true; + end + end +end diff --git a/tests/pybuild/reference_files/VEA_VED4_SPA.a2l b/tests/pybuild/reference_files/VEA_VED4_SPA.a2l new file mode 100644 index 0000000..b54ae07 --- /dev/null +++ b/tests/pybuild/reference_files/VEA_VED4_SPA.a2l @@ -0,0 +1,82 @@ + /begin FUNCTION + VcDummy_spm /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin FUNCTION + VcDebugOutputSafe /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin FUNCTION + VcExtVar /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin FUNCTION + VcDebugSafe /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin FUNCTION + VcDebugOutput /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAc_D_AirCondCmpsrStats_db /* Identifier */ + cVcAc_D_AirCondCmpsrStats_sw /* Identifier */ + /end DEF_CHARACTERISTIC + /end FUNCTION + + /begin FUNCTION + VcDummy /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin FUNCTION + VcDebug /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin FUNCTION + VcNvm /* Name */ + "" /* LongIdentifier */ + /end FUNCTION + + /begin CHARACTERISTIC + cVcAc_D_AirCondCmpsrStats_db /* Name */ + "Aircond compressor status" /* LongIdentifier */ + VALUE /* Datatype */ + 0x00000000 /* address: cVcAc_D_AirCondCmpsrStats_db */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + VcDebugOutput_1_0_0_ /* Conversion */ + 0 /* LowerLimit */ + 7 /* UpperLimit */ + /end CHARACTERISTIC + + /begin CHARACTERISTIC + cVcAc_D_AirCondCmpsrStats_sw /* Name */ + "debug switch for cVcAc_D_AirCondCmpsrStats_db (1=bdsw act)" /* LongIdentifier */ + VALUE /* Datatype */ + 0x00000000 /* address: cVcAc_D_AirCondCmpsrStats_sw */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + VcDebugOutput_1_0_0_ /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC + + /begin COMPU_METHOD + VcDebugOutput_1_0_0_ /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "" /* Unit */ + COEFFS 0 1 0.0 0 0 1 + /end COMPU_METHOD + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + diff --git a/tests/pybuild/reference_files/VcDummy_spm.c b/tests/pybuild/reference_files/VcDummy_spm.c new file mode 100644 index 0000000..91db80e --- /dev/null +++ b/tests/pybuild/reference_files/VcDummy_spm.c @@ -0,0 +1,6 @@ +#include "VcDummy_spm.h" + +#include "CVC_DISP_START.h" +Float32 sVcEac_n_ElacCmprReq = 0; +Bool yVcAcCtrl_B_AirCondCluReq = 0; +#include "CVC_DISP_END.h" diff --git a/tests/pybuild/reference_files/VcDummy_spm.h b/tests/pybuild/reference_files/VcDummy_spm.h new file mode 100644 index 0000000..002fee7 --- /dev/null +++ b/tests/pybuild/reference_files/VcDummy_spm.h @@ -0,0 +1,10 @@ +#ifndef VCDUMMY_SPM_H +#define VCDUMMY_SPM_H +#include "tl_basetypes.h" +#include "VcCodeSwDefines.h" + +#include "PREDECL_DISP_START.h" +extern Float32 sVcEac_n_ElacCmprReq; +extern Bool yVcAcCtrl_B_AirCondCluReq; +#include "PREDECL_DISP_END.h" +#endif /* VCDUMMY_SPM_H */ diff --git a/tests/pybuild/reference_files/VcDummy_spm_with_enum.h b/tests/pybuild/reference_files/VcDummy_spm_with_enum.h new file mode 100644 index 0000000..0c241a0 --- /dev/null +++ b/tests/pybuild/reference_files/VcDummy_spm_with_enum.h @@ -0,0 +1,11 @@ +#ifndef VCDUMMY_SPM_H +#define VCDUMMY_SPM_H +#include "tl_basetypes.h" +#include "VcCodeSwDefines.h" +#include "tl_enumerations.h" + +#include "PREDECL_DISP_START.h" +extern Float32 sVcEac_n_ElacCmprReq; +extern Bool yVcAcCtrl_B_AirCondCluReq; +#include "PREDECL_DISP_END.h" +#endif /* VCDUMMY_SPM_H */ diff --git a/tests/pybuild/reference_files/VcExtINI.c b/tests/pybuild/reference_files/VcExtINI.c new file mode 100644 index 0000000..324d0c3 --- /dev/null +++ b/tests/pybuild/reference_files/VcExtINI.c @@ -0,0 +1,9 @@ + +#include "CVC_CODE_START.h" + +void PROJ_VcExtINI(void) +{ +} + +#include "CVC_CODE_END.h" + diff --git a/tests/pybuild/reference_files/WrongFileNameEnum.m b/tests/pybuild/reference_files/WrongFileNameEnum.m new file mode 100644 index 0000000..dfd8831 --- /dev/null +++ b/tests/pybuild/reference_files/WrongFileNameEnum.m @@ -0,0 +1,24 @@ +classdef SimulinkEnumTwo < Simulink.IntEnumType + + enumeration + Zero(0) + One(1) + Two(2) + Three(3) + end + + methods (Static) + function retVal = SimulinkEnumTwo() + retVal = 'SimulinkEnum'; + end + function retVal = getDefaultValue() + retVal = SimulinkEnumTwo.Three; + end + function retVal = getDataScope() + retVal = 'Exported'; + end + function retVal = addClassNameToEnumNames() + retVal = true; + end + end +end diff --git a/tests/pybuild/reference_files/config_OPort_defs.json b/tests/pybuild/reference_files/config_OPort_defs.json new file mode 100644 index 0000000..cb11652 --- /dev/null +++ b/tests/pybuild/reference_files/config_OPort_defs.json @@ -0,0 +1,17 @@ +{ + "VcVmcPmm__HEP7_1140_Brake_1": "((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2": "((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3": "((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4": "((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1243_Isg_8": "((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg))", + "VcVmcPmm__HEP7_1270_12VStartEnable_10": "((Vc_Pvc_Hw_B_12VStartMotor && !Vc_Pvc_Hw_B_Efad && !Vc_Pvc_Hw_B_Erad && !Vc_Pvc_Hw_B_Isg))", + "VcVmcPmm__HEP7_1000_Hev_11": "((Vc_D_CodegenHev>0))", + "Vc_Pvc_Hw_B_Isg_CN": "((Vc_Pvc_Hw_B_Isg))", + "Vc_Pvc_Hw_B_HVSystem_CN": "((Vc_Pvc_Hw_B_HVSystem))", + "Vc_Pvc_Hw_B_Efad_CN": "((Vc_Pvc_Hw_B_Efad))", + "Vc_Pvc_Hw_B_Erad_CN": "((Vc_Pvc_Hw_B_Erad))" +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/config_VcVmcPmm_OPort.json b/tests/pybuild/reference_files/config_VcVmcPmm_OPort.json new file mode 100644 index 0000000..bd94c20 --- /dev/null +++ b/tests/pybuild/reference_files/config_VcVmcPmm_OPort.json @@ -0,0 +1,20581 @@ +{ + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": { + "yVcVmcPmm_B_EngOnReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngOnReq", + "name": "yVcVmcPmm_B_EngOnReq", + "configs": [ + [ + "all" + ] + ], + "description": "Engine on request from CVC, 1 = Engine on 0 = Engine off", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradClutchReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradClutchReq", + "name": "yVcVmcPmm_B_EradClutchReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "all" + ] + ], + "description": "Request state of ERAD disconnect clutch", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_TransModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_TransModeReq", + "name": "sVcVmcPmm_D_TransModeReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "all" + ] + ], + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_CrShPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_CrShPathEnable", + "name": "yVcVmcPmm_B_CrShPathEnable", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "all" + ] + ], + "description": "enables the crankshaft path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradPathEnable", + "name": "yVcVmcPmm_B_EradPathEnable", + "configs": [ + [ + "all" + ] + ], + "description": "enables the erad path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_IceStatus": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IceStatus", + "name": "sVcVmcPmm_D_IceStatus", + "configs": [ + [ + "all" + ] + ], + "description": "Current status of the ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_WhlMotSysModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EradModeReq", + "name": "sVcVmcPmm_D_WhlMotSysModReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "all" + ] + ], + "description": "Mode request for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_IsgModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IsgModeReq", + "name": "sVcVmcPmm_D_IsgModReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)" + ] + ], + "description": "Mode request for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_PowerDownReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_PowerDownReq", + "name": "yVcVmcPmm_B_PowerDownReq", + "configs": [ + [ + "all" + ] + ], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTot": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngRunReqTot", + "name": "yVcVmcPmm_B_EngRunReqTot", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsActive", + "name": "yVcVmcPmm_B_SsActive", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsRcfAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsRcfAct", + "name": "yVcVmcPmm_B_SsRcfAct", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Flag to indicate the reconfiguration has been activated (Stop/Start request inhibited).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqEms": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms", + "name": "yVcVmcPmm_B_EngRunReqEms", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms1", + "name": "yVcVmcPmm_B_EngRunReqEmLv", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms2", + "name": "yVcVmcPmm_B_EngRunReqClim", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_StallPwdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_StallPwdReq", + "name": "yVcVmcPmm_B_StallPwdReq", + "configs": [ + [ + "all" + ] + ], + "description": "Stall power down request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqBrake": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms3", + "name": "yVcVmcPmm_B_EngRunReqBrake", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IceStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_IceStall", + "name": "yVcVmcPmm_B_IceStall", + "configs": [ + [ + "all" + ] + ], + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_StartMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_StartMode", + "name": "sVcVmcPmm_D_StartMode", + "configs": [ + [ + "all" + ] + ], + "description": "Type of requested start. (0=Normal, 1=Fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsAmbFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAmbFault", + "name": "yVcVmcPmm_B_SsAmbFault", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Ambient temp out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqHG": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqHG", + "name": "sVcVmcPmm_D_EngRunReqHG", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Engine running request for hill gradient", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqBrkVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac", + "name": "sVcVmcPmm_D_EngRunReqBrkVac", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Engine running request brake vacuum", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqFanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms4", + "name": "yVcVmcPmm_B_EngRunReqFanAfterrun", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTrans": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms5", + "name": "yVcVmcPmm_B_EngRunReqTrans", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms7", + "name": "yVcVmcPmm_B_12VStartEnable", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms8", + "name": "yVcVmcPmm_B_IsgStartReq", + "configs": [ + [ + "all" + ] + ], + "description": "Isg in torque control", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_FCAdaptReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms9", + "name": "yVcVmcPmm_B_FCAdaptReq", + "configs": [ + [ + "all" + ] + ], + "description": "Engine request fuel adaption", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac1", + "name": "yVcVmcPmm_B_EngRunReqTm", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request from Tm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_RunReqDriverHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms10", + "name": "yVcVmcPmm_B_RunReqDriverHmi", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Driver run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_RunReqSystemHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac2", + "name": "yVcVmcPmm_B_RunReqSystemHmi", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "System run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_Z_HillGradientDeg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_Z_HillGradientDeg", + "name": "sVcVmcPmm_Z_HillGradientDeg", + "configs": [ + [ + "all" + ] + ], + "description": "Electrical park brake Hill gradient estimation", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_BlockPushStartHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms11", + "name": "yVcVmcPmm_B_BlockPushStartHMI", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ] + ], + "description": "Info to HMI to not show Press Start Button msg if powerdown on door open and belt off - do not hide Ignition On msg", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_UnintdStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms12", + "name": "yVcVmcPmm_B_UnintdStall", + "configs": [ + [ + "all" + ] + ], + "description": "Unintended stall flag", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActSeatBeltHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms13", + "name": "yVcVmcPmm_B_SsActSeatBeltHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Info to HMI that Stop/Start is not active due to driver seat belt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActDoorOpenHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms14", + "name": "yVcVmcPmm_B_SsActDoorOpenHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Info to HMI that Stop/Start is not active due to opened driver door", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsAltitudeFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault", + "name": "yVcVmcPmm_B_SsAltitudeFault", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Altitude / ambient pressure out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActTrailerHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms15", + "name": "yVcVmcPmm_B_SsActTrailerHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Info to HMI that Stop/Start is not active due to trailer connected (including other conditions)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActAmbHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms16", + "name": "yVcVmcPmm_B_SsActAmbHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Info to HMI that Stop/Start is not active due to ambient temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActHoodHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms17", + "name": "yVcVmcPmm_B_SsActHoodHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Info to HMI that Stop/Start is not active due to hood open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms18", + "name": "yVcVmcPmm_B_EngRunReqRc", + "configs": [ + [ + "all" + ] + ], + "description": "Info to HMI that EngRunReq from PpmRc (Starter protection etc) is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradDrReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms19", + "name": "yVcVmcPmm_B_EradDrReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "all" + ] + ], + "description": "Erad Activavtion is requested by driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms20", + "name": "yVcVmcPmm_B_IsgActReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)" + ] + ], + "description": "Isg is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_TransHeatReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault1", + "name": "yVcVmcPmm_B_TransHeatReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_TqConverterGbx" + ], + [ + "all" + ] + ], + "description": "Transmission heat request to TmStrt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault2", + "name": "sVcVmcPmm_D_EngRunReqLogg", + "configs": [ + [ + "all" + ] + ], + "description": "Engine run request", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4294970000, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngOnReqEng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault3", + "name": "yVcVmcPmm_B_EngOnReqEng", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "all" + ] + ], + "description": "EngOnReqEng", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault4", + "name": "sVcVmcPmm_D_EngRunReqClim", + "configs": [ + [ + "all" + ] + ], + "description": "EngRunReq from Climate, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault5", + "name": "sVcVmcPmm_D_EngRunReqEmLv", + "configs": [ + [ + "all" + ] + ], + "description": "EngRunReq from Power Supply, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqSapp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault6", + "name": "yVcVmcPmm_B_EngRunReqSapp", + "configs": [ + [ + "all" + ] + ], + "description": "EngRunReq from Parking Assistance, via VcVmcPmm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActDrMdHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault7", + "name": "yVcVmcPmm_B_SsActDrMdHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Stop/Start inhibition by DriveMode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActAbsHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault8", + "name": "yVcVmcPmm_B_SsActAbsHMI", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Stop/Start inhibition by ABS activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault9", + "name": "yVcVmcPmm_B_PwrUpIceStrtReq", + "configs": [ + [ + "all" + ] + ], + "description": "Ice start request at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault10", + "name": "yVcVmcPmm_B_EngRunReqObd", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "Run request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault11", + "name": "yVcVmcPmm_B_EngRunReqFuel", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "all" + ] + ], + "description": "Run request by fuel age", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_AutoParkReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault12", + "name": "yVcVmcPmm_B_AutoParkReq", + "configs": [ + [ + "all" + ] + ], + "description": "Autopark request from driver leave function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EfadPathReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGscCts_D_EfadPathAct", + "name": "sVcVmcPmm_D_EfadPathReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "EFAD path request (0=Don't care 1=Efad2Ice 2=Efad2Whl 5=Disengaged)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_ClutchStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault13", + "name": "yVcVmcPmm_B_ClutchStartReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Clutch ICE start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault14", + "name": "yVcVmcPmm_B_IsgPathEnable", + "configs": [ + [ + "all" + ] + ], + "description": "The ISG path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EfadPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault15", + "name": "yVcVmcPmm_B_EfadPathEnable", + "configs": [ + [ + "all" + ] + ], + "description": "The EFAD path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_TrnEngageReqHev": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault16", + "name": "yVcVmcPmm_B_TrnEngageReqHev", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Transmission engage request in hybrid vehicles", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_WhlMotSysCluOperTypReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault17", + "name": "sVcVmcPmm_D_WhlMotSysCluOperTypReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "all" + ] + ], + "description": "Control signal for diff-speed direction and response level of clutch engagement", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EfadActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault18", + "name": "yVcVmcPmm_B_EfadActReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "The electric motor (EFAD) is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngagementMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault19", + "name": "sVcVmcPmm_D_EngagementMode", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "all" + ] + ], + "description": "Engagement mode (1=smooth, 2=fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgStrtPahReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault20", + "name": "yVcVmcPmm_B_IsgStrtPahReq", + "configs": [ + [ + "all" + ] + ], + "description": "Request to open the ISG path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_FastIsgStopReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault21", + "name": "yVcVmcPmm_B_FastIsgStopReq", + "configs": [ + [ + "all" + ] + ], + "description": "Request for fast Efad reconfiguration for ISG stop", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcScIn_v_VehSpdLgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_v_Veh", + "name": "sVcScIn_v_VehSpdLgt", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ], + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "all" + ] + ], + "description": "Vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_Eng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_Eng", + "name": "sVcEc_n_Eng", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "all" + ] + ], + "description": "Engine speed", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_EngRunReqDriver": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EngRunReqDriver", + "name": "sVcDeDmm_D_EngRunReqDriver", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Engine running request from driver mode manager", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcm_D_EngRunngReqByClima": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcAc_B_EngRunReqClim", + "name": "sVcCcm_D_EngRunngReqByClima", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_D_EngRunngReqByBrk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_EngRunReqBrake", + "name": "sVcVdm_D_EngRunngReqByBrk", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Enging run request from BCM (VDM)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseGb_D_TrsmEngRunReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcTc_B_EngRunReqTrans", + "name": "sVcDseGb_D_TrsmEngRunReq", + "configs": [ + [ + "all" + ] + ], + "description": "Engine run request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_EngRunReqEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_EngRunReqEMS", + "name": "sVcEc_D_EngRunReqEMS", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request (inhibit stop) from EMS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcIem_B_WhlMotSysCluSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcIsc_B_EradClutch", + "name": "yVcIem_B_WhlMotSysCluSts", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "ERAD clutch status. 0 = clutch open 1 = clutch closed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcMtcTc_Tq_EradReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcTc_Tq_EradReq", + "name": "sVcMtcTc_Tq_EradReqWhl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Requested ERAD Torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PropulsionAllowed", + "name": "yVcPpmPsm_B_PropulsionAllowed", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Determine if it is allowed to apply tq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_PowertrainDisengaged": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PowertrainDisengaged", + "name": "yVcScIn_B_PowertrainDisengaged", + "configs": [ + [ + "all" + ] + ], + "description": "Determines if powertrain is disengaged or not", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_GearLevAT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT", + "name": "sVcDtcAtr_D_GearLevAT", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ], + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Gear Lever Position", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcAtr_B_AT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcGp_D_GearBox", + "name": "yVcDtcAtr_B_AT", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Automatic gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcEm_D_EngRunReqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm", + "name": "sVcVmcEm_D_EngRunReqEm", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request from Energy Management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_IceEnabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_IceEnabled", + "configs": [ + [ + "all" + ] + ], + "description": "Internal Combustion Engine Enabel (this includes both enabel for remotestart and enabel for propulsion(DriveCycle active))", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAsy_D_EngRunngReqByParkAssi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPam_D_EngRunReqSapp", + "name": "sVcAsy_D_EngRunngReqByParkAssi", + "configs": [ + [ + "all" + ] + ], + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_StartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StartAllowed", + "name": "yVcDepSs_B_StartAllowed", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Start allowance from Dependability monitoring: 1 = Start initiation is allowed, 0 = start initiation not allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_StopAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StopAllowed", + "name": "yVcDepSs_B_StopAllowed", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "all" + ] + ], + "description": "Stop of engine allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcCta_Tq_CrShInstReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcCta_Tq_CrShInstReq", + "name": "sVcDtcCta_Tq_CrShInstReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Total requested crankshaft torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EcoModeSs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode", + "name": "yVcDeDmm_B_EcoModeSs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_MicHevMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDeDmm_D_MicHevMode", + "name": "sVcDeDmm_D_MicHevMode", + "configs": [ + [ + "all" + ] + ], + "description": "Micro hybrid mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_DrReady": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DrReady", + "name": "yVcPpmPsm_B_DrReady", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "all" + ] + ], + "description": "Driver has requested a PowerUp or a PowerDown", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScDep_X_ClutchPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDi_X_ClPed", + "name": "sVcScDep_X_ClutchPedalPos", + "configs": [ + [ + "all" + ] + ], + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_AbsCtrlActv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_AbsCtrl", + "name": "yVcVdm_B_AbsCtrlActv", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Anti Blocking Systems (ABS) control is active (at least one wheel)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_EngFastStop": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_EngFastStop", + "name": "yVcDepSs_B_EngFastStop", + "configs": [ + [ + "all" + ] + ], + "description": "Emergency Fast stop from dependability. 1= Stop, 0 = Dont care", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_StartMotor": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_StartMotor", + "name": "yVcEc_B_StartMotor", + "configs": [ + [ + "all" + ] + ], + "description": "Current status of the Start motor 1= running,0 = not running", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Te_Amb", + "name": "sVcEc_Te_Amb", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Ambient (outdoor) temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 120, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Qf_TeAmb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Qf_TeAmb", + "name": "sVcEc_Qf_TeAmb", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Quality factor for ambient temperature", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_SsRcfSetAlt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_SsRcfSetAlt", + "name": "yVcEc_B_SsRcfSetAlt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Reconfiguration flag for normal functionality. Placeholder to be used if needed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_p_PVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_p_BrVacuum", + "name": "sVcVdm_p_PVac", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Brake vacuum pressure", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_ForcedStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_ForcedStart", + "name": "yVcPpmPsm_B_ForcedStart", + "configs": [ + [ + "all" + ] + ], + "description": "Driver is forcing a start eg rolling the vehicle to active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcGp_D_StopStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGp_D_StopStart", + "name": "sVcGp_D_StopStart", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Car config: Stop Start (1 = no start stop,2 = start stop)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_NeutralMTValid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_NeutralMTValid", + "name": "yVcScDep_B_NeutralMTValid", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Neutral adaption finished", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_BltLockStAtDrvr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle7", + "name": "yVcCem_B_BltLockStAtDrvr", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Driver seat buckle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_FootOnClutchPedalASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_FootOnClutchPedal", + "name": "yVcScDep_B_FootOnClutchPedalASILB", + "configs": [ + [ + "all" + ] + ], + "description": "tbd", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmPsm_D_EngRunReqPsm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPpmPsm_D_EngRunReqPsm", + "name": "sVcPpmPsm_D_EngRunReqPsm", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_BrkFricTqAtWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_Tq_TotWhBrk1", + "name": "sVcDseWt_Tq_BrkFricTqAtWhl", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Total friction brake torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 32763, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_X_AccPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDi_X_AccPed1", + "name": "sVcScIn_X_AccPedalPos", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Accelerator Pedal Position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StrtAbortSoft": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortSoft", + "name": "yVcPpmRc_B_StrtAbortSoft", + "configs": [ + [ + "all" + ] + ], + "description": "Cranking is aborted by VcPpmRc and restart can be done automaticaly without requiring new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StrtAbortHard": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard", + "name": "yVcPpmRc_B_StrtAbortHard", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "all" + ] + ], + "description": "Cranking is aborted by VcPpmRc and restart requires new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_TrnEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard1", + "name": "yVcDeDmm_B_TrnEngageRqDr", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "transmission engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EradEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable1", + "name": "yVcDeDmm_B_EradEngageRqDr", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_EradEngageRqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable2", + "name": "yVcVmcEm_B_EradEngageRqEm", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Erad engage request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_SsRcfSet": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc2", + "name": "yVcEc_B_SsRcfSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Reconfiguration flag to dependability to deny stop/start functionality.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_VehSpdDirRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc3", + "name": "yVcScIn_B_VehSpdDirRvs", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Vehicle speed is in reverse direction", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_VehSpdLgtOk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc5", + "name": "yVcScIn_B_VehSpdLgtOk", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Vehicle Speed Ok", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmAf_Z_FanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc4", + "name": "sVcTmAf_Z_FanAfterrun", + "configs": [ + [ + "all" + ] + ], + "description": "predicted fan step if engine stops", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive", + "name": "yVcEc_B_TCMNodeAlive", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "TCM node alive (1=communication works)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTrm_B_TrlrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear1", + "name": "yVcTrm_B_TrlrPrsnt", + "configs": [ + [ + "all" + ] + ], + "description": "Trailer Present", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvrBrkgASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive1", + "name": "yVcScIn_B_DrvrBrkgASILB", + "configs": [ + [ + "all" + ] + ], + "description": "Driver is pressing the brake pedal to at ASIL B integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_FootOnClutchPedal": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_ClutchNonFailed", + "name": "yVcScDep_B_FootOnClutchPedal", + "configs": [ + [ + "all" + ] + ], + "description": "Clutch pedal indicate pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_PropRear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc8", + "name": "sVcDseWt_Tq_PropRear", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Actual Propuslion Torque on rear wheels (=ERAD Torque)", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcTc_Tq_IsgReqCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc7", + "name": "sVcDtcTc_Tq_IsgReqCrSh", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ] + ], + "description": "Requested ISG Torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseCt_Tq_IsgCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive2", + "name": "sVcDseCt_Tq_IsgCrSh", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ] + ], + "description": "Actual Isg torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvgDirFwdDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear2", + "name": "yVcScIn_B_DrvgDirFwdDes", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Driver desired propulsion direction is forward", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvgDirRvsDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive3", + "name": "yVcScIn_B_DrvgDirRvsDes", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Driver desired propulsion direction is reverse", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_EngCooltT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive4", + "name": "sVcEc_Te_EngCooltT", + "configs": [ + [ + "all" + ] + ], + "description": "Real time value of coolant temp, wide range (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -50, + "max": 150, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive7", + "name": "sVcDtcAtr_D_TrgGear", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "all" + ] + ], + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_IsgStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard2", + "name": "yVcDtcSt_B_IsgStrtAbort", + "configs": [ + [ + "all" + ] + ], + "description": "ISG start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDsePcr_D_EngRunRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_81", + "name": "sVcDsePcr_D_EngRunRq", + "configs": [ + [ + "all" + ] + ], + "description": "Run request from LOS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_82", + "name": "yVcDsePcr_B_IsgDisableRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Request from LOS to disable ISG", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_83", + "name": "yVcDsePcr_B_EradDisableRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Request from LOS to disable ERAD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EngStartInhibtRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_84", + "name": "yVcDsePcr_B_EngStartInhibtRq", + "configs": [ + [ + "all" + ] + ], + "description": "Request from LOS to inhibit engine start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EngStopRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_85", + "name": "yVcDsePcr_B_EngStopRq", + "configs": [ + [ + "all" + ] + ], + "description": "Request from LOS to stop engine", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmNeutFailr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_2", + "name": "yVcTcm_B_TrsmNeutFailr", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Note: 1 (failure) is set when the transmission can not be put in mode 3, 4 or 5 (neutral), for any reason such as EOP failure etc.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcTc_B_FcReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_3", + "name": "yVcDtcTc_B_FcReq", + "configs": [ + [ + "all" + ] + ], + "description": "Main conditions for fuelcut enabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_v_VehSpdLgtMax": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive8", + "name": "sVcScIn_v_VehSpdLgtMax", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "all" + ] + ], + "description": "Maximum vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmPsm_D_EngRunReqRemote": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear3", + "name": "sVcPpmPsm_D_EngRunReqRemote", + "configs": [ + [ + "all" + ] + ], + "description": "Request engine running for remote start", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_n_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive11", + "name": "sVcDtcAtr_n_TrgGear", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ] + ], + "description": "Engine speed at target gear", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcIcl_n_IdleSpdBs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDtcAtr_D_Gear3", + "name": "sVcDtcIcl_n_IdleSpdBs", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Target idle speed base level", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgStartDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_4", + "name": "yVcDsePcr_B_IsgStartDisableRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor == 0" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Request from LOS to open Charge PSR relay", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcAwd_D_EngRunReqStabCtrl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_5", + "name": "sVcVmcAwd_D_EngRunReqStabCtrl", + "configs": [ + [ + "all" + ] + ], + "description": "Run req from to ensure that Ice keep running during cornering", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear6", + "name": "sVcVdm_a_ALgt", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Longitudinal acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Qf_ALgtQf": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc9", + "name": "sVcVdm_Qf_ALgtQf", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "Longitudinal acceleration QF", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAjc_Tq_DrPropFrntReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct1", + "name": "sVcDtcAjc_Tq_DrPropFrntReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Requested Front Axle Torque stability limitations", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmm_D_CarModSts1": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc10", + "name": "sVcVmm_D_CarModSts1", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Car mode from vechicle mode management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_DriveCycleActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_DriveCycleActive", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "all" + ] + ], + "description": "Driver has entered the driving cycle 1= Active 0 = Not Active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_p_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear7", + "name": "sVcEc_p_Amb", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_TipSport": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc11", + "name": "yVcDeDmm_B_TipSport", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Tip or sport mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_D_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc12", + "name": "sVcCem_D_DoorDrvrSts", + "configs": [ + [ + "all" + ] + ], + "description": "Driver door status (0=Unknown, 1=Opened, 2=Closed)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_Qf_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc13", + "name": "sVcCem_Qf_DoorDrvrSts", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ] + ], + "description": "Driver door status quality factor", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_TransMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_6", + "name": "sVcDtcAtr_D_TransMode", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "TransMode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcSpMon_D_PtTrsmModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_7", + "name": "sVcSpMon_D_PtTrsmModReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Signal is used for requesting neutral or engaged state of the transmission.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EngRunReqDrReEval": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc14", + "name": "yVcDeDmm_B_EngRunReqDrReEval", + "configs": [ + [ + "all" + ] + ], + "description": "Request from driver evaluator to re-evaluate engine run request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_EngHiRes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_EngHiRes", + "name": "sVcEc_n_EngHiRes", + "configs": [ + [ + "all" + ] + ], + "description": "Hi resolution engine speed signal", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_D_HoodSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle14", + "name": "sVcCem_D_HoodSts", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart" + ] + ], + "description": "Engine compartment hood status 0=Ukwn - Unknown status 1=Opend - Opened 2=Clsd - Closed", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_ShutOffReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle1", + "name": "yVcPpmRc_B_ShutOffReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0" + ], + [ + "all" + ] + ], + "description": "Shut off request to VmcPmm due to two mass flywheel protection", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_StrtInhbReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv", + "name": "yVcCem_B_StrtInhbReq1WdReq", + "configs": [ + [ + "all" + ] + ], + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_StopStrtReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv1", + "name": "yVcCem_B_StopStrtReq1WdReq", + "configs": [ + [ + "all" + ] + ], + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmRc_D_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle2", + "name": "sVcPpmRc_D_EngRunReqRc", + "configs": [ + [ + "all" + ] + ], + "description": "Run engine (do not S/S stop) due to starter motor over heat protection", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcFsdPc_D_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc1", + "name": "sVcFsdPc_D_EngRunReqFuel", + "configs": [ + [ + "all" + ] + ], + "description": "0=OK, 1=Warn, 2 = Start, 3 not used", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepTre_B_ISGTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct3", + "name": "yVcDepTre_B_ISGTqAllw", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "ISG propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcEsc_B_Active": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct10", + "name": "yVcDtcEsc_B_Active", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ] + ], + "description": "Engine speed control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_SafeEngStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct11", + "name": "yVcDsePcr_B_SafeEngStrtReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ] + ], + "description": "Safe start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_StrtMdeReq", + "name": "yVcDeDmm_B_RespStartReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "Responsive start requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIem_D_WhlMotSysModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct5", + "name": "sVcIem_D_WhlMotSysModSts", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Actual mode for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCidd_D_IsgModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct8", + "name": "sVcCidd_D_IsgModSts", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Actual mode for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Tq_EradMaxAvailWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct9", + "name": "sVcDseEm_Tq_EradMaxAvailWhl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_TqConverterGbx" + ] + ], + "description": "Maximum available ERAD torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradEngageRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct15", + "name": "yVcDsePcr_B_EradEngageRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Request from Los to engage Erad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_v_VehDrDirectionRaw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive15", + "name": "sVcDtcAtr_v_VehDrDirectionRaw", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_TqConverterGbx" + ], + [ + "Vc_Pvc_Hw_B_AT" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ], + [ + "all" + ] + ], + "description": "Vehicle speed in driver intended direction unfiltered (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_TransNtrlDisable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct17", + "name": "yVcDsePcr_B_TransNtrlDisable", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Request from LOS to disable request of neutral mode to TCM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_rt_IsgMaxTorqueLoss": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive13", + "name": "sVcDseEm_rt_IsgMaxTorqueLoss", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "ISG torque limit ratio", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_AccFtOnPed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct12", + "name": "yVcScDep_B_AccFtOnPed", + "configs": [ + [ + "all" + ] + ], + "description": "Foot on AccPedal ASILC", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFsdPc_B_RunDry": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct13", + "name": "yVcFsdPc_B_RunDry", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "all" + ] + ], + "description": "Detection of empty tank for protection of the fuel pump", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_TransNtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct14", + "name": "yVcDsePcr_B_TransNtrlRq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Request from LOS too pot transmission in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepTre_B_ERADTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc16", + "name": "yVcDepTre_B_ERADTqAllw", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "ERAD propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_DrvMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct2", + "name": "sVcDeDmm_D_DrvMode", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "Vc_Pvc_Sw_B_StopStart" + ], + [ + "all" + ] + ], + "description": "Propulsion drive mode: 1 Eco plus, 2 Eco plus-plus, 3 Eco reduced, 4 Sport, 5 comfort, 6 XC mode, 7 AWD, 8 Save for later, 9 Pure, 10 Hybrid, 11 Power, 12 N/A, 13 N/A, 14 N/A: 15 N/A", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 15, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrChassie": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct6", + "name": "yVcCem_B_EngRunngReqByVehModMgrChassie", + "configs": [ + [ + "all" + ] + ], + "description": "Stopstart restart or inhibit request by chassie", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcObdSch_D_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct18", + "name": "sVcObdSch_D_EngRunReqObd", + "configs": [ + [ + "all" + ] + ], + "description": "Engine run request from Obd", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct19", + "name": "yVcVmcEm_B_EngageReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Drivetrain engage request from EM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_IscActvnEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct20", + "name": "yVcEc_B_IscActvnEMS", + "configs": [ + [ + "all" + ] + ], + "description": "Idle speed activation request from EMS", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct21", + "name": "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem", + "configs": [ + [ + "all" + ] + ], + "description": "Stopstart restart or inhibit request by electrical system", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrClimate": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct22", + "name": "yVcCem_B_EngRunngReqByVehModMgrClimate", + "configs": [ + [ + "all" + ] + ], + "description": "Stopstart restart or inhibit request by climate", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct23", + "name": "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt", + "configs": [ + [ + "all" + ] + ], + "description": "Stopstart restart or inhibit request by trailer", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcObdSch_B_FuelCutReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct24", + "name": "yVcObdSch_B_FuelCutReq", + "configs": [ + [ + "all" + ] + ], + "description": "Ful cut request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_ChangeOfMindInhibit": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct25", + "name": "yVcPpmRc_B_ChangeOfMindInhibit", + "configs": [ + [ + "all" + ] + ], + "description": "inhibit ChangeOfMind fuel recovery in order to not interfer with the starter motor activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_BCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct26", + "name": "yVcEc_B_BCMNodeAlive", + "configs": [ + [ + "(Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)" + ] + ], + "description": "BCM Node alive", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss2", + "name": "yVcDsePcr_B_IsgNoTqRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "ISG no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct28", + "name": "yVcDsePcr_B_EradNoTqRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Erad no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_NICEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct31", + "name": "yVcVmcEm_B_NICEnable", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "NIC enabled by energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgUdcCtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct34", + "name": "yVcDsePcr_B_IsgUdcCtrlRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Request to put ISG in Udc control mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Ps_FCLvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct35", + "name": "sVcEc_Ps_FCLvl", + "configs": [ + [ + "all" + ] + ], + "description": "Current level of FC", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_Te_TrsmOilT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct63", + "name": "sVcTcm_Te_TrsmOilT", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Gear box oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -40, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct32", + "name": "yVcDsePcr_B_PwrUpIceStrtReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ] + ], + "description": "Request for a combustion engine start at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct36", + "name": "yVcVmcEm_B_PwrUpIceStrtReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ] + ], + "description": "Ice start request at startup from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_D_EngRunReqDepTrq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct37", + "name": "sVcScIn_D_EngRunReqDepTrq", + "configs": [ + [ + "all" + ] + ], + "description": "Engine run request from Dependability torque estimation system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_DrvrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive3", + "name": "yVcScDep_B_DrvrPrsnt", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Driver present from CEM and signal received correctly", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_ChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct40", + "name": "yVcVmcEm_B_ChrgReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Charge request in HEP7", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCmnEngRunReqCEC_D_Req": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct41", + "name": "sVcCmnEngRunReqCEC_D_Req", + "configs": [ + [ + "all" + ] + ], + "description": "Request ICE to be running / Start ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCmnEngRunReqCEC_B_ReqLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct42", + "name": "yVcCmnEngRunReqCEC_B_ReqLong", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcCtc_D_EfadModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive18", + "name": "sVcDtcCtc_D_EfadModeReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "EM Mode request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseGb_D_EfadPathAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive17", + "name": "sVcDseGb_D_EfadPathAct", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Actual Efad path (1=IsgPath, 2=WhlPath, 5=Disengaged, 6=Transition)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 6, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EfadIsgPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss16", + "name": "yVcDseGb_B_EfadIsgPathNotAvl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Efad Isg path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EfadDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct45", + "name": "yVcDsePcr_B_EfadDisableRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Disable Efad modes of operation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtc_B_CrShPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct7", + "name": "yVcVmcWtc_B_CrShPathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "There is no torque from the ICE acting on the front axel", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_NeutralMT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_RemoteRcfSet2", + "name": "yVcScIn_B_NeutralMT", + "configs": [ + [ + "all" + ] + ], + "description": "Neutral MT ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcWtd_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcWtd_Tq_FrntReqWhl", + "name": "sVcVmcWtd_Tq_FrntReqWhl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_LockUp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/InPort55", + "name": "sVcDtcAtr_D_LockUp", + "configs": [ + [ + "all" + ] + ], + "description": "Actual lock-up mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_EngClnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT10", + "name": "sVcEc_Te_EngClnt", + "configs": [ + [ + "all" + ] + ], + "description": "Real time value of coolant temp (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 160, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEmiHeat_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode34", + "name": "sVcEmiHeat_D_EngUseReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Catalyst engine request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCmnSta_B_StaExeTx": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcBc_B_BrPedSw2", + "name": "yVcCmnSta_B_StaExeTx", + "configs": [ + [ + "all" + ] + ], + "description": "Start execution", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcInjFuCut_rt_Lvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl1", + "name": "sVcInjFuCut_rt_Lvl", + "configs": [ + [ + "all" + ] + ], + "description": "Final fuel cut level", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_v_VehDrDirection": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT1", + "name": "sVcDtcAtr_v_VehDrDirection", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Vehicle speed in driver intended direction (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_CluStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl2", + "name": "yVcDtcSt_B_CluStrtAbort", + "configs": [ + [ + "all" + ] + ], + "description": "Clutch start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscSgs_B_CluStrtAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT3", + "name": "yVcGscSgs_B_CluStrtAvl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Clutch and gear is available for ICE clutch start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTmStrt_B_EngRunTmLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT2", + "name": "yVcTmStrt_B_EngRunTmLong", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_PrioChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT4", + "name": "yVcVmcEm_B_PrioChrgReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Prio charge request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcAwd_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct29", + "name": "yVcVmcAwd_B_EngageReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Erad engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmStrt_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct33", + "name": "sVcTmStrt_D_EngUseReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)" + ], + [ + "(Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)" + ], + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Engine use request for catalyst heating 0=Dont Care, 1=Low load, 2=Hi load", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EngStopDlyReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct43", + "name": "yVcDseGb_B_EngStopDlyReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Engine stop delay request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_EradEngageModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct47", + "name": "sVcDeDmm_D_EradEngageModeReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Erad engage mode", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -128, + "max": 127, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_BrkTqAtWhlsReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_BrPedSw", + "name": "sVcVdm_Tq_BrkTqAtWhlsReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Contains driver requested brake torque and driver support system requested brake torque. The signal is always positive and acts in opposite vehicle motion direction.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16380, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtc_B_EfadPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct16", + "name": "yVcVmcWtc_B_EfadPathDisabled", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "The front axle electric motor path is disabled (i.e. no torque is allowed on the path)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtd_B_EradPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct48", + "name": "yVcVmcWtd_B_EradPathDisabled", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Erad" + ] + ], + "description": "Erad path disable", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcTc_B_IsgPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct49", + "name": "yVcDtcTc_B_IsgPathDisabled", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)" + ], + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Isg path closed (torque ramp finished)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_X_ClPedAdapt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct44", + "name": "sVcDtcAtr_X_ClPedAdapt", + "configs": [ + [ + "all" + ] + ], + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscGar_B_EfadShiftInProgress": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm1", + "name": "yVcGscGar_B_EfadShiftInProgress", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Efad shift in progress", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EfadNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/tlop_VcXx_insignal2", + "name": "yVcDsePcr_B_EfadNoTqRq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Information to not request any torque from Efad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EfadWhlPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss1", + "name": "yVcDseGb_B_EfadWhlPathNotAvl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Efad wheel path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVscEcc_B_TrnEngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct50", + "name": "yVcVscEcc_B_TrnEngageReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Trn Engage Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_CluStrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss3", + "name": "yVcDtcSt_B_CluStrtAct", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Clutch start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_StrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct51", + "name": "yVcDtcSt_B_StrtAct", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Isg start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_EngStartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss4", + "name": "yVcDepSs_B_EngStartAllowed", + "configs": [ + [ + "all" + ] + ], + "description": "Start of combustion engine is allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct52", + "name": "yVcDepSs_B_12VStartEnable", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "12V System ready for start attempt.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtd_B_FrntAxlePathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct46", + "name": "yVcVmcWtd_B_FrntAxlePathDisabled", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Front axle path is disabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct53", + "name": "yVcVmcEm_B_RespStartReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "all" + ] + ], + "description": "Response engine start request to set start mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_B_DrMdeFactory": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct54", + "name": "sVcDeDmm_B_DrMdeFactory", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "DriveMode selection is overridden by another mode because of Factory Mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscAsr_B_EfadNoTqReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct55", + "name": "yVcGscAsr_B_EfadNoTqReq", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Request to put Efad in ISG path but with no Efad torque requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEmiGpf_B_FuelCutReqHybrid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct39", + "name": "yVcEmiGpf_B_FuelCutReqHybrid", + "configs": [ + [ + "all" + ] + ], + "description": "Fuel cut request for Hybrid", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcBsl_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcBsl_Tq_FrntReqWhl", + "name": "sVcVmcBsl_Tq_FrntReqWhl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmStrt_D_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive9", + "name": "sVcTmStrt_D_EngRunReqTm", + "configs": [ + [ + "all" + ] + ], + "description": "Request ICE to be running / Start ICE (Replace RunReqEMS)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAjc_Tq_DrCrShReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct56", + "name": "sVcDtcAjc_Tq_DrCrShReqWhl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Requested crankshaft torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmTeOil_Te_EngOil": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct57", + "name": "sVcTmTeOil_Te_EngOil", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ] + ], + "description": "Engine oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -60, + "max": 195, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Tq_IsgMaxAvail": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct58", + "name": "sVcDseEm_Tq_IsgMaxAvail", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ] + ], + "description": "Maximum available ISG torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Pw_IsgMaxAllowPrio": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct59", + "name": "sVcDseEm_Pw_IsgMaxAllowPrio", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "(Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)", + "Vc_Pvc_Hw_B_12VStartMotor" + ] + ], + "description": "Maximum allow ISG Powerlimit.", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgtStdFromWhlSpd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct60", + "name": "sVcVdm_a_ALgtStdFromWhlSpd", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Vehicle acceleration over ground", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseEm_B_EngRunReqSocMin": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct61", + "name": "yVcDseEm_B_EngRunReqSocMin", + "configs": [ + [ + "all" + ] + ], + "description": "Soc min ice start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct62", + "name": "yVcScIn_B_PropulsionAllowed", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ], + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Indicates that propulsive torque is allowed. This includes all actuators. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScDep_D_DrvgDirDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT5", + "name": "sVcScDep_D_DrvgDirDes", + "configs": [ + [ + "all" + ] + ], + "description": "EPB application request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcTfa_B_CcActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules36", + "name": "yVcVmcTfa_B_CcActive", + "configs": [ + [ + "all" + ] + ], + "description": "Cruise control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_rt_IsgMaxTorqueLossStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT6", + "name": "sVcDseEm_rt_IsgMaxTorqueLossStart", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "EPB application request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_D_EpbSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVdm_D_EpbSts", + "name": "sVcVdm_D_EpbSts", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Epb status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcAwd_X_RoadGrad": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT7", + "name": "sVcVmcAwd_X_RoadGrad", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Actual road gradient", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALat": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_11", + "name": "sVcVdm_a_ALat", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Lateral acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_Depletion": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules1", + "name": "yVcVmcEm_B_Depletion", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "charge mode == depletion", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_EfadMaxElDrvWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct64", + "name": "sVcDseWt_Tq_EfadMaxElDrvWhl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Maximum available EFAD wheel torque for pure electric drive", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMtcAjc_Tq_EfadReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct65", + "name": "sVcMtcAjc_Tq_EfadReqWhl", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Requested rear torque after ERAD drivability filters", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_Charge": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules2", + "name": "yVcVmcEm_B_Charge", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Charge mode active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcTfa_B_CcOrAccActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive", + "name": "yVcVmcTfa_B_CcOrAccActive", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT" + ] + ], + "description": "Cruise or Acc is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscPrn_B_EfadRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive1", + "name": "yVcGscPrn_B_EfadRvs", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)" + ] + ], + "description": "Reverse with Efad on forward gear", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGbGear_B_ParkLockNotEngd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive2", + "name": "yVcDseGbGear_B_ParkLockNotEngd", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Park lock is not engaged (If FALSE no guarantee for fully engaged park lock)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFsdPc_B_RunDryCrkInhb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb", + "name": "yVcFsdPc_B_RunDryCrkInhb", + "configs": [ + [ + "all" + ] + ], + "description": "Run Dry Crank Inhibit", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGbAvl_B_EfadIsgPathAvoid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb1", + "name": "yVcDseGbAvl_B_EfadIsgPathAvoid", + "configs": [ + [ + "(Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)", + "Vc_Pvc_Hw_B_Efad" + ] + ], + "description": "Request to block ISG path when 1st gear is not available or overheating", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": { + "rVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "name": "rVcVmcPmm_D_EngRunReqLogg", + "configs": [ + [ + "all" + ] + ], + "description": " [0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "4294970000", + "class": "CVC_DISP" + } + }, + "nvm": {}, + "pre_procs": [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1270_12VStartEnable_10", + "Vc_Pvc_Hw_B_12VStartMotor", + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "Vc_Pvc_Hw_B_AT", + "Vc_Pvc_Hw_B_Efad", + "Vc_Pvc_Hw_B_Erad", + "Vc_Pvc_Hw_B_HVSystem == 0", + "Vc_Pvc_Hw_B_TqConverterGbx", + "Vc_Pvc_Sw_B_StopStart" + ], + "local_vars": { + "xVcVmcPmm_B_AmbTempH": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is above limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunning": { + "type": "Bool", + "unit": "-", + "description": "Engine is running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_rt_FCLvl": { + "type": "Float32", + "unit": "-", + "description": "Final fuel cut level before realisation.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StartedDly": { + "type": "Bool", + "unit": "-", + "description": "Engine running detected (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngStopped": { + "type": "Bool", + "unit": "-", + "description": "Engine is stopped", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunningRpmDly": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Started": { + "type": "Bool", + "unit": "-", + "description": "engine running detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunningRpm": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkHGSkipParkPre": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop will be ignored if gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop is ignored allowing stop trigger in gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqBrake": { + "type": "UInt8", + "unit": "-", + "description": "Engine running request brakes", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "-", + "description": "brake vacuum start from vacuum level due to vehicle speed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkVacuumStart": { + "type": "Bool", + "unit": "-", + "description": "Brake vacuum request to start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator3", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "brake vacum limit in vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_VehAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted acceleration calculated from speed.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/LogicalSwitch/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_Tq_BrkTrqFilt": { + "type": "Float32", + "unit": "Nm", + "description": "Filted brake trq signal", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Sum2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_MergedAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted merged accelerations signal from EPB and Vehicle speed acc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Sum2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_BcmLongAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted accelerations signal from EPB LongAcc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Sum2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_GradOutOfLim": { + "type": "Bool", + "unit": "-", + "description": "Out of limits to allow stop start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator2", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_QfFault": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator4", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkHGStart": { + "type": "Bool", + "unit": "-", + "description": "Hill Gradient start of engine due to high/low gradient", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator5", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_QfFaultLongAcc": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid for long acc signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_tc_HillGadient": { + "type": "Float32", + "unit": "s", + "description": "tc for Hillgradient final filter", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_SignedHGVehFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Signed vehicle speed acceleration signal. If vehicle is moving backwards.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Hill gradient start of engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StandStill": { + "type": "Bool", + "unit": "-", + "description": "Hillgradient calculation for stand still lower then cal value", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_HGSpdOK": { + "type": "Bool", + "unit": "-", + "description": "Speed Ok to calculate stop inhibit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator5", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StopInhibitUpHill": { + "type": "Bool", + "unit": "-", + "description": "Stop inhibit uphill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StopInhibitDownHill": { + "type": "Bool", + "unit": "-", + "description": "Stop Inhibit Down Hill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_MergedAccSaturated": { + "type": "Float32", + "unit": "m/s2", + "description": "Saturated merged acceleration signal", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Saturation/MinMax1", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_MergedAcc": { + "type": "Float32", + "unit": "m/s2", + "description": "Merged Acc signal (sVcEpb_a_LongAcc-a_HGVehFilt)", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Sum6", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "A/T load compensation for drive and reverse.", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqFCAdapt": { + "type": "UInt8", + "unit": "-", + "description": "FC adapt run req", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_FCAdaptAct": { + "type": "Bool", + "unit": "-", + "description": "Fuel cut adapt active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF4/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_DrLeaveKeepRun": { + "type": "Bool", + "unit": "-", + "description": "Keep engine running based on driver leave vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogOp9", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqDrLeave": { + "type": "UInt8", + "unit": "-", + "description": "Engine run req based on driver leave vehicle", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogicalSwitch3/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_DrLeavePowerDownReq": { + "type": "Bool", + "unit": "-", + "description": "Power down request from driver leave", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay1/RelationalOperator1", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqPcr": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Pcr", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDriver": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqPsm": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Psm", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqEm": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Energy Management", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TransBlock": { + "type": "Bool", + "unit": "", + "description": "transmission is being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TransEngOnBlock": { + "type": "Bool", + "unit": "", + "description": "Trans blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TransBlocking": { + "type": "Bool", + "unit": "", + "description": "Transmission is blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EMSBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EMSBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EmLvBlocked": { + "type": "Bool", + "unit": "", + "description": "Em Lv is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_ClimBlocked": { + "type": "Bool", + "unit": "", + "description": "climate is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Engine running request FC Adapt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TmBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TmBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIsg": { + "type": "Bool", + "unit": "", + "description": "Engine running request ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqRemote": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Engine running request stability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Engine running request driver leave", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqChas": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwitch27/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_ChasBlocked": { + "type": "Bool", + "unit": "-", + "description": "Chassis is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDelay5/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDep": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CECBlock": { + "type": "Bool", + "unit": "-", + "description": "CEC being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperator6", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqCEC": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from CEC", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch25/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CECBlocked": { + "type": "Bool", + "unit": "", + "description": "CEC is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_FastStart": { + "type": "Bool", + "unit": "-", + "description": "Fast start mode request ISG start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator14", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_SafeISGPrio": { + "type": "Bool", + "unit": "-", + "description": "Priotritzed safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_SafeISG": { + "type": "Bool", + "unit": "-", + "description": "Safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF2/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EmiStrt": { + "type": "Bool", + "unit": "-", + "description": "Emission start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StrtMdeRunning": { + "type": "Bool", + "unit": "-", + "description": "Restart within drivecycle active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF1/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StrtMdeAcc": { + "type": "Bool", + "unit": "-", + "description": "StartMode on AccPedal detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF2/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_HeatUpEOP": { + "type": "Bool", + "unit": "-", + "description": "Heat of of EOP in progress", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/SR_FF4/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_Xd_AccPedalPos": { + "type": "Float32", + "unit": "%/s", + "description": "Derivative of accelerator pedal position", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLPF1_pole_v2/LogicalSwitch/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtTrqDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on torque demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtPwrDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on power demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode during ISG-starts in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator10", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngmtModFast": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/SR_FF8/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "Time the engine has been shut off.", + "max": 100000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/MinMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StopAllowedPath": { + "type": "Bool", + "unit": "-", + "description": "An engine stop is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngStop": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator27", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngStart": { + "type": "Bool", + "unit": "", + "description": "engine start request, with start allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator35", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqTotPre": { + "type": "Bool", + "unit": "-", + "description": "EngRunReqTotPre", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IceStartRun": { + "type": "Bool", + "unit": "-", + "description": "ICE status is starting or running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator42", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngStopFast": { + "type": "Bool", + "unit": "-", + "description": "Engine must be stopped, either stall, key off or monitoring function", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqEngClnt": { + "type": "Bool", + "unit": "-", + "description": "Engine run request due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnOff": { + "type": "Bool", + "unit": "-", + "description": "EngOnOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StopAllowedDep": { + "type": "Bool", + "unit": "-", + "description": "A stop/start stop is allowed by dep", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqMaxTime": { + "type": "Bool", + "unit": "-", + "description": "EngRunReq for Max shut off time for engine.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_RunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "Ice stall run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "The engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqPre": { + "type": "Bool", + "unit": "", + "description": "EngRunning Request for micro hybrid vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_FanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Fan afterrun is active for eng on req", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/LogicalOperator3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqEng": { + "type": "Bool", + "unit": "-", + "description": "Eng on request from engine control, later on synced with transmission", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtDly": { + "type": "Bool", + "unit": "-", + "description": "Time delay on EngRunReqTot when Waiting for a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Rel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4EngStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for the engine to stop before requesting a new B_EngRunReqTot-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Rel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqLogg": { + "type": "UInt32", + "unit": "-", + "description": "[0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "max": 4294970000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_PwdPossible": { + "type": "Bool", + "unit": "", + "description": "Powerdown is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator17", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_PwdTrig": { + "type": "Bool", + "unit": "", + "description": "a powerdown is triggerd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_PwdReset": { + "type": "Bool", + "unit": "", + "description": "a powerdown is reset", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator7", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_SsActSeatBeltInhib": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 0 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_SsActSeatBeltAllow": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 1 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_SRSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Seatbelt-DriverDoor logic inhibit SsActive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "Driver has left the car", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperator20", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AmbPresLow": { + "type": "Bool", + "unit": "-", + "description": "Ambient pressure is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator16", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AmbTempL": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_t_TrnC3OilPres": { + "type": "Float32", + "unit": "s", + "description": "C3 oil pressure buildup time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/CounterReset1/MinMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrnC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "C3 oil pressure build up phase", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/LogicalOperator41", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqHybrid": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request (for hybrids)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/LogicalOperator32", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqIC": { + "type": "Bool", + "unit": "-", + "description": "The transmission is requested to be engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/LogicalSwitch10/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CrShPathDisabled": { + "type": "Bool", + "unit": "-", + "description": "The crankshaft path is closed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/LogicalSwitch9/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngStopReqAT": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperator27", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_TransModeReq": { + "type": "UInt8", + "unit": "-", + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqPre": { + "type": "Bool", + "unit": "-", + "description": "Pre transmission engage request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTransPre": { + "type": "Bool", + "unit": "-", + "description": "Pre signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTrans": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to be started for an AT vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRcvMT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery MT", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp16", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StrtAbrtPre": { + "type": "Bool", + "unit": "-", + "description": "Star abort for Stop in Gear vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp26", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRcvClNtrl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp29", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "ISG start abort", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp39", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRcvCl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp5", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRcvAbortInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "-", + "description": "Starting stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch12/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_StallAbortNum": { + "type": "UInt8", + "unit": "-", + "description": "Number of start attempts", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch13/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRunning": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch14/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if no seat belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch15/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch16/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery within x seconds after first start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch17/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRecovery": { + "type": "Bool", + "unit": "", + "description": "stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch18/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch19/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallStrtM": { + "type": "Bool", + "unit": "-", + "description": "Start motor stall, time out", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid. MT only", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch20/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery AT transmissions", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch22/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if stop/start strategy is off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch23/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch30/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "-", + "description": "No stall recover if is not an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch32/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if the engine coolant temp is low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch34/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallRcShutOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch40/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Stall detection is inhibited by ChangeOfMindInhibit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch41/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "ICE stall detected during an emission start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch43/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch48/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CrnkStallRecov": { + "type": "Bool", + "unit": "", + "description": "Stall detection using startmotor flag", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "B_AbrtStallSsRcfSet", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_ForcedStallStart": { + "type": "Bool", + "unit": "", + "description": "Forced start for stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected, set Unintended EMS flag", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/RelationalOperator1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StallAbortNum": { + "type": "Bool", + "unit": "", + "description": "Abort stall", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOperator4", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "ICE stall run request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3/LogOp3", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EradSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Erad speed control request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator12", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EradAllow": { + "type": "Bool", + "unit": "-", + "description": "Erad path is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator14", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EradEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Erad engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator6", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EpbActive": { + "type": "Bool", + "unit": "-", + "description": "Parking brake active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/B_TqRsvActAT_1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_Z_RoadGradient": { + "type": "Float32", + "unit": "-", + "description": "Road gradient", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/LogicalSwitch5/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkRoadIncline": { + "type": "Bool", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/RelationalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D if Efad is in ISG-path already", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator11", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_NonSysStrt": { + "type": "Bool", + "unit": "-", + "description": "A non-system initated start is requested", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDRBraking": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D/R since driver is braking vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator59", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDR": { + "type": "Bool", + "unit": "-", + "description": "An ISG-start is requested while the gear lever is placed in either drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDRAbort": { + "type": "Bool", + "unit": "-", + "description": "Abort ISG-start in D/R if driver releases brake pedal, allow for 12V-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator9", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtLimLoosen": { + "type": "Bool", + "unit": "-", + "description": "Loosen the ISG start limits", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtWhlTrqOK": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to request an ISG-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_a_Veh": { + "type": "Float32", + "unit": "m/s2", + "description": "Derivied vehicle speed", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Sum2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An 12V start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator14", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Wait for the vehicle speed to increase to be able to requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator44", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Dly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Delay an 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator7", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_12VStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An 12V-start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtLowVehSpd": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough to activate the Wait4CluStrt-logic", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/RelationalOperator17", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtWhlAccHigh": { + "type": "Bool", + "unit": "-", + "description": "The vehicle acceleration is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtWhlTqLow": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtAccPedAct": { + "type": "Bool", + "unit": "-", + "description": "The acc pedal is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for a clutch start is exceeded", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_DrvCycActvFirstStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore the unavailable-logic for the first start due to low transmission oil temp (might result in a slow response from the TCM which leads to a delayed start)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator44", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator55", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator8", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTiOut": { + "type": "Bool", + "unit": "-", + "description": "Timeout", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_DrvCycActvFirstStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for first start logic connected to the DriveCycleActive signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "There's not enough available torque to perform an ISG-start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CluStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator46", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CluStrtTqRsvBlk": { + "type": "Bool", + "unit": "-", + "description": "Abort CluStrt if current EFAD TqReq is too high and 12Vstrt is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator7", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CluStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator10", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CluStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "Clutch start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator20", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "ISG start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator35", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_StrtActrsRdy": { + "type": "Bool", + "unit": "-", + "description": "One or several start actuators are ready for another start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator47", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator6", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_12VStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "12V start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator9", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further ISG start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CluStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further clutch start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_12VStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further 12V start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_12VStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "12V start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_CluStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "Clutch start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_IsgStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "ISG start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_CluStrtVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is high enough to perform a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_ElecMotLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "Currently low available torque levels on the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_VehSpdOKIsgDrv": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Run request to reduce propulsion delay during ISG-stop in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator24", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Eng run req during ISG-stop coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator25", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Trigger run req after ISG-stop to reduce propulsive torque delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator36", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIsgStop": { + "type": "Bool", + "unit": "-", + "description": "Engine running request to avoid loss of drive during abort of ISG-stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReqDrv": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when the gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator11", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReqBrk": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator13", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG-stop of ICE during standstill in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator18", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopStandstillPre": { + "type": "Bool", + "unit": "-", + "description": "Engine stop using ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator22", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRoadGradOK": { + "type": "Bool", + "unit": "-", + "description": "Road gradient is OK for ISG-stop in standstill D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator35", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator49", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to use the electic motor for charging of the HV-battery", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator5", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during power down", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator9", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrnModOKIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode OK for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalSwitch1/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_VehSpdOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_BrkOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_AccPedOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The acc ped request is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillBrkTqOK": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillBslTqOK": { + "type": "Bool", + "unit": "-", + "description": "VcVmcBsl torque request is low enough for an ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EfadUnavl": { + "type": "Bool", + "unit": "-", + "description": "The efad is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Ice path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Efad2WhlUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Whl path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Efad2WhlPahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to wheel path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator44", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Efad2IcePahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to ICE path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator54", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceReqRst": { + "type": "Bool", + "unit": "-", + "description": "Request to reset the Efad2Ice-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator57", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EfadDisengdReq": { + "type": "Bool", + "unit": "-", + "description": "Request to disengage the EFAD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator59", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_12VStrtReq": { + "type": "Bool", + "unit": "-", + "description": "12V start request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator65", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_EfadModReq": { + "type": "UInt8", + "unit": "-", + "description": "Efad mode request", + "max": 5, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_EvenGearShiftAct": { + "type": "Bool", + "unit": "-", + "description": "A gear shift is currently active on the electric motor shaft", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF1/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_GarageShiftEfadPahDiOK": { + "type": "Bool", + "unit": "-", + "description": "The torque condition when perfoming a garage shift is okay (there should be no torque acting on the electric motor before engaging drive/reverse)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF3/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceReq": { + "type": "Bool", + "unit": "-", + "description": "Request to connect the EFAD to the ICE", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF7/LogOp3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_DrvCycTiOut": { + "type": "Bool", + "unit": "-", + "description": "Time out indication for the drivecycle active signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay1/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_GearLvrNotDRDetn": { + "type": "Bool", + "unit": "-", + "description": "The gear lever is not in drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay4/Rel", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtOk": { + "type": "Bool", + "unit": "-", + "description": "ISG start ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator4", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_12VStrtOk": { + "type": "Bool", + "unit": "-", + "description": "12Vstrt OK", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator5", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_Tq_EradMaxLimNoLim": { + "type": "Float32", + "unit": "Nm", + "description": "ERAD max torque no limits (HW boundary)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgEnable": { + "type": "Bool", + "unit": "-", + "description": "Isg is enabled", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalOperator17", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_IsgActrTqRampDwn": { + "type": "Bool", + "unit": "-", + "description": "There is no torque acting on the actuator", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RelationalOperator13", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_PTDisengagedAT": { + "type": "Bool", + "unit": "-", + "description": "tbd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator7", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_TrailerPresent": { + "type": "Bool", + "unit": "-", + "description": "Trailer is present", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalOperator22", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqChas": { + "type": "UInt8", + "unit": "-", + "description": "Engine Run Req from Chassie", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "xVcVmcPmm_B_DrDoorOpen": { + "type": "Bool", + "unit": "-", + "description": "Driver door is open", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/RelationalOperator5", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ], + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + } + }, + "calib_consts": { + "cVcVmcPmm_B_PwdAbortHard": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort start is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbortHard", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdAbrtStall": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort stall is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbrtStall", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdDrReadyAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Powerdown due to AbortHard possible also at DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdDrReadyAbortHard", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdIgnoreQfDrDoor": { + "type": "Bool", + "unit": "-", + "description": "Ignore QF for driver door information", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdIgnoreQfDrDoor", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on two-mass flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdRcShutOffDCA": { + "type": "Bool", + "unit": "-", + "description": "Reset Powerdown timer for two-mass flywheel protection in low DriveCycleActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOffDCA", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdRcfDep": { + "type": "Bool", + "unit": "", + "description": "Activate powerdown if reconfig from dependability is set", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcfDep", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdRpmOnly": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on engine speed instaed of Ice Status signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRpmOnly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBelt": { + "type": "Bool", + "unit": "", + "description": "Activate pwd if seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBelt", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltDoor": { + "type": "Bool", + "unit": "-", + "description": "Include driver door status as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltDoor", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltN": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in N", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltN", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltP": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltP", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdSpeedLimit": { + "type": "Bool", + "unit": "", + "description": "Activate speed limit threashold for powerdown", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSpeedLimit", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMModeFail", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMNodeAlive", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTransFailure", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwdUseSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Use gear lever position as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdUseSeatBeltAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UsePowerDownReq": { + "type": "Bool", + "unit": "", + "description": "allow a powerdown to occur", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_UsePowerDownReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_PwdRpmOnly": { + "type": "Float32", + "unit": "rpm", + "description": "Below this rpm threashold an powerdown will be carried out if seat belt is unbuckled or engine fault has occured", + "max": 100000000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/n_PwdRpmOnly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BlockPsmPwd": { + "type": "Float32", + "unit": "s", + "description": "Time to ignore PowerDownHMI signal from VcPpmPsm after an open DriverDoor triggered a powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_BlockPsmPwd", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_PwdRcShutOff": { + "type": "Float32", + "unit": "s", + "description": "Time with two-mass flywheel protection active to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRcShutOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_PwdRpm": { + "type": "Float32", + "unit": "s", + "description": "time with no rpm to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRpm", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_PwdSeatBeltAT": { + "type": "Float32", + "unit": "s", + "description": "Powerdown after this timeout if belt is off for Auto transmission", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdSeatBeltAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_PwdTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdTcmModeFail", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_PwdSpeedLimit": { + "type": "Float32", + "unit": "km/h", + "description": "threashold to allow powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/v_PwdSpeedLimit", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem == 0", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBeltNoSeq": { + "type": "Bool", + "unit": "-", + "description": "Require no sequence in condition to allow SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/B_SsActSeatBeltNoSeq", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_SsActSeatBelt": { + "type": "Float32", + "unit": "s", + "description": "Reset SsActive after a delay if Driver belt off in Park", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/t_SsActSeatBelt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltD": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in D and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltD", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltN": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in N and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltN", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltP": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltP", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltR": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in R and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltR", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorNoBelt": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when belt is off and door is opened (AT only)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorNoBelt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActAbs": { + "type": "Bool", + "unit": "", + "description": "Use ABS in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAbs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActAmbPres": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by low ambient pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAmbPres", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActBrk": { + "type": "Bool", + "unit": "-", + "description": "Use brake request, used to ensure no stop after ABS pump activation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActBrk", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDrMdInv": { + "type": "Bool", + "unit": "-", + "description": "0=inhibit SsActive if matching any of the selected drive modes, 1=allow SsActive if matching any of the selected drive modes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDrMdInv", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P, belt is off and door is opened", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDriverLeaving", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActEcoMde": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by eco mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActEcoMde", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActGpSs": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by global parameter", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActGpSs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActHood": { + "type": "Bool", + "unit": "-", + "description": "Use HoodStatus in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActHood", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActNtrl": { + "type": "Bool", + "unit": "", + "description": "Neutral must be valid for stop/start to be active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActNtrl", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActRcfSet": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from dependability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSet", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActRcfSetAlt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from Engine control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSetAlt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBelt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by seatbelt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBelt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBeltPrkBlock": { + "type": "Bool", + "unit": "-", + "description": "Block reconfig of stop/start by seatbelt if AT gear lever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBeltPrkBlock", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMModeFail", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMNodeAlive", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTemp": { + "type": "Bool", + "unit": "", + "description": "Require ok Qf on temp to deselect stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTemp", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTempStrt": { + "type": "Bool", + "unit": "-", + "description": "If 1 then temperature condtion can restart the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTempStrt", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTipSport": { + "type": "Bool", + "unit": "-", + "description": "When in Tip/Sport, deactivate SS (as an alternative to set EngRunReqDriver in VcDeDmm)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTipSport", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTrailer": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trailer detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTrailer", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SsActTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTransFailure", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseSsActTemp": { + "type": "Bool", + "unit": "", + "description": "If 1 then temperature condtion can inhibit StopStart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActTemp", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseSsActive": { + "type": "Bool", + "unit": "", + "description": "Set stop/start as active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActive", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd1": { + "type": "UInt8", + "unit": "-", + "description": "First drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd1", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd2": { + "type": "UInt8", + "unit": "-", + "description": "Second drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd2", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd3": { + "type": "UInt8", + "unit": "-", + "description": "Third drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd3", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_AmbHighH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_AmbHighL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_AmbLowH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_AmbLowL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_SsActTrailerUpHillH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, upper hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_SsActTrailerUpHillL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, lower hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_p_AmbH": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, high hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbH", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_p_AmbL": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, low hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbL", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_SsActAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActAbs", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_SsActBrk": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding brake request, used to ensure no stop after ABS pump activation", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActBrk", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_SsActTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActTcmModeFail", + "configs": [ + [ + "Vc_Pvc_Sw_B_StopStart", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngStoppedUseHiRes": { + "type": "Bool", + "unit": "-", + "description": "rpm to consider engine stopped", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_EngStoppedUseHiRes", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseComInhbtIceStatus": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to exit state IceStatus=Running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseComInhbtIceStatus", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIscActvnEMS": { + "type": "Bool", + "unit": "-", + "description": "use startmotor to detect eng running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseIscActvnEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseTqSPM": { + "type": "Bool", + "unit": "-", + "description": "Torque SPM interface. Set = 1 to choose GEP3 signals", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseTqSPM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_StrtModLongIceStsDetn": { + "type": "UInt8", + "unit": "-", + "description": "Determine which start mode gets the long time detection for IceStatus=running", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/D_StrtModLongIceStsDetn", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_EngRunning": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine running", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngRunning", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_EngStarted": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine started", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStarted", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_EngStopped": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stopped", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStopped", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_rt_FCLvlRunning": { + "type": "Float32", + "unit": "-", + "description": "Min Fuel cut level for detecting engine on", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/rt_FCLvlRunning", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_ComInhbtIceStatus": { + "type": "Float32", + "unit": "s", + "description": "Max time to listen to ChangeOfMindInhibit signal, used as stop request in IceStatus", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_ComInhbtIceStatus", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopTime": { + "type": "Float32", + "unit": "s", + "description": "minimum stop timer", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_MinStopTime", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_Running": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng running", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Running", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_Started": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng started", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Started", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkAbs": { + "type": "Bool", + "unit": "s", + "description": "Keep engine running if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkAbs", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkEngRunReq": { + "type": "Bool", + "unit": "s", + "description": "use the enigne running request from brake control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkEngRunReqAlive": { + "type": "Bool", + "unit": "-", + "description": "If engine running request from brake control is missing, request start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReqAlive", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Use separate HillGradient conditions to allow engine stop if gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHGSkipPark", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkHillGrad": { + "type": "Bool", + "unit": "s", + "description": "Use brake for ensureing engine is running when in high slopes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHillGrad", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkUseNegVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use negative brake vacuum signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkUseNegVacuum", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuum", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum adapted for vehicle speed for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuumVeh", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_BrkHillVal": { + "type": "UInt8", + "unit": "-", + "description": "Used to set if hill gradient function should be able to restart the engine(2) or only inhibit stop(1)", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/D_BrkHillVal", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkDownH": { + "type": "Float32", + "unit": "deg", + "description": "Downhill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownH", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkDownL": { + "type": "Float32", + "unit": "deg", + "description": "Downhill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownL", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkUpH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpH", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkUpL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpL", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_p_BrVacuum": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuum", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BrkAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkAbs", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BrkEngRunReqAlive": { + "type": "Float32", + "unit": "s", + "description": "Delay for starting engine if EngRunReq signal from brake system is missing", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkEngRunReqAlive", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BrkHillGrad": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding gradient, used to ensure no stop after gradient estimation active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkHillGrad", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Value sent out if not Epb Qf Long Acc is correct", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_BrkHillGradStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseDefHGDynoMd": { + "type": "Bool", + "unit": "-", + "description": "Use default hill gradient value if DynoMode is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseDefHGDynoMd", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseWhlSpdDirection": { + "type": "Bool", + "unit": "-", + "description": "Use wheel speed direction", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseWhlSpdDirection", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_QfEpbLongAccInit": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccInit", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_QfEpbLongAccOK": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccOK", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_ResetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for reset stop inhibit", + "max": 10000000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimDownHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_ResetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for reset stop inhibit", + "max": 10000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimUpHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_SetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for enable stop inhibit", + "max": 1000000000000, + "min": -100000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimDownHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Z_SetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for enable stop inhibit", + "max": 900000000000, + "min": -9000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimUpHill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_a_HillGradientFault": { + "type": "Float32", + "unit": "m/s2", + "description": "Hillgradient acc used when fault detected", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientFault", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_a_HillGradientMax": { + "type": "Float32", + "unit": "m/s2", + "description": "Max acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_a_HillGradientMin": { + "type": "Float32", + "unit": "m/s2", + "description": "Min acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Time StandStill", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/t_StandStill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_BcmLongAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration from BCM LongAcc", + "max": 1000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BcmLongAccFilt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_BrkTrqFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for Brake trq filter", + "max": 1000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BrkTrqFilt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for filter when stand still", + "max": 10000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_StandStill", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_VehAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration calculated from vehicle speed", + "max": 10000000000000, + "min": -1000000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_VehAccFilt", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_SpeedLimitHG": { + "type": "Float32", + "unit": "km/h", + "description": "Speedlimit. below set speed Stop inhibit is active", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_SpeedLimitHG", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_StandStillLoLim": { + "type": "Float32", + "unit": "km/h", + "description": "Low Speed Activation for Stand Still Time Constant", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_StandStillLoLim", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_FCAdaptIdle": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_FCAdaptIdle", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEmiGpfFC": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_UseEmiGpfFC", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptGearRst": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptGearSet": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptLockUpRst": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptLockUpSet": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_FCAdaptEngClntRst": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption reset", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_FCAdaptEngClntSet": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_FCAdaptEngRst": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption reset", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_FCAdaptEngSet": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_FCAdaptIdleDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Fuel cut request reset delay time off when not in idle", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/t_FCAdaptIdleDelayOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_FCAdaptVehRst": { + "type": "Float32", + "unit": "km/h", + "description": "Selected gear for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehRst", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_FCAdaptVehSet": { + "type": "Float32", + "unit": "km/h", + "description": "Selected vehicle speed for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_DrLeaveKeepRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle keep engine running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeaveKeepRunReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_DrLeavePowerDown": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeavePowerDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_DrLeaveAutoParkReq": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveAutoParkReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_DrLeaveDCADly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveDCADly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_DrLeavePwrDwnDly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeavePwrDwnDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_DrLeaveLim": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to activate driver leave vehicle logic", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/v_DrLeaveLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_DrLeaveEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_DrLeaveEnable", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_FCAdaptEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_FCAdaptEnable", + "configs": [ + [ + "Vc_Pvc_Hw_B_HVSystem_CN", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_GlitchEngOnTrans": { + "type": "Bool", + "unit": "", + "description": "Use glitch block on eng run req trans", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_GlitchEngOnTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopTrans": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_MinStopTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_GlitchEngOnTrans": { + "type": "Float32", + "unit": "s", + "description": "Block transmission request if glitching", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_GlitchEngOnTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopTrans": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_MinStopTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopEMS": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/B_MinStopEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopEMS": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/t_MinStopEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopEmLv": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/B_MinStopEmLv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopEmLv": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/t_MinStopEmLv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopClim": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/B_MinStopClim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopClim": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/t_MinStopClim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopTm": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/B_MinStopTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopTm": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/t_MinStopTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopChas": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/B_MinStopChas", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopChas": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/t_MinStopChas", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_MinStopCEC": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/B_MinStopCEC", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_MinStopCEC": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/t_MinStopCEC", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PwrUpIceStrtReqUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Request first start if RunReqTrans is active at startup", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_PwrUpIceStrtReqUseTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SerialModeSafeBISG": { + "type": "Bool", + "unit": "-", + "description": "1= Use SafeBISG during serial mode start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_SerialModeSafeBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeEscCond": { + "type": "Bool", + "unit": "-", + "description": "1=Use esc active condition for fast start mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeEscCond", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeSkipTrnMde": { + "type": "Bool", + "unit": "-", + "description": "Skip trans mode term in fast start logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeSkipTrnMde", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_FastBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_FastBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_NormalBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_NormalBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_SafeBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_SafeBISG", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_StrtDiffFast": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed diff for triggering fast map for start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/n_StrtDiffFast", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseStartModeHybrid": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch to use StartModeHybrid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/B_UseStartModeHybrid", + "configs": [ + [ + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IgnoreGearLevRespStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore logic for responsive engine start as function of gear lever position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_IgnoreGearLevRespStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseFirstStartMode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseFirstStartMode", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseLastStrtMod": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to always request a safe start for the last start attempt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseLastStrtMod", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseStrtMde3All12vStrt": { + "type": "Bool", + "unit": "-", + "description": "Use Startmode3 in all 12V starts, also for slow engagements", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseStrtMde3All12vStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_AbortStart": { + "type": "UInt8", + "unit": "-", + "description": "Number of abroved start attempts", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/D_AbortStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EngmtModFast": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode fast", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModFast", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_GearLevRespStrtOK1": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK1", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_GearLevRespStrtOK2": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK2", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_StrtModDft": { + "type": "UInt8", + "unit": "-", + "description": "Default start mode", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_StrtModDft", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseStartModeHybrid12V": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch for StartModeHybrid12V", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/B_UseStartModeHybrid12V", + "configs": [ + [ + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeSet": { + "type": "Bool", + "unit": "-", + "description": "Set start mode in to OB-block", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeSet", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeStopTrig": { + "type": "Bool", + "unit": "-", + "description": "Use transition Running->Stopping to set StartMode=running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeStopTrig", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_StrtMdeAcc": { + "type": "Float32", + "unit": "%", + "description": "Accelerator pedal limit to set StartMode=2", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/X_StrtMdeAcc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeAccRst": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after releasing accelerator pedal", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRst", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeAccRun": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after reaching Running", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeRunning": { + "type": "Float32", + "unit": "s", + "description": "Deley for ICEStatus Running before set of B_StrtMdeRunning", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeRunning", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BrakeRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_BrakeRunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for FC Adapt run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_FCAdaptRunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_RunReqObdDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqObdDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_RunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_TransRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for trans run req to HMI-signal", + "max": 1000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_TransRunReqOnDelayHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_TransRunRqDlyMaxHmi": { + "type": "Float32", + "unit": "km/h", + "description": "Min speed to skip delay on fr trans run request in power meter logic", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/v_TransRunRqDlyMaxHmi", + "configs": [ + [ + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CTFStart": { + "type": "Bool", + "unit": "-", + "description": "Start Change of mind Test Function", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/B_CTFStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_CTF": { + "type": "UInt8", + "unit": "-", + "description": "Change of mind test function. A stop will be requested until a certain rpm threashold is reached.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/D_CTF2", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_CFTStop": { + "type": "Float32", + "unit": "rpm", + "description": "Rpm threashold for requesting a restart", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/n_CFTStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_CTFStop": { + "type": "Float32", + "unit": "s", + "description": "time for reaching a certain value until restart is triggered", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/t_CTFStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq": { + "type": "Bool", + "unit": "-", + "description": "Set fast engagement during ISG-start only after ISG-start has been requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_FastEngmtIsgStrtUseStartReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IgnrCcActive": { + "type": "Bool", + "unit": "-", + "description": "Ignore cruise control active condition", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_IgnrCcActive", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EngmtModSmooth": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode smooth", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModSmooth", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max brake torque request to request fast engagement mode during ISG-start", + "max": 100000, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Tq_FastEngmtIsgStrtBrkTqMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%", + "description": "Min acclerator position to set fast engagement torque demand", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/X_AccPedFastEngmtMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Xd_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%/s", + "description": "Min accelerator pedal derivative to set fast engagement", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Xd_AccPedFastEngmtMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngEngmtFastRstDelay": { + "type": "Float32", + "unit": "ns", + "description": "Delay resetting EngEngmtFast flag since this is used after TransMode == Engaged", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/t_EngEngmtFastRstDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_AccPedDer": { + "type": "Float32", + "unit": "s", + "description": "Time constant of accelerator pedal low pass derivative filter", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/tc_AccPedDer", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_ATComStrt": { + "type": "Bool", + "unit": "-", + "description": "Change of mind situation can set StartAllowedPath (even if PowerTrainDisengaged=0) as long as EngOnReqTrans is still =1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_ATComStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbsStrt": { + "type": "Bool", + "unit": "-", + "description": "Block start if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_AbsStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_BrkStrt": { + "type": "Bool", + "unit": "-", + "description": "Block/delay start if ABS Pump is active (indicated by EngRunngReqByBrk == 1)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_BrkStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_DepStop": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_DepStrt": { + "type": "Bool", + "unit": "", + "description": "Use Dep Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngRunReqTot_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_RunOnReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngRunReqTot_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngRunReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_LosStop": { + "type": "Bool", + "unit": "-", + "description": "UseLOS Stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_LosStrt": { + "type": "Bool", + "unit": "-", + "description": "Use LOS Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PTDStrt": { + "type": "Bool", + "unit": "-", + "description": "Use powertrain disengaged to allow a start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_PTDStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_RcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Use ShutOffReq from VcPpmRc (dual mass flywheel protection)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_RcShutOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_Use7DCT": { + "type": "Bool", + "unit": "-", + "description": "switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_Use7DCT1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseAgedFuel": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FsdPc aged fuel", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseAgedFuel", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseBrake": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseBrake", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseCEC": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from CEC (replaces EMS and TM)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseCEC", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseChas": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseChas", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseClim": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseClim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseDep": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from dependability", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDep", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Driver Leave Logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDrLeave", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseDriver": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDriver", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEMS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEMS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEmLv": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEmLv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEngClntRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngClntRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEngOffMaxTime": { + "type": "Bool", + "unit": "-", + "description": "Enable counter for max time for the engine to be shut off.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOffMaxTime", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEngOnOff": { + "type": "Bool", + "unit": "", + "description": "Hold eng running after an restart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOnOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FC Adaptiotion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFCAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseFanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to Fan Afterrun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFanAfterrun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIceStall": { + "type": "Bool", + "unit": "-", + "description": "Enable engine run request due to engine stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIceStall", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsg": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from 'Isg availble torque'", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIsg", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseLOS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseLOS", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseObd": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseObd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UsePsm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UsePsm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRc": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from PpmRc (Starter protection etc)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRemoteStart": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRemoteStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRunDryInhb": { + "type": "Bool", + "unit": "-", + "description": "1-Block clutch, ISG and 12V Start if RunDry i set, 0-engine start possible.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhb", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRunDryInhbOnly": { + "type": "Bool", + "unit": "-", + "description": "If TRUE, engine can start as soon as RunDry AND RunDryCrnkInhb flags go done, otherwise a car restart is also needed.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhbOnly", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseSapp": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseSapp", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from StabilityCtlr (sVcVmcAwd_D_EngRunReqStabCtrl)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStabCtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseStartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStartAllowedPath", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseTm": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from tm (replace run req EMS in PHEV)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseTotEngRunReq": { + "type": "Bool", + "unit": "", + "description": "Use Total EngRunReqs instead of micro hybrid: wait for driver to be last system", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTotEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseTrans": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseWait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "When enabled, the engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseWait4Eng2Stop", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_StartMode_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_StartMode_swi": { + "type": "Bool", + "unit": "-", + "description": "Calibration of start mode during development", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_EngClntEngOffReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature raises above this value, the ICE is allowed to be stopped", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngOffReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_EngClntEngRunReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature drops below this value, an ICE start is requested", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngRunReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_FanAfterrunLimHi": { + "type": "Float32", + "unit": "%", + "description": "High threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimHi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_FanAfterrunLimLo": { + "type": "Float32", + "unit": "%", + "description": "Low threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimLo", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_IceStallMax": { + "type": "Float32", + "unit": "rpm", + "description": "Maximum engine speed where IceStall signal is allowed to shut down engine", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_IceStallMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLim": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLim", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLimHigh": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHigh", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLimHighTest": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed condition used for testing", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHighTest", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_ATComStrt": { + "type": "Float32", + "unit": "s", + "description": "Duration to allow Change of mind restart (without PowerTrainDisengaged) on AT after EngOnReqTrans deactivation", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_ATComStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_AbsStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no start after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_AbsStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BrkStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding Brake inhibit active (actually ABS pump active), used to ensure no start during ABS pump active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_BrkStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngOffFcAdapt": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request durign FC request condition", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffFcAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngOffMax": { + "type": "Float32", + "unit": "s", + "description": "Max time for the engine to be shut off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngOnOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running after an restart this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOnOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_FanAfterrunDelay": { + "type": "Float32", + "unit": "s", + "description": "Deley for Eng On Req due to afterrun", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_FanAfterrunDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_Wait4Eng2StopTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4Eng2Stop-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4Eng2StopTiOut", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_Wait4EngRunReqTot": { + "type": "Float32", + "unit": "s", + "description": "Time delay for the EngRunReqTot-signal (necessary to solve the algebraic loop caused by the Wait4CluStrt-logic)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4EngRunReqTot", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_WaitToReset": { + "type": "Float32", + "unit": "s", + "description": "for this amount of time, is it ok for all other EngRunReqs to become 0, uhev", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_WaitToReset", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_WaitToReset": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop for a while after EngRunReqDriver condition", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/v_WaitToReset", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "Use transmode request to help buld up C3 oil pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/B_TrnMdeUseC3OilPres", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "deg C", + "description": "Mac gearbox temperature for enabling C3 oil pressure build up function", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/Te_TrnMdeC3OilPresMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "s", + "description": "Max duration to build up oil pressure in C3 clutch", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/t_TrnMdeC3OilPresMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral during C3 oil pressure build up", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/v_TrnMdeC3OilPresMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnEngBlockSkipEngUseReq": { + "type": "Bool", + "unit": "-", + "description": "Skip EngUseReq term in TrnEngBlock logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnEngBlockSkipEngUseReq", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseAwd": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Stability/Traction control run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseAwd", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseBrake": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Brake run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseBrake", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUsePcr": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when PCR run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUsePcr", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Transmission run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseTrans", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_TrnEngBlockMin": { + "type": "Float32", + "unit": "rpm", + "description": "Max speed for blocking TrnMode", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/n_TrnEngBlockMin", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_TrnEngBlockMax": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngBlockMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_TrnEngCatHeatDly": { + "type": "Float32", + "unit": "s", + "description": "delay off for catalyst heat", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngCatHeatDly", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_TrnEngRpmDly": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngRpmDly", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_TrnEngBlockMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed for blocking TrnMode", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/v_TrnEngBlockMax", + "configs": [ + [ + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeReqBrk": { + "type": "Bool", + "unit": "", + "description": "Use EngRunReqBrakes for use with Idle Coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/B_TrnMdeReqBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEradHybrid": { + "type": "Bool", + "unit": "-", + "description": "Activate for hybrid cars with an ERAD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UseEradHybrid", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UsePropFrntRampDown": { + "type": "Bool", + "unit": "-", + "description": "1= Use sVcVmcAjc_Tq_DrPropFrntReq,0 = use sVcDtcCta_Tq_CrShInstReq to determine if torque is ramped down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UsePropFrntRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_DrCrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when driver requested CrSh torque is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_DrCrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when Driver requested CrSh torque is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_PropFrntRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop front is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_PropFrntRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop frontt is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_CrShPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the ICE (when closing the crankshaft path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/t_CrShPahDiTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CrShPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CrShPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CrShaftRampDownIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore to wait for the tq to have ramped out before turning off the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShaftRampDownIgnore", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_DepStopAT": { + "type": "Bool", + "unit": "-", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_DepStopAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngOnDelayIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore delay for EnOnReq off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_EngOnDelayIgnore", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdCrSh": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Crankshaft Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_IgnrPropAlwdCrSh1", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeHev": { + "type": "Bool", + "unit": "-", + "description": "Use Hybrid logic (Enables serial mode) for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHev", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeHevUseNIC": { + "type": "Bool", + "unit": "-", + "description": "Use NIC ih hybrid vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHevUseNIC", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeIC": { + "type": "Bool", + "unit": "", + "description": "Use Idle coast for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeIC", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseOldEngRevStgy": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable the old strategy for engine revving in Park or Neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_UseOldEngRevStgy", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_GearTotNtrl": { + "type": "Int8", + "unit": "-", + "description": "Gear threashold to go to total neutral", + "max": 9, + "min": -1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_GearTotNtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_TransModeReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_TransModeReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeHevReqEngNIC": { + "type": "UInt8", + "unit": "-", + "description": "Transmode NIC request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeHevReqEngNIC", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqEng": { + "type": "UInt8", + "unit": "-", + "description": "Transmode request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqEng", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqNtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqTotNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest total neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqTotNtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_CrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped down", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_CrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_EngOnDelayOff": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed offset from idle for delay of EngOnReq (Off)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/n_EngOnDelayOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngOnDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Deley ftime for EngOnReq off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_EngOnDelayOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_GearLevPNDlyOn": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of gear lever in park or neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_GearLevPNDlyOn", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgIceStopACCTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown during ACC active", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopACCTimeout", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgIceStopTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopTimeout", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EngStopReqAT": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop request", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_EngStopReqAT", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_ReqEngDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_ReqEngDrDir", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlReset": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to exit total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlReset", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlSet": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlSet", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlVehDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlVehDrDir", + "configs": [ + [ + "Vc_Pvc_Hw_B_AT", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "s", + "description": "No stall recoverty to close to fisrt start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtFrstStrtStall", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "", + "description": "demand neutral to be valid for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtNtrlAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on StrtAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallAbortHard", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Engine coolant temperature low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallEngClntL", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "", + "description": "Stallrecoveryonly if an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallGp", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on MicHevMode set to stop/start off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallMicHev", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcShutOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallRcvInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if veh is in higher speed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcvInSpd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Driver Seat Belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSeatBelt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "Set enable stall recovery if vehicle have crashed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSsRcfSet", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "", + "description": "power down after a certain time in stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallTime", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallEmiExtraCond": { + "type": "Bool", + "unit": "-", + "description": "Use extra conditions for StartMode=0 Ice Stall detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallEmiExtraCond", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Activate logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtActrFinishd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "Debug variable to enable ice stall detection during emission starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtEmi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Set stall flag on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcShutOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery in an AT vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAT", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcvAccFtOnPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on acc pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAccFtOnPed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcvClOnly": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery when it is enough with only clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvClOnly", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcvCrnk": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery on driver cranking", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvCrnk", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcvFootOnBrPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on brake pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFootOnBrPed", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRcvFrcd": { + "type": "Bool", + "unit": "s", + "description": "stall recovery if an forced start is conductred", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFrcd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRun": { + "type": "Bool", + "unit": "", + "description": "Allow stall to happen via running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to temporarily prevent StallRun detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunComInhbt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRunHiRes": { + "type": "Bool", + "unit": "-", + "description": "Use sVcEc_n_EngHiRes to detect StallRun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunHiRes", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRunStartM": { + "type": "Bool", + "unit": "-", + "description": "Prevent StallRun if starter motor has engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunStartM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Use stall detection by RPM as input to Unintended Stall flag to EMS", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunUnintd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StallStartM": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallStartM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortClu": { + "type": "Bool", + "unit": "-", + "description": "Clutch start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortClu", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortHard", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortIsg": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection for Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortIsg", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortSoft": { + "type": "Bool", + "unit": "", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortSoft", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abortion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtAcc": { + "type": "Bool", + "unit": "", + "description": "start abort if no accelerator pedal is pressed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtAcc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtCl": { + "type": "Bool", + "unit": "", + "description": "start abort on clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtCl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtDrReady": { + "type": "Bool", + "unit": "-", + "description": "start abort only if not DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtDrReady", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtIce": { + "type": "Bool", + "unit": "", + "description": "Start abort only when ice status is in starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtIce", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtNtrl": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtNtrlValid": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral and neutral is valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrlValid", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtRpm": { + "type": "Bool", + "unit": "", + "description": "start abort on rpm limit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtRpm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtStrtM": { + "type": "Bool", + "unit": "", + "description": "Start abort only when the startmotor is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtStrtM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UnintdStallRcShOff": { + "type": "Bool", + "unit": "-", + "description": "Set Unintended stall on yVcPpmRc_B_ShutOffReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UnintdStallRcShOff", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseClPedAdaptStallRecovery": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStallRecovery1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseClPedAdaptStrtAbrt": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStrtAbrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseDesDrvDir": { + "type": "Bool", + "unit": "-", + "description": "Use desired driver direction as condition for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseDesDrvDir", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseStallRcvBlock": { + "type": "Bool", + "unit": "-", + "description": "Use stall recovery block from FsdPc, empty fuel tank.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseStallRcvBlock", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_AbrtStallEngClntL": { + "type": "Float32", + "unit": "deg C", + "description": "Min Engine Cooland Temperature to do stall recovery", + "max": 160, + "min": -80, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Te_AbrtStallEngClntL", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_StallRcvClNtrl": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClNtrl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_StallRcvClOnly": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClOnly", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_StrtAbrtAcc": { + "type": "Float32", + "unit": "%", + "description": "accelerator pedal limit to deactivate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtAcc", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_StrtAbrtCl": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal released to activate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtCl", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_EngStalled": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stalled", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_EngStalled", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum engine speed for StartMode=0 before an Ice Stall is detected", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallEmiMinEngSpd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_StallRcv": { + "type": "Float32", + "unit": "rpm", + "description": "Max rpm for stall recovery", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallRcv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_StrtAbrtRpm": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to allow a start abortion", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StrtAbrtRpm", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_AbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes re-allowed after first start (set higher value than t_BlockAbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtFrstDrCycle", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_AbrtStall": { + "type": "Float32", + "unit": "s", + "description": "time in stall to trigger a powerdown", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtStall", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BlockAbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes disallowed after first start (set lower value than t_AbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_BlockAbrtFrstDrCycle", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngRunStall": { + "type": "Float32", + "unit": "s", + "description": "Time for engine running before reset stall counter", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_EngRunStall1", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtPahReqTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for an ISG start path request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_IsgStrtPahReqTiOut", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of low engine speed for StartMode=0", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallEmiMinEngSpd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrt": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtActrFinishd": { + "type": "Float32", + "unit": "s", + "description": "Time delay to detect that the ICE start was not successful after the start actuator is finished", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtActrFinishd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtEmi": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtEmiExtra": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts with extra logic)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmiExtra", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtIsgDrv": { + "type": "Float32", + "unit": "ns", + "description": "Time from EngOnReq until a stall is determined when performing an ISG-start while gear leaver is placed in Drive (only for HEP7)", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtIsgDrv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallRcvClDelay": { + "type": "Float32", + "unit": "s", + "description": "Time delay until clutch sets OK to start.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvClDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallRcvNeutral": { + "type": "Float32", + "unit": "s", + "description": "Time in Neutral until trigger start", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvNeutral", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallRun": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRun", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallRunComInhbt": { + "type": "Float32", + "unit": "s", + "description": "Max time that ChangeOfMindInhibit signal can override StallRun detection", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunComInhbt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallRunUnintd": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until an Unintended stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunUnintd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StallStrtM": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallStrtM", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_StrtAbrt": { + "type": "Float32", + "unit": "s", + "description": "time from triggering an start abortion until requesting an stall", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StrtAbrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_StallRcvStart": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed to allow stall restart on only cl or/and neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallRcvStart", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_StallReset": { + "type": "Float32", + "unit": "km/h", + "description": "Stall recovery when vehicle is near standing still", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallReset", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_VehMaxStallRcv": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to do stall recovery", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_VehMaxStallRcv", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_ERADTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override EradTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_ERADTqAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EradIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Erad Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradIgnrPathDisable", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EradPathEnable_dbi": { + "type": "Bool", + "unit": "", + "description": "override EradPath with this switch,", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EradPathEnable_swi": { + "type": "Bool", + "unit": "", + "description": "override EradPath using this switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EradRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_EradReqWhl, If 0 => sVcIsc_Tq_Erad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradRmpDwnTqSignal", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi": { + "type": "Int8", + "unit": "-", + "description": "Debug value", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_ERADRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/Tq_ERADRampDown", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EradDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradDisable", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EradNtrlGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time in neutral for Erad disable", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradNtrlGlitch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EradOffGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time disengage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOffGlitch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EradOnGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time engage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOnGlitch", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EradOffSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad disengage speed to high", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOffSpdLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EradOnSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad engage speed limit", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOnSpdLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EradSpdCtrl": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed to request erad idle speed (speed control)", + "max": 500, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradSpdCtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEradCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/B_UseEradCode", + "configs": [ + [ + "Vc_Pvc_Hw_B_Erad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding1": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding2": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding3": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding3", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding4": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding4", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseAwdRoadGrad": { + "type": "Bool", + "unit": "-", + "description": "Use Awd road grad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/B_UseAwdRoadGrad", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_LatAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Lat acc filter constant", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/tc_LatAccFilt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna": { + "type": "Bool", + "unit": "-", + "description": "Enable aborting ISG-start in D/R", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtGearLvrDRAbortEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtInDUseEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Trigger ISG-start in D if Efad actual path is already ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtInDUseEfadPathAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStrtAtStndStill": { + "type": "Bool", + "unit": "-", + "description": "When enabled, every engine start will be an ISG-start when standing still and brakes are applied", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_UseIsgStrtAtStndStill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadIsgStrLoosenLim": { + "type": "UInt8", + "unit": "-", + "description": "When the number of ISG start attempts exceed this limit, the conditions for the next ISG-start attempt will be loosen", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/D_EfadIsgStrLoosenLim", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_Efad12VStrtEngClntMin": { + "type": "Float32", + "unit": "deg C", + "description": "Minimum coolant temperature to allow 12V-starts", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Te_Efad12VStrtEngClntMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtDiFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDiFlt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtEnaFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEnaFlt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of requested brake torque when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_BrkLimIsgStrtGearLvrDR", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtWhlTrqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of the driver request being low enough to request an ISG-start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_IsgStrtWhlTrqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "ns", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of vehicle speed when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_VehSpdLimIsgStrtGearLvrDR", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "m/s", + "description": "Vehicle speed limit to be able to request an ISG-start when gear lever is placed in Drive", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/v_VehSpdLimIsgStrtGearLvrDR", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_Efad12VStrtEnblIngoreDep": { + "type": "Bool", + "unit": "-", + "description": "If false 12VStartEnable can not be set without having permission from Dep(StartAllowed = True)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_Efad12VStrtEnblIngoreDep", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadUse12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_EfadUse12VStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadUseFactory12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable/disable forced 12V-start when in factory mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_EfadUseFactory12VStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseDly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Enable delay of 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseDly12VStrtVehPwrUp", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseWait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseWait4CluStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_IceStsStarting": { + "type": "UInt8", + "unit": "-", + "description": "An extra calibration possibility to block a start actuator", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/D_IceStsStarting", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_Wait4CluStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is above this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_Wait4CluStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is below this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_Wait4CluStrtDi": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_Wait4CluStrtEna": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_a_Wait4CluStrtDi": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_a_Wait4CluStrtEna": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_12VStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow 12V start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/n_12VStrtAllwdEngSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_FirstStrtDlyOff": { + "type": "Float32", + "unit": "s", + "description": "Time out delay for waiting with an ISG-start request during first start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_FirstStrtDlyOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_Wait4CluStrtTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4ClutStart-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_Wait4CluStrtTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_tc_VdmAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for vehicle acceleration signal from VDM", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/tc_VdmAccFilt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_Efad12VStartMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed for 12V start motor crank", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMax1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_Efad12VStartMin": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed for 12V start motor crank", + "max": 250, + "min": -250, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/B_UseEngOnReqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_TrnOil": { + "type": "Float32", + "unit": "deg C", + "description": "Allow for a longer first start time (from button press to ICE running) if the transmission oil temperature is low", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Te_TrnOil", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_IsgStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/n_IsgStrtAllwdEngSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_rt_EfadLowAvailTrq": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque losses to allow an ISG-start attempt", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/rt_EfadLowAvailTrq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_DrvCycActvFirstStrt": { + "type": "Float32", + "unit": "s", + "description": "Timeout for first start logic connected to the DriveCycleActive signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_DrvCycActvFirstStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadLowAvailTrqDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of maximum Efad torque losses to allow an ISG-start attempt", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EfadLowAvailTrqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngOnReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay for EngOnReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EngOnReqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CluStrtInDeplBlk": { + "type": "Bool", + "unit": "-", + "description": "Block Clutch Start in Depletion Operation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_CluStrtInDeplBlk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IgnrDepl": { + "type": "Bool", + "unit": "-", + "description": "When enabled, this label will ignore the depletion-conditon for blocking clutch starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IgnrDepl", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna": { + "type": "Bool", + "unit": "-", + "description": "Block clutch start if run req is set by fast ISG stop function, to enable use of ISG-start in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IsgStopRunReqCluStrtBlkEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "Protection for only blocking clutch start when 12V starter is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_Use12vStrtPsblInCluStrtAbort", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRespStartReqFromDeDmm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from DeDmm for blocking CluStrt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartReqFromDeDmm", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRespStartreqFromVmcEm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from VmcEm for evaluating CluuStrtBlk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartreqFromVmcEm", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw": { + "type": "Bool", + "unit": "-", + "description": "Choose which resp start request to block the possiblity to request a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStrtReqInCluStrtAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseTqOffsForCluStrtEval": { + "type": "Bool", + "unit": "-", + "description": "Inhibit clutch start if no Efad torque reserve is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseTqOffsForCluStrtEval", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_n_CluStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow clutch start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/n_CluStrtAllwdEngSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_CluStrtSpdAllw": { + "type": "Float32", + "unit": "km/h", + "description": "Speed-limits for allowing clu-strt instead of 12V start", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/v_CluStrtSpdAllw", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStrtTrigNewPos": { + "type": "Bool", + "unit": "-", + "description": "Use new position of flank trigger for 12V-start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtTrigNewPos", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CluStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CluStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CluStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_CluStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadUseCluStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseCluStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadUseIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseIsgStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPahReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPahReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_Efad12VStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of 12V start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_Efad12VStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadCluStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of clutch start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadCluStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadIsgStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of ISG start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadIsgStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_rt_EfadStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque loss to permit Efad start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/rt_EfadStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_12VStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_12VStrtActrRdyDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_CluStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_CluStrtActrRdyDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from Efad or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_EfadRunReqDelay", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IceRunng12VStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for a 12V-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunng12VStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IceRunngCluStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an clutch-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngCluStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IceRunngIsgStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngIsgStrt", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IsgStrtActrRdyDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadCluStrtDi": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to prevent a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtDi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadCluStrtEna": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to enable a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request during cat heating", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_CatHeatVehSpdOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_VehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_VehSpdOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrvHybridEco", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Ignore actual Efad path to allow eng run req ISG stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_IsgStopRunReqIgnrEfadPathAct", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request after ISG-stop is completed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopPostRunReqStandstill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqCoast", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqStandstill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngRunReqIsgStopMax": { + "type": "Float32", + "unit": "s", + "description": "Max time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EngRunReqIsgStopMin": { + "type": "Float32", + "unit": "s", + "description": "Min time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_TrnModIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode signal to be used for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_TrnModIsgReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseChargeInIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Use Charge from VmcEm for concidering IsgReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseChargeInIsgReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when braking in stand still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStandStill": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when standing still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStandStill", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopCoast", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopPwrDwn", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_EfadBrkOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBrkTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "VcVmcBsl torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBslTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqHyst": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast, hysteresis", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqHyst1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMin": { + "type": "Float32", + "unit": "Nm", + "description": "Min driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMin", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "%", + "description": "Acc ped limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_EfadAccPedOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_IsgStopRoadGradMax": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_X_IsgStopRoadGradMaxHyst": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill, hysteresis", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMaxHyst", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_ChrgReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay time for Em_B_ChrgReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_ChrgReqDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the acc ped level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadAccPedOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the brake torque level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadBrkOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadIceStsDlyIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection that Pmm_D_IceStatus = running", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadIceStsDlyIsgDrv", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadVehSpdOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_GearLevNDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Neutral", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_GearLevNDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of brake torque OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBrkTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of VcVmcBsl torque request being low enough for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBslTqOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of vehicle speed OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillVehSpdOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdNOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdOKIsgBrk", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed is low enough for an ISG-request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStandStillVehSpdOK", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdHyst": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast, hysteresis", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdHyst", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMinOff": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOff", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMinOn": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOn", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadGearLvrPNDisengEna": { + "type": "Bool", + "unit": "-", + "description": "Disengage Efad in gear lever position Park and Neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadGearLvrPNDisengEna", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnaParkEngd": { + "type": "Bool", + "unit": "-", + "description": "Enable Efad path disregarding park engaged status", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnaParkEngd", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdEfad": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Efad Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdEfad", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdIsg": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Isg Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdIsg", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadModReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadModReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadPathAllwd1": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd1", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadPathAllwd2": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadPathReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_EfadPathReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadDrvCycTiOut": { + "type": "Float32", + "unit": "s", + "description": "Limit for drivecycle timeout indication", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadDrvCycTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadGearLvrPNDetn": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of when the gear lever is in park or neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadGearLvrPNDetn", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the EFAD path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadPahDiTiOut2", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadShftProgsOffDly": { + "type": "Float32", + "unit": "s", + "description": "CAN delay compensation for EfadShiftInProgress-signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsOffDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadShftProgsTimeOut": { + "type": "Float32", + "unit": "s", + "description": "Time out detection for Efad gear shifting", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsTimeOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_EfadTrqAllowTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout before torque allow from dep disables Tq-ctrl", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadTrqAllowTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_GearLevDRDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Drive or Reverese", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_GearLevDRDly", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgDrCycStop": { + "type": "Float32", + "unit": "s", + "description": "Keep ISG activation for a short time after engine has been stopped", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStop", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgDrCycStopMax": { + "type": "Float32", + "unit": "s", + "description": "Allow keep ISG activation after end of drive cycle, intended for soft stop", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStopMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the ISG path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgPahDiTiOut", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_EfadGearLvrPNDiseng": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to keep Efad engaged to wheels in P/N", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/v_EfadGearLvrPNDiseng", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseEfadCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/B_UseEfadCode", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_12VStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_dbi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_swi", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtFirstStartOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtFirstStartOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPcrOverride": { + "type": "Bool", + "unit": "-", + "description": "Override PCR in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtPcrOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtRunDryOverride": { + "type": "Bool", + "unit": "-", + "description": "Override run dry condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtRunDryOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtSpdCtrlOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtSpdCtrlOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtTempOverride": { + "type": "Bool", + "unit": "-", + "description": "Override temp condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtTempOverride", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseOilTemp": { + "type": "Bool", + "unit": "-", + "description": "Use oil temperature to determine if ISG start i possible", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_UseOilTemp", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Pw_IsgStrtAllow": { + "type": "Float32", + "unit": "W", + "description": "Minimum available ISG power to allow ISG start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Pw_IsgStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Te_IsgStartPossible": { + "type": "Float32", + "unit": "deg C", + "description": "Use oil temperature to determine if ISG start i possible", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Te_IsgStartPossible", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_rt_IsgStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/rt_IsgStrtAllow", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from ISG or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgRunReqDelay", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtOkDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay to wait on Isg start Ok", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/t_IsgStrtOkDelay", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_v_12VStrtMax": { + "type": "Float32", + "unit": "km/h", + "description": "Maximum speed for 12V start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/v_12VStrtMax", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtUseSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/B_IsgStrtUseSpdCtrl", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_ISGTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override ISGTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_ISGTqAllw", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Isg Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgIgnrPathDisable", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_IsgRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_IsgReq, If 0 => sVcIsc_Tq_Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgRmpDwnTqSignal", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_SkipIsgCalibration": { + "type": "Bool", + "unit": "-", + "description": "Skip ISG standby request at Ice stop for sensor calibration", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_SkipIsgCalibration", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgSpdCtrlStrt": { + "type": "Bool", + "unit": "-", + "description": "Use ISG speed control during safe start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_UseIsgSpdCtrlStrt", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_IsgRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Tq_IsgRampDown", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgAdapt": { + "type": "Float32", + "unit": "s", + "description": "Time for ISG calibration request", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgAdapt", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgDisable", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_IsgICEStop": { + "type": "Float32", + "unit": "s", + "description": "Delay on for ICE stop for ISG stanby request", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgICEStop", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIsgCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/B_UseIsgCode", + "configs": [ + [ + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_Tq_TransHeatReqOffset": { + "type": "Float32", + "unit": "Nm", + "description": "Torque offset to reset heat request to TmStrt", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReqOffset", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_t_TransHeatDelayOn": { + "type": "Float32", + "unit": "s", + "description": "Delay on time for trans heat request", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/t_TransHeatDelayOn", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_PTDGearLevAT": { + "type": "Bool", + "unit": "-", + "description": "Use Gear Lever position to set powertrain disengaged.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_PTDGearLevAT", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseIceEnable": { + "type": "Bool", + "unit": "-", + "description": "Use ICE enable", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseIceEnable", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseOld12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOld12VStrtAllwd", + "configs": [ + [ + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_UseOldEngStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOldEngStrtAllwd", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngOnReq_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_dbi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngOnReq_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_swi", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_B_EngineArchitecture": { + "type": "Bool", + "unit": "-", + "description": "Switch for signal conditioning depending on engine architecture. 0= VEA GEN I/II ; 1= GEP3", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/B_EngineArchitecture", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "cVcVmcPmm_D_DrDoorOpen": { + "type": "UInt8", + "unit": "-", + "description": "DoorDrvrSts detection of driver door open", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/D_DrDoorOpen", + "configs": [ + [ + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": 1 + }, + "tVcVmcPmm_p_BrVacuumVeh_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh_x", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 7 + ] + }, + "tVcVmcPmm_Z_HillGradAcc2deg_x": { + "type": "Float32", + "unit": "m/s2", + "description": "X-value (longit. accel. input), relation of accel. to slope(deg);", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg_x", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 5 + ] + }, + "mVcVmcPmm_tc_HillGradient_c": { + "type": "Float32", + "unit": "Nm", + "description": "Total Wheel Trq Brake", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_c", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 4 + ] + }, + "mVcVmcPmm_tc_HillGradient_r": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_r", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 6 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline_c": { + "type": "Float32", + "unit": "-", + "description": "Road inclination", + "max": 100000, + "min": -100000, + "lsb": 0.0625, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_c", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 8 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline_r": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque", + "max": 100000, + "min": -100000, + "lsb": 0.25, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_r", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 8 + ] + }, + "tVcVmcPmm_Tq_IsgStrtAllow_x": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow_x", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_Tq_TransHeatReq_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq_x", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart, depending on vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": [ + [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 7 + ] + }, + "tVcVmcPmm_Z_HillGradAcc2deg": { + "type": "Float32", + "unit": "Deg", + "description": "Hill Gradient i degree", + "max": 90, + "min": -90, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 5 + ] + }, + "mVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "Hill Gradient Time Constant for filter depending on TrqWhlBrk and Vehicle Speed.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": [ + [ + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 6, + 4 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": [ + [ + "Vc_Pvc_Hw_B_Efad", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 8, + 8 + ] + }, + "tVcVmcPmm_Tq_IsgStrtAllow": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum available ISG torque to allow ISG start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": [ + [ + "Vc_Pvc_Hw_B_12VStartMotor", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_Tq_TransHeatReq": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum torque to send heat request to TmStrt to warm transmission oil", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq", + "configs": [ + [ + "Vc_Pvc_Hw_B_TqConverterGbx", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1000_Hev_11" + ] + ], + "width": [ + 1, + 6 + ] + } + } +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/config_VcVmcPmm__HEP7.json b/tests/pybuild/reference_files/config_VcVmcPmm__HEP7.json new file mode 100644 index 0000000..766f3f1 --- /dev/null +++ b/tests/pybuild/reference_files/config_VcVmcPmm__HEP7.json @@ -0,0 +1,14720 @@ +{ + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": { + "yVcVmcPmm_B_EngOnReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngOnReq", + "name": "yVcVmcPmm_B_EngOnReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine on request from CVC, 1 = Engine on 0 = Engine off", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradClutchReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradClutchReq", + "name": "yVcVmcPmm_B_EradClutchReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Request state of ERAD disconnect clutch", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_TransModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_TransModeReq", + "name": "sVcVmcPmm_D_TransModeReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_CrShPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_CrShPathEnable", + "name": "yVcVmcPmm_B_CrShPathEnable", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "enables the crankshaft path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradPathEnable", + "name": "yVcVmcPmm_B_EradPathEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "enables the erad path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_IceStatus": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IceStatus", + "name": "sVcVmcPmm_D_IceStatus", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current status of the ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_WhlMotSysModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EradModeReq", + "name": "sVcVmcPmm_D_WhlMotSysModReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Mode request for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_IsgModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IsgModeReq", + "name": "sVcVmcPmm_D_IsgModReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9))", + "description": "Mode request for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_PowerDownReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_PowerDownReq", + "name": "yVcVmcPmm_B_PowerDownReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTot": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngRunReqTot", + "name": "yVcVmcPmm_B_EngRunReqTot", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsActive", + "name": "yVcVmcPmm_B_SsActive", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsRcfAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsRcfAct", + "name": "yVcVmcPmm_B_SsRcfAct", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Flag to indicate the reconfiguration has been activated (Stop/Start request inhibited).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqEms": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms", + "name": "yVcVmcPmm_B_EngRunReqEms", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms1", + "name": "yVcVmcPmm_B_EngRunReqEmLv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms2", + "name": "yVcVmcPmm_B_EngRunReqClim", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_StallPwdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_StallPwdReq", + "name": "yVcVmcPmm_B_StallPwdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stall power down request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqBrake": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms3", + "name": "yVcVmcPmm_B_EngRunReqBrake", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IceStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_IceStall", + "name": "yVcVmcPmm_B_IceStall", + "configs": "((ALWAYS_ACTIVE))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_StartMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_StartMode", + "name": "sVcVmcPmm_D_StartMode", + "configs": "((ALWAYS_ACTIVE))", + "description": "Type of requested start. (0=Normal, 1=Fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsAmbFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAmbFault", + "name": "yVcVmcPmm_B_SsAmbFault", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Ambient temp out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqHG": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqHG", + "name": "sVcVmcPmm_D_EngRunReqHG", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "description": "Engine running request for hill gradient", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqBrkVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac", + "name": "sVcVmcPmm_D_EngRunReqBrkVac", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "description": "Engine running request brake vacuum", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqFanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms4", + "name": "yVcVmcPmm_B_EngRunReqFanAfterrun", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTrans": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms5", + "name": "yVcVmcPmm_B_EngRunReqTrans", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms7", + "name": "yVcVmcPmm_B_12VStartEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms8", + "name": "yVcVmcPmm_B_IsgStartReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Isg in torque control", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_FCAdaptReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms9", + "name": "yVcVmcPmm_B_FCAdaptReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine request fuel adaption", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac1", + "name": "yVcVmcPmm_B_EngRunReqTm", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request from Tm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_RunReqDriverHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms10", + "name": "yVcVmcPmm_B_RunReqDriverHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "Driver run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_RunReqSystemHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac2", + "name": "yVcVmcPmm_B_RunReqSystemHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "System run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_Z_HillGradientDeg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_Z_HillGradientDeg", + "name": "sVcVmcPmm_Z_HillGradientDeg", + "configs": "((ALWAYS_ACTIVE))", + "description": "Electrical park brake Hill gradient estimation", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_BlockPushStartHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms11", + "name": "yVcVmcPmm_B_BlockPushStartHMI", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Info to HMI to not show Press Start Button msg if powerdown on door open and belt off - do not hide Ignition On msg", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_UnintdStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms12", + "name": "yVcVmcPmm_B_UnintdStall", + "configs": "((ALWAYS_ACTIVE))", + "description": "Unintended stall flag", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActSeatBeltHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms13", + "name": "yVcVmcPmm_B_SsActSeatBeltHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to driver seat belt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActDoorOpenHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms14", + "name": "yVcVmcPmm_B_SsActDoorOpenHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to opened driver door", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsAltitudeFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault", + "name": "yVcVmcPmm_B_SsAltitudeFault", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Altitude / ambient pressure out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActTrailerHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms15", + "name": "yVcVmcPmm_B_SsActTrailerHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to trailer connected (including other conditions)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActAmbHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms16", + "name": "yVcVmcPmm_B_SsActAmbHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to ambient temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActHoodHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms17", + "name": "yVcVmcPmm_B_SsActHoodHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to hood open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms18", + "name": "yVcVmcPmm_B_EngRunReqRc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Info to HMI that EngRunReq from PpmRc (Starter protection etc) is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradDrReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms19", + "name": "yVcVmcPmm_B_EradDrReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad Activavtion is requested by driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms20", + "name": "yVcVmcPmm_B_IsgActReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9))", + "description": "Isg is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_TransHeatReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault1", + "name": "yVcVmcPmm_B_TransHeatReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "description": "Transmission heat request to TmStrt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault2", + "name": "sVcVmcPmm_D_EngRunReqLogg", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4294970000, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngOnReqEng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault3", + "name": "yVcVmcPmm_B_EngOnReqEng", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad) || (Vc_Pvc_Hw_B_AT))", + "description": "EngOnReqEng", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault4", + "name": "sVcVmcPmm_D_EngRunReqClim", + "configs": "((ALWAYS_ACTIVE))", + "description": "EngRunReq from Climate, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault5", + "name": "sVcVmcPmm_D_EngRunReqEmLv", + "configs": "((ALWAYS_ACTIVE))", + "description": "EngRunReq from Power Supply, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqSapp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault6", + "name": "yVcVmcPmm_B_EngRunReqSapp", + "configs": "((ALWAYS_ACTIVE))", + "description": "EngRunReq from Parking Assistance, via VcVmcPmm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActDrMdHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault7", + "name": "yVcVmcPmm_B_SsActDrMdHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Stop/Start inhibition by DriveMode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActAbsHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault8", + "name": "yVcVmcPmm_B_SsActAbsHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Stop/Start inhibition by ABS activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault9", + "name": "yVcVmcPmm_B_PwrUpIceStrtReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ice start request at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault10", + "name": "yVcVmcPmm_B_EngRunReqObd", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "Run request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault11", + "name": "yVcVmcPmm_B_EngRunReqFuel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "Run request by fuel age", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_AutoParkReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault12", + "name": "yVcVmcPmm_B_AutoParkReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Autopark request from driver leave function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EfadPathReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGscCts_D_EfadPathAct", + "name": "sVcVmcPmm_D_EfadPathReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "EFAD path request (0=Don't care 1=Efad2Ice 2=Efad2Whl 5=Disengaged)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_ClutchStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault13", + "name": "yVcVmcPmm_B_ClutchStartReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Clutch ICE start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault14", + "name": "yVcVmcPmm_B_IsgPathEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "The ISG path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EfadPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault15", + "name": "yVcVmcPmm_B_EfadPathEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "The EFAD path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_TrnEngageReqHev": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault16", + "name": "yVcVmcPmm_B_TrnEngageReqHev", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Transmission engage request in hybrid vehicles", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_WhlMotSysCluOperTypReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault17", + "name": "sVcVmcPmm_D_WhlMotSysCluOperTypReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Control signal for diff-speed direction and response level of clutch engagement", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EfadActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault18", + "name": "yVcVmcPmm_B_EfadActReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "The electric motor (EFAD) is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngagementMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault19", + "name": "sVcVmcPmm_D_EngagementMode", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "description": "Engagement mode (1=smooth, 2=fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgStrtPahReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault20", + "name": "yVcVmcPmm_B_IsgStrtPahReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request to open the ISG path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_FastIsgStopReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault21", + "name": "yVcVmcPmm_B_FastIsgStopReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request for fast Efad reconfiguration for ISG stop", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcScIn_v_VehSpdLgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_v_Veh", + "name": "sVcScIn_v_VehSpdLgt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (VcVmcPmm__HEP7_1150_Gradient_estimation_2) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_Eng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_Eng", + "name": "sVcEc_n_Eng", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Engine speed", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_EngRunReqDriver": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EngRunReqDriver", + "name": "sVcDeDmm_D_EngRunReqDriver", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Engine running request from driver mode manager", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcm_D_EngRunngReqByClima": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcAc_B_EngRunReqClim", + "name": "sVcCcm_D_EngRunngReqByClima", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_D_EngRunngReqByBrk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_EngRunReqBrake", + "name": "sVcVdm_D_EngRunngReqByBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Enging run request from BCM (VDM)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseGb_D_TrsmEngRunReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcTc_B_EngRunReqTrans", + "name": "sVcDseGb_D_TrsmEngRunReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_EngRunReqEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_EngRunReqEMS", + "name": "sVcEc_D_EngRunReqEMS", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request (inhibit stop) from EMS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcIem_B_WhlMotSysCluSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcIsc_B_EradClutch", + "name": "yVcIem_B_WhlMotSysCluSts", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "ERAD clutch status. 0 = clutch open 1 = clutch closed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcMtcTc_Tq_EradReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcTc_Tq_EradReq", + "name": "sVcMtcTc_Tq_EradReqWhl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Requested ERAD Torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PropulsionAllowed", + "name": "yVcPpmPsm_B_PropulsionAllowed", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Determine if it is allowed to apply tq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_PowertrainDisengaged": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PowertrainDisengaged", + "name": "yVcScIn_B_PowertrainDisengaged", + "configs": "((ALWAYS_ACTIVE))", + "description": "Determines if powertrain is disengaged or not", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_GearLevAT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT", + "name": "sVcDtcAtr_D_GearLevAT", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Gear Lever Position", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcAtr_B_AT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcGp_D_GearBox", + "name": "yVcDtcAtr_B_AT", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Automatic gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcEm_D_EngRunReqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm", + "name": "sVcVmcEm_D_EngRunReqEm", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request from Energy Management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_IceEnabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_IceEnabled", + "configs": "((ALWAYS_ACTIVE))", + "description": "Internal Combustion Engine Enabel (this includes both enabel for remotestart and enabel for propulsion(DriveCycle active))", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAsy_D_EngRunngReqByParkAssi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPam_D_EngRunReqSapp", + "name": "sVcAsy_D_EngRunngReqByParkAssi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_StartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StartAllowed", + "name": "yVcDepSs_B_StartAllowed", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Start allowance from Dependability monitoring: 1 = Start initiation is allowed, 0 = start initiation not allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_StopAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StopAllowed", + "name": "yVcDepSs_B_StopAllowed", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "description": "Stop of engine allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcCta_Tq_CrShInstReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcCta_Tq_CrShInstReq", + "name": "sVcDtcCta_Tq_CrShInstReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Total requested crankshaft torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EcoModeSs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode", + "name": "yVcDeDmm_B_EcoModeSs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_MicHevMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDeDmm_D_MicHevMode", + "name": "sVcDeDmm_D_MicHevMode", + "configs": "((ALWAYS_ACTIVE))", + "description": "Micro hybrid mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_DrReady": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DrReady", + "name": "yVcPpmPsm_B_DrReady", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Driver has requested a PowerUp or a PowerDown", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScDep_X_ClutchPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDi_X_ClPed", + "name": "sVcScDep_X_ClutchPedalPos", + "configs": "((ALWAYS_ACTIVE))", + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_AbsCtrlActv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_AbsCtrl", + "name": "yVcVdm_B_AbsCtrlActv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Anti Blocking Systems (ABS) control is active (at least one wheel)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_EngFastStop": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_EngFastStop", + "name": "yVcDepSs_B_EngFastStop", + "configs": "((ALWAYS_ACTIVE))", + "description": "Emergency Fast stop from dependability. 1= Stop, 0 = Dont care", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_StartMotor": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_StartMotor", + "name": "yVcEc_B_StartMotor", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current status of the Start motor 1= running,0 = not running", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Te_Amb", + "name": "sVcEc_Te_Amb", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Ambient (outdoor) temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 120, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Qf_TeAmb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Qf_TeAmb", + "name": "sVcEc_Qf_TeAmb", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Quality factor for ambient temperature", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_SsRcfSetAlt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_SsRcfSetAlt", + "name": "yVcEc_B_SsRcfSetAlt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Reconfiguration flag for normal functionality. Placeholder to be used if needed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_p_PVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_p_BrVacuum", + "name": "sVcVdm_p_PVac", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "description": "Brake vacuum pressure", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_ForcedStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_ForcedStart", + "name": "yVcPpmPsm_B_ForcedStart", + "configs": "((ALWAYS_ACTIVE))", + "description": "Driver is forcing a start eg rolling the vehicle to active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcGp_D_StopStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGp_D_StopStart", + "name": "sVcGp_D_StopStart", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Car config: Stop Start (1 = no start stop,2 = start stop)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_NeutralMTValid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_NeutralMTValid", + "name": "yVcScDep_B_NeutralMTValid", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Neutral adaption finished", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_BltLockStAtDrvr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle7", + "name": "yVcCem_B_BltLockStAtDrvr", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Driver seat buckle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_FootOnClutchPedalASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_FootOnClutchPedal", + "name": "yVcScDep_B_FootOnClutchPedalASILB", + "configs": "((ALWAYS_ACTIVE))", + "description": "tbd", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmPsm_D_EngRunReqPsm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPpmPsm_D_EngRunReqPsm", + "name": "sVcPpmPsm_D_EngRunReqPsm", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_BrkFricTqAtWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_Tq_TotWhBrk1", + "name": "sVcDseWt_Tq_BrkFricTqAtWhl", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "description": "Total friction brake torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 32763, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_X_AccPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDi_X_AccPed1", + "name": "sVcScIn_X_AccPedalPos", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Accelerator Pedal Position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StrtAbortSoft": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortSoft", + "name": "yVcPpmRc_B_StrtAbortSoft", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cranking is aborted by VcPpmRc and restart can be done automaticaly without requiring new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StrtAbortHard": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard", + "name": "yVcPpmRc_B_StrtAbortHard", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Cranking is aborted by VcPpmRc and restart requires new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_TrnEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard1", + "name": "yVcDeDmm_B_TrnEngageRqDr", + "configs": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_AT))", + "description": "transmission engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EradEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable1", + "name": "yVcDeDmm_B_EradEngageRqDr", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_EradEngageRqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable2", + "name": "yVcVmcEm_B_EradEngageRqEm", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_SsRcfSet": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc2", + "name": "yVcEc_B_SsRcfSet", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Reconfiguration flag to dependability to deny stop/start functionality.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_VehSpdDirRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc3", + "name": "yVcScIn_B_VehSpdDirRvs", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "description": "Vehicle speed is in reverse direction", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_VehSpdLgtOk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc5", + "name": "yVcScIn_B_VehSpdLgtOk", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "description": "Vehicle Speed Ok", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmAf_Z_FanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc4", + "name": "sVcTmAf_Z_FanAfterrun", + "configs": "((ALWAYS_ACTIVE))", + "description": "predicted fan step if engine stops", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive", + "name": "yVcEc_B_TCMNodeAlive", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "TCM node alive (1=communication works)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTrm_B_TrlrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear1", + "name": "yVcTrm_B_TrlrPrsnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Trailer Present", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvrBrkgASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive1", + "name": "yVcScIn_B_DrvrBrkgASILB", + "configs": "((ALWAYS_ACTIVE))", + "description": "Driver is pressing the brake pedal to at ASIL B integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_FootOnClutchPedal": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_ClutchNonFailed", + "name": "yVcScDep_B_FootOnClutchPedal", + "configs": "((ALWAYS_ACTIVE))", + "description": "Clutch pedal indicate pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_PropRear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc8", + "name": "sVcDseWt_Tq_PropRear", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Actual Propuslion Torque on rear wheels (=ERAD Torque)", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcTc_Tq_IsgReqCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc7", + "name": "sVcDtcTc_Tq_IsgReqCrSh", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "description": "Requested ISG Torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseCt_Tq_IsgCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive2", + "name": "sVcDseCt_Tq_IsgCrSh", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "description": "Actual Isg torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvgDirFwdDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear2", + "name": "yVcScIn_B_DrvgDirFwdDes", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Driver desired propulsion direction is forward", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvgDirRvsDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive3", + "name": "yVcScIn_B_DrvgDirRvsDes", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Driver desired propulsion direction is reverse", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_EngCooltT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive4", + "name": "sVcEc_Te_EngCooltT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Real time value of coolant temp, wide range (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -50, + "max": 150, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive7", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_IsgStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard2", + "name": "yVcDtcSt_B_IsgStrtAbort", + "configs": "((ALWAYS_ACTIVE))", + "description": "ISG start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDsePcr_D_EngRunRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_81", + "name": "sVcDsePcr_D_EngRunRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run request from LOS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_82", + "name": "yVcDsePcr_B_IsgDisableRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Request from LOS to disable ISG", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_83", + "name": "yVcDsePcr_B_EradDisableRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Request from LOS to disable ERAD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EngStartInhibtRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_84", + "name": "yVcDsePcr_B_EngStartInhibtRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request from LOS to inhibit engine start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EngStopRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_85", + "name": "yVcDsePcr_B_EngStopRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request from LOS to stop engine", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmNeutFailr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_2", + "name": "yVcTcm_B_TrsmNeutFailr", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Note: 1 (failure) is set when the transmission can not be put in mode 3, 4 or 5 (neutral), for any reason such as EOP failure etc.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcTc_B_FcReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_3", + "name": "yVcDtcTc_B_FcReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Main conditions for fuelcut enabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_v_VehSpdLgtMax": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive8", + "name": "sVcScIn_v_VehSpdLgtMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Maximum vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmPsm_D_EngRunReqRemote": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear3", + "name": "sVcPpmPsm_D_EngRunReqRemote", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request engine running for remote start", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_n_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive11", + "name": "sVcDtcAtr_n_TrgGear", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "description": "Engine speed at target gear", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcIcl_n_IdleSpdBs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDtcAtr_D_Gear3", + "name": "sVcDtcIcl_n_IdleSpdBs", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (Vc_Pvc_Hw_B_AT))", + "description": "Target idle speed base level", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgStartDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_4", + "name": "yVcDsePcr_B_IsgStartDisableRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Request from LOS to open Charge PSR relay", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcAwd_D_EngRunReqStabCtrl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_5", + "name": "sVcVmcAwd_D_EngRunReqStabCtrl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run req from to ensure that Ice keep running during cornering", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear6", + "name": "sVcVdm_a_ALgt", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "description": "Longitudinal acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Qf_ALgtQf": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc9", + "name": "sVcVdm_Qf_ALgtQf", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "description": "Longitudinal acceleration QF", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAjc_Tq_DrPropFrntReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct1", + "name": "sVcDtcAjc_Tq_DrPropFrntReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Requested Front Axle Torque stability limitations", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmm_D_CarModSts1": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc10", + "name": "sVcVmm_D_CarModSts1", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Car mode from vechicle mode management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_DriveCycleActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_DriveCycleActive", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Driver has entered the driving cycle 1= Active 0 = Not Active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_p_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear7", + "name": "sVcEc_p_Amb", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_TipSport": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc11", + "name": "yVcDeDmm_B_TipSport", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Tip or sport mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_D_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc12", + "name": "sVcCem_D_DoorDrvrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Driver door status (0=Unknown, 1=Opened, 2=Closed)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_Qf_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc13", + "name": "sVcCem_Qf_DoorDrvrSts", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Driver door status quality factor", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_TransMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_6", + "name": "sVcDtcAtr_D_TransMode", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "TransMode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcSpMon_D_PtTrsmModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_7", + "name": "sVcSpMon_D_PtTrsmModReq", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Signal is used for requesting neutral or engaged state of the transmission.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EngRunReqDrReEval": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc14", + "name": "yVcDeDmm_B_EngRunReqDrReEval", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request from driver evaluator to re-evaluate engine run request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_EngHiRes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_EngHiRes", + "name": "sVcEc_n_EngHiRes", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hi resolution engine speed signal", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_D_HoodSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle14", + "name": "sVcCem_D_HoodSts", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Engine compartment hood status 0=Ukwn - Unknown status 1=Opend - Opened 2=Clsd - Closed", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_ShutOffReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle1", + "name": "yVcPpmRc_B_ShutOffReq", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Shut off request to VmcPmm due to two mass flywheel protection", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_StrtInhbReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv", + "name": "yVcCem_B_StrtInhbReq1WdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_StopStrtReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv1", + "name": "yVcCem_B_StopStrtReq1WdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmRc_D_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle2", + "name": "sVcPpmRc_D_EngRunReqRc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run engine (do not S/S stop) due to starter motor over heat protection", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcFsdPc_D_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc1", + "name": "sVcFsdPc_D_EngRunReqFuel", + "configs": "((ALWAYS_ACTIVE))", + "description": "0=OK, 1=Warn, 2 = Start, 3 not used", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepTre_B_ISGTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct3", + "name": "yVcDepTre_B_ISGTqAllw", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "ISG propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcEsc_B_Active": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct10", + "name": "yVcDtcEsc_B_Active", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "description": "Engine speed control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_SafeEngStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct11", + "name": "yVcDsePcr_B_SafeEngStrtReq", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "description": "Safe start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_StrtMdeReq", + "name": "yVcDeDmm_B_RespStartReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Responsive start requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIem_D_WhlMotSysModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct5", + "name": "sVcIem_D_WhlMotSysModSts", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Actual mode for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCidd_D_IsgModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct8", + "name": "sVcCidd_D_IsgModSts", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Actual mode for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Tq_EradMaxAvailWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct9", + "name": "sVcDseEm_Tq_EradMaxAvailWhl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "description": "Maximum available ERAD torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradEngageRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct15", + "name": "yVcDsePcr_B_EradEngageRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Request from Los to engage Erad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_v_VehDrDirectionRaw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive15", + "name": "sVcDtcAtr_v_VehDrDirectionRaw", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx) || (Vc_Pvc_Hw_B_AT))", + "description": "Vehicle speed in driver intended direction unfiltered (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_TransNtrlDisable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct17", + "name": "yVcDsePcr_B_TransNtrlDisable", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Request from LOS to disable request of neutral mode to TCM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_rt_IsgMaxTorqueLoss": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive13", + "name": "sVcDseEm_rt_IsgMaxTorqueLoss", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "ISG torque limit ratio", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_AccFtOnPed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct12", + "name": "yVcScDep_B_AccFtOnPed", + "configs": "((ALWAYS_ACTIVE))", + "description": "Foot on AccPedal ASILC", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFsdPc_B_RunDry": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct13", + "name": "yVcFsdPc_B_RunDry", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Detection of empty tank for protection of the fuel pump", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_TransNtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct14", + "name": "yVcDsePcr_B_TransNtrlRq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Request from LOS too pot transmission in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepTre_B_ERADTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc16", + "name": "yVcDepTre_B_ERADTqAllw", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "ERAD propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_DrvMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct2", + "name": "sVcDeDmm_D_DrvMode", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Propulsion drive mode: 1 Eco plus, 2 Eco plus-plus, 3 Eco reduced, 4 Sport, 5 comfort, 6 XC mode, 7 AWD, 8 Save for later, 9 Pure, 10 Hybrid, 11 Power, 12 N/A, 13 N/A, 14 N/A: 15 N/A", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 15, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrChassie": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct6", + "name": "yVcCem_B_EngRunngReqByVehModMgrChassie", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by chassie", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcObdSch_D_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct18", + "name": "sVcObdSch_D_EngRunReqObd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request from Obd", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct19", + "name": "yVcVmcEm_B_EngageReq", + "configs": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "description": "Drivetrain engage request from EM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_IscActvnEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct20", + "name": "yVcEc_B_IscActvnEMS", + "configs": "((ALWAYS_ACTIVE))", + "description": "Idle speed activation request from EMS", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct21", + "name": "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by electrical system", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrClimate": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct22", + "name": "yVcCem_B_EngRunngReqByVehModMgrClimate", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by climate", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct23", + "name": "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by trailer", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcObdSch_B_FuelCutReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct24", + "name": "yVcObdSch_B_FuelCutReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ful cut request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_ChangeOfMindInhibit": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct25", + "name": "yVcPpmRc_B_ChangeOfMindInhibit", + "configs": "((ALWAYS_ACTIVE))", + "description": "inhibit ChangeOfMind fuel recovery in order to not interfer with the starter motor activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_BCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct26", + "name": "yVcEc_B_BCMNodeAlive", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "description": "BCM Node alive", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss2", + "name": "yVcDsePcr_B_IsgNoTqRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "ISG no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct28", + "name": "yVcDsePcr_B_EradNoTqRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_NICEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct31", + "name": "yVcVmcEm_B_NICEnable", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "NIC enabled by energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgUdcCtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct34", + "name": "yVcDsePcr_B_IsgUdcCtrlRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Request to put ISG in Udc control mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Ps_FCLvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct35", + "name": "sVcEc_Ps_FCLvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current level of FC", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_Te_TrsmOilT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct63", + "name": "sVcTcm_Te_TrsmOilT", + "configs": "((VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Gear box oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -40, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct32", + "name": "yVcDsePcr_B_PwrUpIceStrtReq", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "description": "Request for a combustion engine start at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct36", + "name": "yVcVmcEm_B_PwrUpIceStrtReq", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "description": "Ice start request at startup from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_D_EngRunReqDepTrq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct37", + "name": "sVcScIn_D_EngRunReqDepTrq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request from Dependability torque estimation system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_DrvrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive3", + "name": "yVcScDep_B_DrvrPrsnt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Driver present from CEM and signal received correctly", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_ChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct40", + "name": "yVcVmcEm_B_ChrgReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Charge request in HEP7", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCmnEngRunReqCEC_D_Req": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct41", + "name": "sVcCmnEngRunReqCEC_D_Req", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request ICE to be running / Start ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCmnEngRunReqCEC_B_ReqLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct42", + "name": "yVcCmnEngRunReqCEC_B_ReqLong", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcCtc_D_EfadModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive18", + "name": "sVcDtcCtc_D_EfadModeReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "EM Mode request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseGb_D_EfadPathAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive17", + "name": "sVcDseGb_D_EfadPathAct", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Actual Efad path (1=IsgPath, 2=WhlPath, 5=Disengaged, 6=Transition)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 6, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EfadIsgPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss16", + "name": "yVcDseGb_B_EfadIsgPathNotAvl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Efad Isg path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EfadDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct45", + "name": "yVcDsePcr_B_EfadDisableRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Disable Efad modes of operation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtc_B_CrShPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct7", + "name": "yVcVmcWtc_B_CrShPathDisabled", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "There is no torque from the ICE acting on the front axel", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_NeutralMT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_RemoteRcfSet2", + "name": "yVcScIn_B_NeutralMT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Neutral MT ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcWtd_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcWtd_Tq_FrntReqWhl", + "name": "sVcVmcWtd_Tq_FrntReqWhl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_LockUp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/InPort55", + "name": "sVcDtcAtr_D_LockUp", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual lock-up mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_EngClnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT10", + "name": "sVcEc_Te_EngClnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Real time value of coolant temp (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 160, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEmiHeat_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode34", + "name": "sVcEmiHeat_D_EngUseReq", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Catalyst engine request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCmnSta_B_StaExeTx": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcBc_B_BrPedSw2", + "name": "yVcCmnSta_B_StaExeTx", + "configs": "((ALWAYS_ACTIVE))", + "description": "Start execution", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcInjFuCut_rt_Lvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl1", + "name": "sVcInjFuCut_rt_Lvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Final fuel cut level", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_v_VehDrDirection": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT1", + "name": "sVcDtcAtr_v_VehDrDirection", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Vehicle speed in driver intended direction (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_CluStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl2", + "name": "yVcDtcSt_B_CluStrtAbort", + "configs": "((ALWAYS_ACTIVE))", + "description": "Clutch start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscSgs_B_CluStrtAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT3", + "name": "yVcGscSgs_B_CluStrtAvl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Clutch and gear is available for ICE clutch start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTmStrt_B_EngRunTmLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT2", + "name": "yVcTmStrt_B_EngRunTmLong", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_PrioChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT4", + "name": "yVcVmcEm_B_PrioChrgReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Prio charge request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcAwd_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct29", + "name": "yVcVmcAwd_B_EngageReq", + "configs": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmStrt_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct33", + "name": "sVcTmStrt_D_EngUseReq", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "description": "Engine use request for catalyst heating 0=Dont Care, 1=Low load, 2=Hi load", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EngStopDlyReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct43", + "name": "yVcDseGb_B_EngStopDlyReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Engine stop delay request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_EradEngageModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct47", + "name": "sVcDeDmm_D_EradEngageModeReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage mode", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -128, + "max": 127, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_BrkTqAtWhlsReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_BrPedSw", + "name": "sVcVdm_Tq_BrkTqAtWhlsReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Contains driver requested brake torque and driver support system requested brake torque. The signal is always positive and acts in opposite vehicle motion direction.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16380, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtc_B_EfadPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct16", + "name": "yVcVmcWtc_B_EfadPathDisabled", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "The front axle electric motor path is disabled (i.e. no torque is allowed on the path)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtd_B_EradPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct48", + "name": "yVcVmcWtd_B_EradPathDisabled", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "description": "Erad path disable", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcTc_B_IsgPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct49", + "name": "yVcDtcTc_B_IsgPathDisabled", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Isg path closed (torque ramp finished)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_X_ClPedAdapt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct44", + "name": "sVcDtcAtr_X_ClPedAdapt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscGar_B_EfadShiftInProgress": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm1", + "name": "yVcGscGar_B_EfadShiftInProgress", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Efad shift in progress", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EfadNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/tlop_VcXx_insignal2", + "name": "yVcDsePcr_B_EfadNoTqRq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Information to not request any torque from Efad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EfadWhlPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss1", + "name": "yVcDseGb_B_EfadWhlPathNotAvl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Efad wheel path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVscEcc_B_TrnEngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct50", + "name": "yVcVscEcc_B_TrnEngageReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Trn Engage Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_CluStrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss3", + "name": "yVcDtcSt_B_CluStrtAct", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Clutch start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_StrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct51", + "name": "yVcDtcSt_B_StrtAct", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Isg start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_EngStartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss4", + "name": "yVcDepSs_B_EngStartAllowed", + "configs": "((ALWAYS_ACTIVE))", + "description": "Start of combustion engine is allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct52", + "name": "yVcDepSs_B_12VStartEnable", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "12V System ready for start attempt.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtd_B_FrntAxlePathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct46", + "name": "yVcVmcWtd_B_FrntAxlePathDisabled", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Front axle path is disabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct53", + "name": "yVcVmcEm_B_RespStartReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Response engine start request to set start mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_B_DrMdeFactory": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct54", + "name": "sVcDeDmm_B_DrMdeFactory", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "DriveMode selection is overridden by another mode because of Factory Mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscAsr_B_EfadNoTqReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct55", + "name": "yVcGscAsr_B_EfadNoTqReq", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Request to put Efad in ISG path but with no Efad torque requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEmiGpf_B_FuelCutReqHybrid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct39", + "name": "yVcEmiGpf_B_FuelCutReqHybrid", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fuel cut request for Hybrid", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcBsl_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcBsl_Tq_FrntReqWhl", + "name": "sVcVmcBsl_Tq_FrntReqWhl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmStrt_D_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive9", + "name": "sVcTmStrt_D_EngRunReqTm", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request ICE to be running / Start ICE (Replace RunReqEMS)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAjc_Tq_DrCrShReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct56", + "name": "sVcDtcAjc_Tq_DrCrShReqWhl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Requested crankshaft torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmTeOil_Te_EngOil": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct57", + "name": "sVcTmTeOil_Te_EngOil", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Engine oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -60, + "max": 195, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Tq_IsgMaxAvail": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct58", + "name": "sVcDseEm_Tq_IsgMaxAvail", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Maximum available ISG torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Pw_IsgMaxAllowPrio": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct59", + "name": "sVcDseEm_Pw_IsgMaxAllowPrio", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Maximum allow ISG Powerlimit.", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgtStdFromWhlSpd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct60", + "name": "sVcVdm_a_ALgtStdFromWhlSpd", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Vehicle acceleration over ground", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseEm_B_EngRunReqSocMin": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct61", + "name": "yVcDseEm_B_EngRunReqSocMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "Soc min ice start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct62", + "name": "yVcScIn_B_PropulsionAllowed", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Hw_B_AT))", + "description": "Indicates that propulsive torque is allowed. This includes all actuators. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScDep_D_DrvgDirDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT5", + "name": "sVcScDep_D_DrvgDirDes", + "configs": "((ALWAYS_ACTIVE))", + "description": "EPB application request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcTfa_B_CcActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules36", + "name": "yVcVmcTfa_B_CcActive", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cruise control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_rt_IsgMaxTorqueLossStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT6", + "name": "sVcDseEm_rt_IsgMaxTorqueLossStart", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "EPB application request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_D_EpbSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVdm_D_EpbSts", + "name": "sVcVdm_D_EpbSts", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Epb status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcAwd_X_RoadGrad": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT7", + "name": "sVcVmcAwd_X_RoadGrad", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Actual road gradient", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALat": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_11", + "name": "sVcVdm_a_ALat", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Lateral acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_Depletion": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules1", + "name": "yVcVmcEm_B_Depletion", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "charge mode == depletion", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_EfadMaxElDrvWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct64", + "name": "sVcDseWt_Tq_EfadMaxElDrvWhl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Maximum available EFAD wheel torque for pure electric drive", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMtcAjc_Tq_EfadReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct65", + "name": "sVcMtcAjc_Tq_EfadReqWhl", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Requested rear torque after ERAD drivability filters", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_Charge": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules2", + "name": "yVcVmcEm_B_Charge", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Charge mode active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcTfa_B_CcOrAccActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive", + "name": "yVcVmcTfa_B_CcOrAccActive", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Cruise or Acc is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscPrn_B_EfadRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive1", + "name": "yVcGscPrn_B_EfadRvs", + "configs": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "description": "Reverse with Efad on forward gear", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGbGear_B_ParkLockNotEngd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive2", + "name": "yVcDseGbGear_B_ParkLockNotEngd", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Park lock is not engaged (If FALSE no guarantee for fully engaged park lock)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFsdPc_B_RunDryCrkInhb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb", + "name": "yVcFsdPc_B_RunDryCrkInhb", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run Dry Crank Inhibit", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGbAvl_B_EfadIsgPathAvoid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb1", + "name": "yVcDseGbAvl_B_EfadIsgPathAvoid", + "configs": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "description": "Request to block ISG path when 1st gear is not available or overheating", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": { + "rVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "name": "rVcVmcPmm_D_EngRunReqLogg", + "configs": "((ALWAYS_ACTIVE))", + "description": " [0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "4294970000", + "class": "CVC_DISP" + } + }, + "nvm": {}, + "pre_procs": [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1270_12VStartEnable_10", + "Vc_Pvc_Hw_B_12VStartMotor", + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "Vc_Pvc_Hw_B_AT", + "Vc_Pvc_Hw_B_Efad", + "Vc_Pvc_Hw_B_Erad", + "Vc_Pvc_Hw_B_HVSystem == 0", + "Vc_Pvc_Hw_B_TqConverterGbx", + "Vc_Pvc_Sw_B_StopStart" + ], + "local_vars": { + "xVcVmcPmm_B_AmbTempH": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is above limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunning": { + "type": "Bool", + "unit": "-", + "description": "Engine is running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_rt_FCLvl": { + "type": "Float32", + "unit": "-", + "description": "Final fuel cut level before realisation.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StartedDly": { + "type": "Bool", + "unit": "-", + "description": "Engine running detected (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStopped": { + "type": "Bool", + "unit": "-", + "description": "Engine is stopped", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunningRpmDly": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Started": { + "type": "Bool", + "unit": "-", + "description": "engine running detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunningRpm": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator2", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHGSkipParkPre": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop will be ignored if gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator1", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop is ignored allowing stop trigger in gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator2", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqBrake": { + "type": "UInt8", + "unit": "-", + "description": "Engine running request brakes", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "-", + "description": "brake vacuum start from vacuum level due to vehicle speed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator2", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "xVcVmcPmm_B_BrkVacuumStart": { + "type": "Bool", + "unit": "-", + "description": "Brake vacuum request to start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator3", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "rVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "brake vacum limit in vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "rVcVmcPmm_a_VehAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted acceleration calculated from speed.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/LogicalSwitch/Switch", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_Tq_BrkTrqFilt": { + "type": "Float32", + "unit": "Nm", + "description": "Filted brake trq signal", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Sum2", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_a_MergedAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted merged accelerations signal from EPB and Vehicle speed acc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Sum2", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_a_BcmLongAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted accelerations signal from EPB LongAcc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Sum2", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_GradOutOfLim": { + "type": "Bool", + "unit": "-", + "description": "Out of limits to allow stop start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator2", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_QfFault": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator4", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHGStart": { + "type": "Bool", + "unit": "-", + "description": "Hill Gradient start of engine due to high/low gradient", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator5", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_QfFaultLongAcc": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid for long acc signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator6", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_tc_HillGadient": { + "type": "Float32", + "unit": "s", + "description": "tc for Hillgradient final filter", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/Switch", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_a_SignedHGVehFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Signed vehicle speed acceleration signal. If vehicle is moving backwards.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/Switch", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Hill gradient start of engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1140_Brake_1) || (VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_StandStill": { + "type": "Bool", + "unit": "-", + "description": "Hillgradient calculation for stand still lower then cal value", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator1", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_HGSpdOK": { + "type": "Bool", + "unit": "-", + "description": "Speed Ok to calculate stop inhibit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator5", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_StopInhibitUpHill": { + "type": "Bool", + "unit": "-", + "description": "Stop inhibit uphill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1/LogOp3", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "xVcVmcPmm_B_StopInhibitDownHill": { + "type": "Bool", + "unit": "-", + "description": "Stop Inhibit Down Hill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8/LogOp3", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_a_MergedAccSaturated": { + "type": "Float32", + "unit": "m/s2", + "description": "Saturated merged acceleration signal", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Saturation/MinMax1", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_a_MergedAcc": { + "type": "Float32", + "unit": "m/s2", + "description": "Merged Acc signal (sVcEpb_a_LongAcc-a_HGVehFilt)", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Sum6", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "A/T load compensation for drive and reverse.", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqFCAdapt": { + "type": "UInt8", + "unit": "-", + "description": "FC adapt run req", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FCAdaptAct": { + "type": "Bool", + "unit": "-", + "description": "Fuel cut adapt active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF4/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_DrLeaveKeepRun": { + "type": "Bool", + "unit": "-", + "description": "Keep engine running based on driver leave vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogOp9", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqDrLeave": { + "type": "UInt8", + "unit": "-", + "description": "Engine run req based on driver leave vehicle", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogicalSwitch3/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_DrLeavePowerDownReq": { + "type": "Bool", + "unit": "-", + "description": "Power down request from driver leave", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqPcr": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Pcr", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDriver": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqPsm": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Psm", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqEm": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Energy Management", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "xVcVmcPmm_B_TransBlock": { + "type": "Bool", + "unit": "", + "description": "transmission is being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TransEngOnBlock": { + "type": "Bool", + "unit": "", + "description": "Trans blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TransBlocking": { + "type": "Bool", + "unit": "", + "description": "Transmission is blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EMSBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EMSBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EmLvBlocked": { + "type": "Bool", + "unit": "", + "description": "Em Lv is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_ClimBlocked": { + "type": "Bool", + "unit": "", + "description": "climate is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Engine running request FC Adapt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "xVcVmcPmm_B_TmBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TmBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIsg": { + "type": "Bool", + "unit": "", + "description": "Engine running request ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqRemote": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Engine running request stability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Engine running request driver leave", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqChas": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwitch27/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_ChasBlocked": { + "type": "Bool", + "unit": "-", + "description": "Chassis is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDelay5/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDep": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_CECBlock": { + "type": "Bool", + "unit": "-", + "description": "CEC being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqCEC": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from CEC", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch25/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_CECBlocked": { + "type": "Bool", + "unit": "", + "description": "CEC is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastStart": { + "type": "Bool", + "unit": "-", + "description": "Fast start mode request ISG start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator14", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "xVcVmcPmm_B_SafeISGPrio": { + "type": "Bool", + "unit": "-", + "description": "Priotritzed safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF1/LogOp3", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "xVcVmcPmm_B_SafeISG": { + "type": "Bool", + "unit": "-", + "description": "Safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF2/LogOp3", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "xVcVmcPmm_B_EmiStrt": { + "type": "Bool", + "unit": "-", + "description": "Emission start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp3", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "xVcVmcPmm_B_StrtMdeRunning": { + "type": "Bool", + "unit": "-", + "description": "Restart within drivecycle active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF1/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StrtMdeAcc": { + "type": "Bool", + "unit": "-", + "description": "StartMode on AccPedal detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF2/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_HeatUpEOP": { + "type": "Bool", + "unit": "-", + "description": "Heat of of EOP in progress", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/SR_FF4/LogOp3", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "rVcVmcPmm_Xd_AccPedalPos": { + "type": "Float32", + "unit": "%/s", + "description": "Derivative of accelerator pedal position", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLPF1_pole_v2/LogicalSwitch/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtTrqDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on torque demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtPwrDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on power demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode during ISG-starts in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator10", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngmtModFast": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/SR_FF8/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "Time the engine has been shut off.", + "max": 100000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/MinMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StopAllowedPath": { + "type": "Bool", + "unit": "-", + "description": "An engine stop is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStop": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator27", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStart": { + "type": "Bool", + "unit": "", + "description": "engine start request, with start allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator35", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqTotPre": { + "type": "Bool", + "unit": "-", + "description": "EngRunReqTotPre", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator4", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IceStartRun": { + "type": "Bool", + "unit": "-", + "description": "ICE status is starting or running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator42", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStopFast": { + "type": "Bool", + "unit": "-", + "description": "Engine must be stopped, either stall, key off or monitoring function", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator8", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_StartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqEngClnt": { + "type": "Bool", + "unit": "-", + "description": "Engine run request due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnOff": { + "type": "Bool", + "unit": "-", + "description": "EngOnOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StopAllowedDep": { + "type": "Bool", + "unit": "-", + "description": "A stop/start stop is allowed by dep", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqMaxTime": { + "type": "Bool", + "unit": "-", + "description": "EngRunReq for Max shut off time for engine.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_RunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "Ice stall run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "The engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqPre": { + "type": "Bool", + "unit": "", + "description": "EngRunning Request for micro hybrid vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Fan afterrun is active for eng on req", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/LogicalOperator3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqEng": { + "type": "Bool", + "unit": "-", + "description": "Eng on request from engine control, later on synced with transmission", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtDly": { + "type": "Bool", + "unit": "-", + "description": "Time delay on EngRunReqTot when Waiting for a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Rel", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4EngStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for the engine to stop before requesting a new B_EngRunReqTot-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Rel", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqLogg": { + "type": "UInt32", + "unit": "-", + "description": "[0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "max": 4294970000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_PwdPossible": { + "type": "Bool", + "unit": "", + "description": "Powerdown is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator17", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "xVcVmcPmm_B_PwdTrig": { + "type": "Bool", + "unit": "", + "description": "a powerdown is triggerd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator4", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "xVcVmcPmm_B_PwdReset": { + "type": "Bool", + "unit": "", + "description": "a powerdown is reset", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator7", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "xVcVmcPmm_B_SsActSeatBeltInhib": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 0 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_SsActSeatBeltAllow": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 1 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_SRSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Seatbelt-DriverDoor logic inhibit SsActive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "Driver has left the car", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperator20", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_AmbPresLow": { + "type": "Bool", + "unit": "-", + "description": "Ambient pressure is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator16", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_AmbTempL": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator8", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "rVcVmcPmm_t_TrnC3OilPres": { + "type": "Float32", + "unit": "s", + "description": "C3 oil pressure buildup time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/CounterReset1/MinMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "C3 oil pressure build up phase", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/LogicalOperator41", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqHybrid": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request (for hybrids)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/LogicalOperator32", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqIC": { + "type": "Bool", + "unit": "-", + "description": "The transmission is requested to be engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/LogicalSwitch10/Switch", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_CrShPathDisabled": { + "type": "Bool", + "unit": "-", + "description": "The crankshaft path is closed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/LogicalSwitch9/Switch", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngStopReqAT": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperator27", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "rVcVmcPmm_D_TransModeReq": { + "type": "UInt8", + "unit": "-", + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqPre": { + "type": "Bool", + "unit": "-", + "description": "Pre transmission engage request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8/Switch", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF/LogOp3", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTransPre": { + "type": "Bool", + "unit": "-", + "description": "Pre signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1/LogOp3", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTrans": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to be started for an AT vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvMT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery MT", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp16", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StrtAbrtPre": { + "type": "Bool", + "unit": "-", + "description": "Star abort for Stop in Gear vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp26", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvClNtrl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp29", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "ISG start abort", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp39", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvCl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp5", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvAbortInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "-", + "description": "Starting stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch12/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_D_StallAbortNum": { + "type": "UInt8", + "unit": "-", + "description": "Number of start attempts", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch13/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "xVcVmcPmm_B_StallRunning": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch14/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if no seat belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch15/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch16/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery within x seconds after first start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRecovery": { + "type": "Bool", + "unit": "", + "description": "stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch18/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch19/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallStrtM": { + "type": "Bool", + "unit": "-", + "description": "Start motor stall, time out", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid. MT only", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch20/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery AT transmissions", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch22/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if stop/start strategy is off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch23/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch30/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "-", + "description": "No stall recover if is not an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch32/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if the engine coolant temp is low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch34/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallRcShutOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch40/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Stall detection is inhibited by ChangeOfMindInhibit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch41/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "ICE stall detected during an emission start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch43/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch48/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_CrnkStallRecov": { + "type": "Bool", + "unit": "", + "description": "Stall detection using startmotor flag", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "B_AbrtStallSsRcfSet", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_ForcedStallStart": { + "type": "Bool", + "unit": "", + "description": "Forced start for stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected, set Unintended EMS flag", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallAbortNum": { + "type": "Bool", + "unit": "", + "description": "Abort stall", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOperator4", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "ICE stall run request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EradSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Erad speed control request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator12", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "xVcVmcPmm_B_EradAllow": { + "type": "Bool", + "unit": "-", + "description": "Erad path is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator14", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "xVcVmcPmm_B_EradEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Erad engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "xVcVmcPmm_B_EpbActive": { + "type": "Bool", + "unit": "-", + "description": "Parking brake active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/B_TqRsvActAT_1", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_Z_RoadGradient": { + "type": "Float32", + "unit": "-", + "description": "Road gradient", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_BrkRoadIncline": { + "type": "Bool", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/RelationalOperator4", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D if Efad is in ISG-path already", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator11", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_NonSysStrt": { + "type": "Bool", + "unit": "-", + "description": "A non-system initated start is requested", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDRBraking": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D/R since driver is braking vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator59", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDR": { + "type": "Bool", + "unit": "-", + "description": "An ISG-start is requested while the gear lever is placed in either drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator8", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDRAbort": { + "type": "Bool", + "unit": "-", + "description": "Abort ISG-start in D/R if driver releases brake pedal, allow for 12V-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator9", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtLimLoosen": { + "type": "Bool", + "unit": "-", + "description": "Loosen the ISG start limits", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtWhlTrqOK": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to request an ISG-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_a_Veh": { + "type": "Float32", + "unit": "m/s2", + "description": "Derivied vehicle speed", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Sum2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An 12V start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator14", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Wait for the vehicle speed to increase to be able to requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator44", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Dly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Delay an 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator7", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An 12V-start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator8", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtLowVehSpd": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough to activate the Wait4CluStrt-logic", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/RelationalOperator17", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtWhlAccHigh": { + "type": "Bool", + "unit": "-", + "description": "The vehicle acceleration is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtWhlTqLow": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtAccPedAct": { + "type": "Bool", + "unit": "-", + "description": "The acc pedal is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for a clutch start is exceeded", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_DrvCycActvFirstStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore the unavailable-logic for the first start due to low transmission oil temp (might result in a slow response from the TCM which leads to a delayed start)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator44", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator55", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator8", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTiOut": { + "type": "Bool", + "unit": "-", + "description": "Timeout", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_DrvCycActvFirstStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for first start logic connected to the DriveCycleActive signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "There's not enough available torque to perform an ISG-start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator46", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtTqRsvBlk": { + "type": "Bool", + "unit": "-", + "description": "Abort CluStrt if current EFAD TqReq is too high and 12Vstrt is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator7", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator10", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "Clutch start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator20", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "ISG start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator35", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_StrtActrsRdy": { + "type": "Bool", + "unit": "-", + "description": "One or several start actuators are ready for another start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator47", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "12V start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator9", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further ISG start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further clutch start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further 12V start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_12VStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "12V start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_CluStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "Clutch start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_IsgStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "ISG start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is high enough to perform a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_ElecMotLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "Currently low available torque levels on the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_VehSpdOKIsgDrv": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Run request to reduce propulsion delay during ISG-stop in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator24", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Eng run req during ISG-stop coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator25", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Trigger run req after ISG-stop to reduce propulsive torque delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator36", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIsgStop": { + "type": "Bool", + "unit": "-", + "description": "Engine running request to avoid loss of drive during abort of ISG-stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReqDrv": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when the gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator11", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReqBrk": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator13", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG-stop of ICE during standstill in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator18", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopStandstillPre": { + "type": "Bool", + "unit": "-", + "description": "Engine stop using ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator22", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRoadGradOK": { + "type": "Bool", + "unit": "-", + "description": "Road gradient is OK for ISG-stop in standstill D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator35", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator49", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to use the electic motor for charging of the HV-battery", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator5", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during power down", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator9", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_TrnModOKIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode OK for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_VehSpdOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_BrkOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_AccPedOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The acc ped request is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillBrkTqOK": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillBslTqOK": { + "type": "Bool", + "unit": "-", + "description": "VcVmcBsl torque request is low enough for an ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EfadUnavl": { + "type": "Bool", + "unit": "-", + "description": "The efad is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Ice path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2WhlUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Whl path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator4", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2WhlPahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to wheel path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator44", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IcePahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to ICE path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator54", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceReqRst": { + "type": "Bool", + "unit": "-", + "description": "Request to reset the Efad2Ice-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator57", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EfadDisengdReq": { + "type": "Bool", + "unit": "-", + "description": "Request to disengage the EFAD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator59", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtReq": { + "type": "Bool", + "unit": "-", + "description": "12V start request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator65", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_EfadModReq": { + "type": "UInt8", + "unit": "-", + "description": "Efad mode request", + "max": 5, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EvenGearShiftAct": { + "type": "Bool", + "unit": "-", + "description": "A gear shift is currently active on the electric motor shaft", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF1/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_GarageShiftEfadPahDiOK": { + "type": "Bool", + "unit": "-", + "description": "The torque condition when perfoming a garage shift is okay (there should be no torque acting on the electric motor before engaging drive/reverse)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF3/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceReq": { + "type": "Bool", + "unit": "-", + "description": "Request to connect the EFAD to the ICE", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF7/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_DrvCycTiOut": { + "type": "Bool", + "unit": "-", + "description": "Time out indication for the drivecycle active signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay1/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_GearLvrNotDRDetn": { + "type": "Bool", + "unit": "-", + "description": "The gear lever is not in drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay4/Rel", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtOk": { + "type": "Bool", + "unit": "-", + "description": "ISG start ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator4", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtOk": { + "type": "Bool", + "unit": "-", + "description": "12Vstrt OK", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator5", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "rVcVmcPmm_Tq_EradMaxLimNoLim": { + "type": "Float32", + "unit": "Nm", + "description": "ERAD max torque no limits (HW boundary)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "xVcVmcPmm_B_IsgEnable": { + "type": "Bool", + "unit": "-", + "description": "Isg is enabled", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalOperator17", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "xVcVmcPmm_B_IsgActrTqRampDwn": { + "type": "Bool", + "unit": "-", + "description": "There is no torque acting on the actuator", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RelationalOperator13", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "xVcVmcPmm_B_PTDisengagedAT": { + "type": "Bool", + "unit": "-", + "description": "tbd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator7", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TrailerPresent": { + "type": "Bool", + "unit": "-", + "description": "Trailer is present", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalOperator22", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqChas": { + "type": "UInt8", + "unit": "-", + "description": "Engine Run Req from Chassie", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_DrDoorOpen": { + "type": "Bool", + "unit": "-", + "description": "Driver door is open", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/RelationalOperator5", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "width": 1 + } + }, + "calib_consts": { + "cVcVmcPmm_B_PwdAbortHard": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort start is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbortHard", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdAbrtStall": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort stall is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbrtStall", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdDrReadyAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Powerdown due to AbortHard possible also at DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdDrReadyAbortHard", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdIgnoreQfDrDoor": { + "type": "Bool", + "unit": "-", + "description": "Ignore QF for driver door information", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdIgnoreQfDrDoor", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on two-mass flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOff", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRcShutOffDCA": { + "type": "Bool", + "unit": "-", + "description": "Reset Powerdown timer for two-mass flywheel protection in low DriveCycleActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOffDCA", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRcfDep": { + "type": "Bool", + "unit": "", + "description": "Activate powerdown if reconfig from dependability is set", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcfDep", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRpmOnly": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on engine speed instaed of Ice Status signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRpmOnly", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBelt": { + "type": "Bool", + "unit": "", + "description": "Activate pwd if seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBelt", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltDoor": { + "type": "Bool", + "unit": "-", + "description": "Include driver door status as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltDoor", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltN": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in N", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltN", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltP": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltP", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSpeedLimit": { + "type": "Bool", + "unit": "", + "description": "Activate speed limit threashold for powerdown", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSpeedLimit", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMModeFail", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMNodeAlive", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTransFailure", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdUseSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Use gear lever position as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdUseSeatBeltAT", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_UsePowerDownReq": { + "type": "Bool", + "unit": "", + "description": "allow a powerdown to occur", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_UsePowerDownReq", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_n_PwdRpmOnly": { + "type": "Float32", + "unit": "rpm", + "description": "Below this rpm threashold an powerdown will be carried out if seat belt is unbuckled or engine fault has occured", + "max": 100000000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/n_PwdRpmOnly", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_BlockPsmPwd": { + "type": "Float32", + "unit": "s", + "description": "Time to ignore PowerDownHMI signal from VcPpmPsm after an open DriverDoor triggered a powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_BlockPsmPwd", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdRcShutOff": { + "type": "Float32", + "unit": "s", + "description": "Time with two-mass flywheel protection active to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRcShutOff", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdRpm": { + "type": "Float32", + "unit": "s", + "description": "time with no rpm to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRpm", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdSeatBeltAT": { + "type": "Float32", + "unit": "s", + "description": "Powerdown after this timeout if belt is off for Auto transmission", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdSeatBeltAT", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdTcmModeFail", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_v_PwdSpeedLimit": { + "type": "Float32", + "unit": "km/h", + "description": "threashold to allow powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/v_PwdSpeedLimit", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBeltNoSeq": { + "type": "Bool", + "unit": "-", + "description": "Require no sequence in condition to allow SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/B_SsActSeatBeltNoSeq", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActSeatBelt": { + "type": "Float32", + "unit": "s", + "description": "Reset SsActive after a delay if Driver belt off in Park", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/t_SsActSeatBelt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltD": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in D and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltD", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltN": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in N and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltN", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltP": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltP", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltR": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in R and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltR", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorNoBelt": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when belt is off and door is opened (AT only)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorNoBelt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActAbs": { + "type": "Bool", + "unit": "", + "description": "Use ABS in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAbs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActAmbPres": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by low ambient pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAmbPres", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActBrk": { + "type": "Bool", + "unit": "-", + "description": "Use brake request, used to ensure no stop after ABS pump activation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActBrk", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDrMdInv": { + "type": "Bool", + "unit": "-", + "description": "0=inhibit SsActive if matching any of the selected drive modes, 1=allow SsActive if matching any of the selected drive modes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDrMdInv", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P, belt is off and door is opened", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDriverLeaving", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActEcoMde": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by eco mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActEcoMde", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActGpSs": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by global parameter", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActGpSs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActHood": { + "type": "Bool", + "unit": "-", + "description": "Use HoodStatus in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActHood", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActNtrl": { + "type": "Bool", + "unit": "", + "description": "Neutral must be valid for stop/start to be active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActNtrl", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActRcfSet": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from dependability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSet", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActRcfSetAlt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from Engine control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSetAlt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBelt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by seatbelt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBelt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBeltPrkBlock": { + "type": "Bool", + "unit": "-", + "description": "Block reconfig of stop/start by seatbelt if AT gear lever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBeltPrkBlock", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMModeFail", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMNodeAlive", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTemp": { + "type": "Bool", + "unit": "", + "description": "Require ok Qf on temp to deselect stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTemp", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTempStrt": { + "type": "Bool", + "unit": "-", + "description": "If 1 then temperature condtion can restart the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTempStrt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTipSport": { + "type": "Bool", + "unit": "-", + "description": "When in Tip/Sport, deactivate SS (as an alternative to set EngRunReqDriver in VcDeDmm)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTipSport", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTrailer": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trailer detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTrailer", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTransFailure", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_UseSsActTemp": { + "type": "Bool", + "unit": "", + "description": "If 1 then temperature condtion can inhibit StopStart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActTemp", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_UseSsActive": { + "type": "Bool", + "unit": "", + "description": "Set stop/start as active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActive", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd1": { + "type": "UInt8", + "unit": "-", + "description": "First drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd1", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd2": { + "type": "UInt8", + "unit": "-", + "description": "Second drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd2", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd3": { + "type": "UInt8", + "unit": "-", + "description": "Third drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbHighH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbHighL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbLowH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbLowL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Z_SsActTrailerUpHillH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, upper hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Z_SsActTrailerUpHillL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, lower hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_p_AmbH": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, high hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_p_AmbL": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, low hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActAbs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActBrk": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding brake request, used to ensure no stop after ABS pump activation", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActBrk", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActTcmModeFail", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_EngStoppedUseHiRes": { + "type": "Bool", + "unit": "-", + "description": "rpm to consider engine stopped", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_EngStoppedUseHiRes", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseComInhbtIceStatus": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to exit state IceStatus=Running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseComInhbtIceStatus", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIscActvnEMS": { + "type": "Bool", + "unit": "-", + "description": "use startmotor to detect eng running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseIscActvnEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTqSPM": { + "type": "Bool", + "unit": "-", + "description": "Torque SPM interface. Set = 1 to choose GEP3 signals", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseTqSPM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_StrtModLongIceStsDetn": { + "type": "UInt8", + "unit": "-", + "description": "Determine which start mode gets the long time detection for IceStatus=running", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/D_StrtModLongIceStsDetn", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngRunning": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine running", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngRunning", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngStarted": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine started", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStarted", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngStopped": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stopped", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStopped", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_rt_FCLvlRunning": { + "type": "Float32", + "unit": "-", + "description": "Min Fuel cut level for detecting engine on", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/rt_FCLvlRunning", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_ComInhbtIceStatus": { + "type": "Float32", + "unit": "s", + "description": "Max time to listen to ChangeOfMindInhibit signal, used as stop request in IceStatus", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_ComInhbtIceStatus", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopTime": { + "type": "Float32", + "unit": "s", + "description": "minimum stop timer", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_MinStopTime", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Running": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng running", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Running", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Started": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng started", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Started", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_BrkAbs": { + "type": "Bool", + "unit": "s", + "description": "Keep engine running if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkAbs", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkEngRunReq": { + "type": "Bool", + "unit": "s", + "description": "use the enigne running request from brake control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReq", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkEngRunReqAlive": { + "type": "Bool", + "unit": "-", + "description": "If engine running request from brake control is missing, request start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReqAlive", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Use separate HillGradient conditions to allow engine stop if gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHGSkipPark", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkHillGrad": { + "type": "Bool", + "unit": "s", + "description": "Use brake for ensureing engine is running when in high slopes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHillGrad", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkUseNegVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use negative brake vacuum signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkUseNegVacuum", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuum", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum adapted for vehicle speed for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuumVeh", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_D_BrkHillVal": { + "type": "UInt8", + "unit": "-", + "description": "Used to set if hill gradient function should be able to restart the engine(2) or only inhibit stop(1)", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/D_BrkHillVal", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkDownH": { + "type": "Float32", + "unit": "deg", + "description": "Downhill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownH", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkDownL": { + "type": "Float32", + "unit": "deg", + "description": "Downhill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownL", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkUpH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpH", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkUpL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpL", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_p_BrVacuum": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuum", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_t_BrkAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkAbs", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_t_BrkEngRunReqAlive": { + "type": "Float32", + "unit": "s", + "description": "Delay for starting engine if EngRunReq signal from brake system is missing", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkEngRunReqAlive", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_t_BrkHillGrad": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding gradient, used to ensure no stop after gradient estimation active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkHillGrad", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": 1 + }, + "cVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Value sent out if not Epb Qf Long Acc is correct", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_BrkHillGradStart", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_B_UseDefHGDynoMd": { + "type": "Bool", + "unit": "-", + "description": "Use default hill gradient value if DynoMode is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseDefHGDynoMd", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_B_UseWhlSpdDirection": { + "type": "Bool", + "unit": "-", + "description": "Use wheel speed direction", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseWhlSpdDirection", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_D_QfEpbLongAccInit": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccInit", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_D_QfEpbLongAccOK": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccOK", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_Z_ResetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for reset stop inhibit", + "max": 10000000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimDownHill", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_Z_ResetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for reset stop inhibit", + "max": 10000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimUpHill", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_Z_SetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for enable stop inhibit", + "max": 1000000000000, + "min": -100000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimDownHill", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_Z_SetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for enable stop inhibit", + "max": 900000000000, + "min": -9000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimUpHill", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_a_HillGradientFault": { + "type": "Float32", + "unit": "m/s2", + "description": "Hillgradient acc used when fault detected", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientFault", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_a_HillGradientMax": { + "type": "Float32", + "unit": "m/s2", + "description": "Max acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMax", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_a_HillGradientMin": { + "type": "Float32", + "unit": "m/s2", + "description": "Min acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMin", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_t_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Time StandStill", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/t_StandStill", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_tc_BcmLongAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration from BCM LongAcc", + "max": 1000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BcmLongAccFilt", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_tc_BrkTrqFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for Brake trq filter", + "max": 1000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BrkTrqFilt", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_tc_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for filter when stand still", + "max": 10000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_StandStill", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_tc_VehAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration calculated from vehicle speed", + "max": 10000000000000, + "min": -1000000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_VehAccFilt", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_v_SpeedLimitHG": { + "type": "Float32", + "unit": "km/h", + "description": "Speedlimit. below set speed Stop inhibit is active", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_SpeedLimitHG", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_v_StandStillLoLim": { + "type": "Float32", + "unit": "km/h", + "description": "Low Speed Activation for Stand Still Time Constant", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_StandStillLoLim", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": 1 + }, + "cVcVmcPmm_B_FCAdaptIdle": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_FCAdaptIdle", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEmiGpfFC": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_UseEmiGpfFC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptGearRst": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptGearSet": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptLockUpRst": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptLockUpSet": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_FCAdaptEngClntRst": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption reset", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_FCAdaptEngClntSet": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_FCAdaptEngRst": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption reset", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_FCAdaptEngSet": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_FCAdaptIdleDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Fuel cut request reset delay time off when not in idle", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/t_FCAdaptIdleDelayOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_FCAdaptVehRst": { + "type": "Float32", + "unit": "km/h", + "description": "Selected gear for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_FCAdaptVehSet": { + "type": "Float32", + "unit": "km/h", + "description": "Selected vehicle speed for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DrLeaveKeepRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle keep engine running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeaveKeepRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DrLeavePowerDown": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeavePowerDown", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_DrLeaveAutoParkReq": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveAutoParkReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_DrLeaveDCADly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveDCADly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_DrLeavePwrDwnDly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeavePwrDwnDly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_DrLeaveLim": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to activate driver leave vehicle logic", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/v_DrLeaveLim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DrLeaveEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_DrLeaveEnable", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_FCAdaptEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_FCAdaptEnable", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_GlitchEngOnTrans": { + "type": "Bool", + "unit": "", + "description": "Use glitch block on eng run req trans", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_GlitchEngOnTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopTrans": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_MinStopTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_GlitchEngOnTrans": { + "type": "Float32", + "unit": "s", + "description": "Block transmission request if glitching", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_GlitchEngOnTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopTrans": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_MinStopTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopEMS": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/B_MinStopEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopEMS": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/t_MinStopEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopEmLv": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/B_MinStopEmLv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopEmLv": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/t_MinStopEmLv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopClim": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/B_MinStopClim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopClim": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/t_MinStopClim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopTm": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/B_MinStopTm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopTm": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/t_MinStopTm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopChas": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/B_MinStopChas", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopChas": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/t_MinStopChas", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopCEC": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/B_MinStopCEC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopCEC": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/t_MinStopCEC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_PwrUpIceStrtReqUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Request first start if RunReqTrans is active at startup", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_PwrUpIceStrtReqUseTrans", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121M_StartModeHybrid_3) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_B_SerialModeSafeBISG": { + "type": "Bool", + "unit": "-", + "description": "1= Use SafeBISG during serial mode start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_SerialModeSafeBISG", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeEscCond": { + "type": "Bool", + "unit": "-", + "description": "1=Use esc active condition for fast start mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeEscCond", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeSkipTrnMde": { + "type": "Bool", + "unit": "-", + "description": "Skip trans mode term in fast start logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeSkipTrnMde", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_D_FastBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_FastBISG", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_D_NormalBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_NormalBISG", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_D_SafeBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_SafeBISG", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_n_StrtDiffFast": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed diff for triggering fast map for start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/n_StrtDiffFast", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_B_UseStartModeHybrid": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch to use StartModeHybrid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/B_UseStartModeHybrid", + "configs": "((VcVmcPmm__HEP7_121M_StartModeHybrid_3))", + "width": 1 + }, + "cVcVmcPmm_B_IgnoreGearLevRespStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore logic for responsive engine start as function of gear lever position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_IgnoreGearLevRespStrt", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_B_UseFirstStartMode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseFirstStartMode", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_B_UseLastStrtMod": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to always request a safe start for the last start attempt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseLastStrtMod", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_B_UseStrtMde3All12vStrt": { + "type": "Bool", + "unit": "-", + "description": "Use Startmode3 in all 12V starts, also for slow engagements", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseStrtMde3All12vStrt", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_D_AbortStart": { + "type": "UInt8", + "unit": "-", + "description": "Number of abroved start attempts", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/D_AbortStart", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_D_EngmtModFast": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode fast", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModFast", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_D_GearLevRespStrtOK1": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK1", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_D_GearLevRespStrtOK2": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK2", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_D_StrtModDft": { + "type": "UInt8", + "unit": "-", + "description": "Default start mode", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_StrtModDft", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_B_UseStartModeHybrid12V": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch for StartModeHybrid12V", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/B_UseStartModeHybrid12V", + "configs": "((VcVmcPmm__HEP7_121N_StartModeHybrid12V_4))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeSet": { + "type": "Bool", + "unit": "-", + "description": "Set start mode in to OB-block", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeStopTrig": { + "type": "Bool", + "unit": "-", + "description": "Use transition Running->Stopping to set StartMode=running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeStopTrig", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StrtMdeAcc": { + "type": "Float32", + "unit": "%", + "description": "Accelerator pedal limit to set StartMode=2", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/X_StrtMdeAcc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeAccRst": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after releasing accelerator pedal", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeAccRun": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after reaching Running", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeRunning": { + "type": "Float32", + "unit": "s", + "description": "Deley for ICEStatus Running before set of B_StrtMdeRunning", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeRunning", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_BrakeRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_BrakeRunReqOnDelayHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for FC Adapt run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_FCAdaptRunReqOnDelayHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "cVcVmcPmm_t_RunReqObdDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqObdDelayHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "cVcVmcPmm_t_RunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqOnDelayHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "cVcVmcPmm_t_TransRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for trans run req to HMI-signal", + "max": 1000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_TransRunReqOnDelayHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "cVcVmcPmm_v_TransRunRqDlyMaxHmi": { + "type": "Float32", + "unit": "km/h", + "description": "Min speed to skip delay on fr trans run request in power meter logic", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/v_TransRunRqDlyMaxHmi", + "configs": "((VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5))", + "width": 1 + }, + "cVcVmcPmm_B_CTFStart": { + "type": "Bool", + "unit": "-", + "description": "Start Change of mind Test Function", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/B_CTFStart", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_CTF": { + "type": "UInt8", + "unit": "-", + "description": "Change of mind test function. A stop will be requested until a certain rpm threashold is reached.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/D_CTF2", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_CFTStop": { + "type": "Float32", + "unit": "rpm", + "description": "Rpm threashold for requesting a restart", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/n_CFTStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_CTFStop": { + "type": "Float32", + "unit": "s", + "description": "time for reaching a certain value until restart is triggered", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/t_CTFStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq": { + "type": "Bool", + "unit": "-", + "description": "Set fast engagement during ISG-start only after ISG-start has been requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_FastEngmtIsgStrtUseStartReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrCcActive": { + "type": "Bool", + "unit": "-", + "description": "Ignore cruise control active condition", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_IgnrCcActive", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_EngmtModSmooth": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode smooth", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModSmooth", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max brake torque request to request fast engagement mode during ISG-start", + "max": 100000, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Tq_FastEngmtIsgStrtBrkTqMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%", + "description": "Min acclerator position to set fast engagement torque demand", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/X_AccPedFastEngmtMin", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Xd_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%/s", + "description": "Min accelerator pedal derivative to set fast engagement", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Xd_AccPedFastEngmtMin", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngEngmtFastRstDelay": { + "type": "Float32", + "unit": "ns", + "description": "Delay resetting EngEngmtFast flag since this is used after TransMode == Engaged", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/t_EngEngmtFastRstDelay", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_tc_AccPedDer": { + "type": "Float32", + "unit": "s", + "description": "Time constant of accelerator pedal low pass derivative filter", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/tc_AccPedDer", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_ATComStrt": { + "type": "Bool", + "unit": "-", + "description": "Change of mind situation can set StartAllowedPath (even if PowerTrainDisengaged=0) as long as EngOnReqTrans is still =1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_ATComStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbsStrt": { + "type": "Bool", + "unit": "-", + "description": "Block start if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_AbsStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_BrkStrt": { + "type": "Bool", + "unit": "-", + "description": "Block/delay start if ABS Pump is active (indicated by EngRunngReqByBrk == 1)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_BrkStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DepStop": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DepStrt": { + "type": "Bool", + "unit": "", + "description": "Use Dep Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngRunReqTot_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_RunOnReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngRunReqTot_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngRunReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_LosStop": { + "type": "Bool", + "unit": "-", + "description": "UseLOS Stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_LosStrt": { + "type": "Bool", + "unit": "-", + "description": "Use LOS Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_PTDStrt": { + "type": "Bool", + "unit": "-", + "description": "Use powertrain disengaged to allow a start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_PTDStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_RcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Use ShutOffReq from VcPpmRc (dual mass flywheel protection)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_RcShutOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_Use7DCT": { + "type": "Bool", + "unit": "-", + "description": "switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_Use7DCT1", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UseAgedFuel": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FsdPc aged fuel", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseAgedFuel", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseBrake": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseBrake", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseCEC": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from CEC (replaces EMS and TM)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseCEC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseChas": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseChas", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseClim": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseClim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDep": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from dependability", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDep", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Driver Leave Logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDrLeave", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDriver": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDriver", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEMS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEmLv": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEmLv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngClntRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngClntRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngOffMaxTime": { + "type": "Bool", + "unit": "-", + "description": "Enable counter for max time for the engine to be shut off.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOffMaxTime", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngOnOff": { + "type": "Bool", + "unit": "", + "description": "Hold eng running after an restart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOnOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FC Adaptiotion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFCAdapt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseFanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to Fan Afterrun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFanAfterrun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIceStall": { + "type": "Bool", + "unit": "-", + "description": "Enable engine run request due to engine stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIceStall", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsg": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from 'Isg availble torque'", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIsg", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseLOS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseLOS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseObd": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseObd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UsePsm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UsePsm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRc": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from PpmRc (Starter protection etc)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRemoteStart": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRemoteStart", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRunDryInhb": { + "type": "Bool", + "unit": "-", + "description": "1-Block clutch, ISG and 12V Start if RunDry i set, 0-engine start possible.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRunDryInhbOnly": { + "type": "Bool", + "unit": "-", + "description": "If TRUE, engine can start as soon as RunDry AND RunDryCrnkInhb flags go done, otherwise a car restart is also needed.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhbOnly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseSapp": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseSapp", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from StabilityCtlr (sVcVmcAwd_D_EngRunReqStabCtrl)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStabCtrl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseStartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStartAllowedPath", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTm": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from tm (replace run req EMS in PHEV)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTotEngRunReq": { + "type": "Bool", + "unit": "", + "description": "Use Total EngRunReqs instead of micro hybrid: wait for driver to be last system", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTotEngRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTrans": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseWait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "When enabled, the engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseWait4Eng2Stop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_StartMode_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_StartMode_swi": { + "type": "Bool", + "unit": "-", + "description": "Calibration of start mode during development", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_EngClntEngOffReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature raises above this value, the ICE is allowed to be stopped", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngOffReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_EngClntEngRunReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature drops below this value, an ICE start is requested", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_FanAfterrunLimHi": { + "type": "Float32", + "unit": "%", + "description": "High threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimHi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_FanAfterrunLimLo": { + "type": "Float32", + "unit": "%", + "description": "Low threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimLo", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_IceStallMax": { + "type": "Float32", + "unit": "rpm", + "description": "Maximum engine speed where IceStall signal is allowed to shut down engine", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_IceStallMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLim": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLimHigh": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHigh", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLimHighTest": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed condition used for testing", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHighTest", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_ATComStrt": { + "type": "Float32", + "unit": "s", + "description": "Duration to allow Change of mind restart (without PowerTrainDisengaged) on AT after EngOnReqTrans deactivation", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_ATComStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_AbsStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no start after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_AbsStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_BrkStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding Brake inhibit active (actually ABS pump active), used to ensure no start during ABS pump active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_BrkStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOffFcAdapt": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request durign FC request condition", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffFcAdapt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOffMax": { + "type": "Float32", + "unit": "s", + "description": "Max time for the engine to be shut off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOnOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running after an restart this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOnOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_FanAfterrunDelay": { + "type": "Float32", + "unit": "s", + "description": "Deley for Eng On Req due to afterrun", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_FanAfterrunDelay", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Wait4Eng2StopTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4Eng2Stop-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4Eng2StopTiOut", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Wait4EngRunReqTot": { + "type": "Float32", + "unit": "s", + "description": "Time delay for the EngRunReqTot-signal (necessary to solve the algebraic loop caused by the Wait4CluStrt-logic)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4EngRunReqTot", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_WaitToReset": { + "type": "Float32", + "unit": "s", + "description": "for this amount of time, is it ok for all other EngRunReqs to become 0, uhev", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_WaitToReset", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_WaitToReset": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop for a while after EngRunReqDriver condition", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/v_WaitToReset", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "Use transmode request to help buld up C3 oil pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/B_TrnMdeUseC3OilPres", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Te_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "deg C", + "description": "Mac gearbox temperature for enabling C3 oil pressure build up function", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/Te_TrnMdeC3OilPresMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "s", + "description": "Max duration to build up oil pressure in C3 clutch", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/t_TrnMdeC3OilPresMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral during C3 oil pressure build up", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/v_TrnMdeC3OilPresMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnEngBlockSkipEngUseReq": { + "type": "Bool", + "unit": "-", + "description": "Skip EngUseReq term in TrnEngBlock logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnEngBlockSkipEngUseReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseAwd": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Stability/Traction control run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseAwd", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseBrake": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Brake run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseBrake", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUsePcr": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when PCR run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUsePcr", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Transmission run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseTrans", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_n_TrnEngBlockMin": { + "type": "Float32", + "unit": "rpm", + "description": "Max speed for blocking TrnMode", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/n_TrnEngBlockMin", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnEngBlockMax": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngBlockMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnEngCatHeatDly": { + "type": "Float32", + "unit": "s", + "description": "delay off for catalyst heat", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngCatHeatDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnEngRpmDly": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngRpmDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TrnEngBlockMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed for blocking TrnMode", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/v_TrnEngBlockMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeReqBrk": { + "type": "Bool", + "unit": "", + "description": "Use EngRunReqBrakes for use with Idle Coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/B_TrnMdeReqBrk", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UseEradHybrid": { + "type": "Bool", + "unit": "-", + "description": "Activate for hybrid cars with an ERAD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UseEradHybrid", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UsePropFrntRampDown": { + "type": "Bool", + "unit": "-", + "description": "1= Use sVcVmcAjc_Tq_DrPropFrntReq,0 = use sVcDtcCta_Tq_CrShInstReq to determine if torque is ramped down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UsePropFrntRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_DrCrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when driver requested CrSh torque is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_DrCrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when Driver requested CrSh torque is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampUp", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_PropFrntRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop front is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_PropFrntRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop frontt is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampUp", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_CrShPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the ICE (when closing the crankshaft path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/t_CrShPahDiTiOut", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_CrShPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_dbi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_CrShPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_swi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_CrShaftRampDownIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore to wait for the tq to have ramped out before turning off the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShaftRampDownIgnore", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_DepStopAT": { + "type": "Bool", + "unit": "-", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_DepStopAT", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_EngOnDelayIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore delay for EnOnReq off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_EngOnDelayIgnore", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdCrSh": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Crankshaft Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_IgnrPropAlwdCrSh1", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeHev": { + "type": "Bool", + "unit": "-", + "description": "Use Hybrid logic (Enables serial mode) for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHev", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeHevUseNIC": { + "type": "Bool", + "unit": "-", + "description": "Use NIC ih hybrid vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHevUseNIC", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeIC": { + "type": "Bool", + "unit": "", + "description": "Use Idle coast for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeIC", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UseOldEngRevStgy": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable the old strategy for engine revving in Park or Neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_UseOldEngRevStgy", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_GearTotNtrl": { + "type": "Int8", + "unit": "-", + "description": "Gear threashold to go to total neutral", + "max": 9, + "min": -1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_GearTotNtrl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TransModeReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_dbi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TransModeReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_swi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeHevReqEngNIC": { + "type": "UInt8", + "unit": "-", + "description": "Transmode NIC request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeHevReqEngNIC", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqEng": { + "type": "UInt8", + "unit": "-", + "description": "Transmode request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqEng", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqNtrl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqTotNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest total neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqTotNtrl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_CrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped down", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_CrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampUp", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_n_EngOnDelayOff": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed offset from idle for delay of EngOnReq (Off)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/n_EngOnDelayOff", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_EngOnDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Deley ftime for EngOnReq off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_EngOnDelayOff", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_GearLevPNDlyOn": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of gear lever in park or neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_GearLevPNDlyOn", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_IsgIceStopACCTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown during ACC active", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopACCTimeout", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_IsgIceStopTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopTimeout", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_EngStopReqAT": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop request", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_EngStopReqAT", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_ReqEngDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_ReqEngDrDir", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlReset": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to exit total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlReset", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlSet": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlSet", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlVehDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlVehDrDir", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "s", + "description": "No stall recoverty to close to fisrt start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtFrstStrtStall", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "", + "description": "demand neutral to be valid for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtNtrlAdapt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on StrtAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallAbortHard", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Engine coolant temperature low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallEngClntL", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "", + "description": "Stallrecoveryonly if an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallGp", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on MicHevMode set to stop/start off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallMicHev", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcShutOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallRcvInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if veh is in higher speed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcvInSpd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Driver Seat Belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSeatBelt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "Set enable stall recovery if vehicle have crashed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSsRcfSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "", + "description": "power down after a certain time in stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallTime", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallEmiExtraCond": { + "type": "Bool", + "unit": "-", + "description": "Use extra conditions for StartMode=0 Ice Stall detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallEmiExtraCond", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Activate logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtActrFinishd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "Debug variable to enable ice stall detection during emission starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtEmi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Set stall flag on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcShutOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery in an AT vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAT", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvAccFtOnPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on acc pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAccFtOnPed", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvClOnly": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery when it is enough with only clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvClOnly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvCrnk": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery on driver cranking", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvCrnk", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvFootOnBrPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on brake pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFootOnBrPed", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvFrcd": { + "type": "Bool", + "unit": "s", + "description": "stall recovery if an forced start is conductred", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFrcd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRun": { + "type": "Bool", + "unit": "", + "description": "Allow stall to happen via running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to temporarily prevent StallRun detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunComInhbt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunHiRes": { + "type": "Bool", + "unit": "-", + "description": "Use sVcEc_n_EngHiRes to detect StallRun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunHiRes", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunStartM": { + "type": "Bool", + "unit": "-", + "description": "Prevent StallRun if starter motor has engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunStartM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Use stall detection by RPM as input to Unintended Stall flag to EMS", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunUnintd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallStartM": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallStartM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortClu": { + "type": "Bool", + "unit": "-", + "description": "Clutch start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortClu", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortHard", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortIsg": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection for Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortIsg", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortSoft": { + "type": "Bool", + "unit": "", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortSoft", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abortion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtAcc": { + "type": "Bool", + "unit": "", + "description": "start abort if no accelerator pedal is pressed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtAcc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtCl": { + "type": "Bool", + "unit": "", + "description": "start abort on clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtCl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtDrReady": { + "type": "Bool", + "unit": "-", + "description": "start abort only if not DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtDrReady", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtIce": { + "type": "Bool", + "unit": "", + "description": "Start abort only when ice status is in starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtIce", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtNtrl": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtNtrlValid": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral and neutral is valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrlValid", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtRpm": { + "type": "Bool", + "unit": "", + "description": "start abort on rpm limit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtRpm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtStrtM": { + "type": "Bool", + "unit": "", + "description": "Start abort only when the startmotor is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtStrtM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UnintdStallRcShOff": { + "type": "Bool", + "unit": "-", + "description": "Set Unintended stall on yVcPpmRc_B_ShutOffReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UnintdStallRcShOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseClPedAdaptStallRecovery": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStallRecovery1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseClPedAdaptStrtAbrt": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStrtAbrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDesDrvDir": { + "type": "Bool", + "unit": "-", + "description": "Use desired driver direction as condition for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseDesDrvDir", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseStallRcvBlock": { + "type": "Bool", + "unit": "-", + "description": "Use stall recovery block from FsdPc, empty fuel tank.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseStallRcvBlock", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_AbrtStallEngClntL": { + "type": "Float32", + "unit": "deg C", + "description": "Min Engine Cooland Temperature to do stall recovery", + "max": 160, + "min": -80, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Te_AbrtStallEngClntL", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StallRcvClNtrl": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClNtrl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StallRcvClOnly": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClOnly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StrtAbrtAcc": { + "type": "Float32", + "unit": "%", + "description": "accelerator pedal limit to deactivate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtAcc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StrtAbrtCl": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal released to activate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtCl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngStalled": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stalled", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_EngStalled", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum engine speed for StartMode=0 before an Ice Stall is detected", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallEmiMinEngSpd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_StallRcv": { + "type": "Float32", + "unit": "rpm", + "description": "Max rpm for stall recovery", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallRcv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_StrtAbrtRpm": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to allow a start abortion", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StrtAbrtRpm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_AbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes re-allowed after first start (set higher value than t_BlockAbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtFrstDrCycle", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_AbrtStall": { + "type": "Float32", + "unit": "s", + "description": "time in stall to trigger a powerdown", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtStall", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_BlockAbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes disallowed after first start (set lower value than t_AbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_BlockAbrtFrstDrCycle", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngRunStall": { + "type": "Float32", + "unit": "s", + "description": "Time for engine running before reset stall counter", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_EngRunStall1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtPahReqTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for an ISG start path request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_IsgStrtPahReqTiOut", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of low engine speed for StartMode=0", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallEmiMinEngSpd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrt": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtActrFinishd": { + "type": "Float32", + "unit": "s", + "description": "Time delay to detect that the ICE start was not successful after the start actuator is finished", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtActrFinishd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtEmi": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtEmiExtra": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts with extra logic)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmiExtra", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtIsgDrv": { + "type": "Float32", + "unit": "ns", + "description": "Time from EngOnReq until a stall is determined when performing an ISG-start while gear leaver is placed in Drive (only for HEP7)", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtIsgDrv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRcvClDelay": { + "type": "Float32", + "unit": "s", + "description": "Time delay until clutch sets OK to start.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvClDelay", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRcvNeutral": { + "type": "Float32", + "unit": "s", + "description": "Time in Neutral until trigger start", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvNeutral", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRun": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRunComInhbt": { + "type": "Float32", + "unit": "s", + "description": "Max time that ChangeOfMindInhibit signal can override StallRun detection", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunComInhbt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRunUnintd": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until an Unintended stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunUnintd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallStrtM": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallStrtM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtAbrt": { + "type": "Float32", + "unit": "s", + "description": "time from triggering an start abortion until requesting an stall", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StrtAbrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_StallRcvStart": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed to allow stall restart on only cl or/and neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallRcvStart", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_StallReset": { + "type": "Float32", + "unit": "km/h", + "description": "Stall recovery when vehicle is near standing still", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallReset", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_VehMaxStallRcv": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to do stall recovery", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_VehMaxStallRcv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_ERADTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override EradTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_ERADTqAllw", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Erad Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradIgnrPathDisable", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradPathEnable_dbi": { + "type": "Bool", + "unit": "", + "description": "override EradPath with this switch,", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradPathEnable_swi": { + "type": "Bool", + "unit": "", + "description": "override EradPath using this switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_EradReqWhl, If 0 => sVcIsc_Tq_Erad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradRmpDwnTqSignal", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi": { + "type": "Int8", + "unit": "-", + "description": "Debug value", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_Tq_ERADRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/Tq_ERADRampDown", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradDisable", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradNtrlGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time in neutral for Erad disable", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradNtrlGlitch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradOffGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time disengage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOffGlitch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradOnGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time engage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOnGlitch", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_v_EradOffSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad disengage speed to high", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOffSpdLim", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_v_EradOnSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad engage speed limit", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOnSpdLim", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_v_EradSpdCtrl": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed to request erad idle speed (speed control)", + "max": 500, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradSpdCtrl", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_UseEradCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/B_UseEradCode", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding1": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding1", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding2": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding3": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding3", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding4": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding4", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseAwdRoadGrad": { + "type": "Bool", + "unit": "-", + "description": "Use Awd road grad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/B_UseAwdRoadGrad", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_tc_LatAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Lat acc filter constant", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/tc_LatAccFilt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna": { + "type": "Bool", + "unit": "-", + "description": "Enable aborting ISG-start in D/R", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtGearLvrDRAbortEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtInDUseEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Trigger ISG-start in D if Efad actual path is already ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtInDUseEfadPathAct", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStrtAtStndStill": { + "type": "Bool", + "unit": "-", + "description": "When enabled, every engine start will be an ISG-start when standing still and brakes are applied", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_UseIsgStrtAtStndStill", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadIsgStrLoosenLim": { + "type": "UInt8", + "unit": "-", + "description": "When the number of ISG start attempts exceed this limit, the conditions for the next ISG-start attempt will be loosen", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/D_EfadIsgStrLoosenLim", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Te_Efad12VStrtEngClntMin": { + "type": "Float32", + "unit": "deg C", + "description": "Minimum coolant temperature to allow 12V-starts", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Te_Efad12VStrtEngClntMin", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtDiFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDiFlt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtEnaFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEnaFlt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of requested brake torque when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_BrkLimIsgStrtGearLvrDR", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtWhlTrqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of the driver request being low enough to request an ISG-start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_IsgStrtWhlTrqOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "ns", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of vehicle speed when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_VehSpdLimIsgStrtGearLvrDR", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "m/s", + "description": "Vehicle speed limit to be able to request an ISG-start when gear lever is placed in Drive", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/v_VehSpdLimIsgStrtGearLvrDR", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_Efad12VStrtEnblIngoreDep": { + "type": "Bool", + "unit": "-", + "description": "If false 12VStartEnable can not be set without having permission from Dep(StartAllowed = True)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_Efad12VStrtEnblIngoreDep", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUse12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_EfadUse12VStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUseFactory12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable/disable forced 12V-start when in factory mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_EfadUseFactory12VStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseDly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Enable delay of 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseDly12VStrtVehPwrUp", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseWait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseWait4CluStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_IceStsStarting": { + "type": "UInt8", + "unit": "-", + "description": "An extra calibration possibility to block a start actuator", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/D_IceStsStarting", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_Wait4CluStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is above this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtDi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_Wait4CluStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is below this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_Wait4CluStrtDi": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtDi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_Wait4CluStrtEna": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_a_Wait4CluStrtDi": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtDi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_a_Wait4CluStrtEna": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_n_12VStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow 12V start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/n_12VStrtAllwdEngSpdMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_FirstStrtDlyOff": { + "type": "Float32", + "unit": "s", + "description": "Time out delay for waiting with an ISG-start request during first start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_FirstStrtDlyOff", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_Wait4CluStrtTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4ClutStart-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_Wait4CluStrtTiOut", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_tc_VdmAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for vehicle acceleration signal from VDM", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/tc_VdmAccFilt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_Efad12VStartMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed for 12V start motor crank", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMax1", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_Efad12VStartMin": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed for 12V start motor crank", + "max": 250, + "min": -250, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMin", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/B_UseEngOnReqDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Te_TrnOil": { + "type": "Float32", + "unit": "deg C", + "description": "Allow for a longer first start time (from button press to ICE running) if the transmission oil temperature is low", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Te_TrnOil", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_n_IsgStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/n_IsgStrtAllwdEngSpdMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_rt_EfadLowAvailTrq": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque losses to allow an ISG-start attempt", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/rt_EfadLowAvailTrq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_DrvCycActvFirstStrt": { + "type": "Float32", + "unit": "s", + "description": "Timeout for first start logic connected to the DriveCycleActive signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_DrvCycActvFirstStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadLowAvailTrqDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of maximum Efad torque losses to allow an ISG-start attempt", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EfadLowAvailTrqDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EngOnReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay for EngOnReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EngOnReqDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtInDeplBlk": { + "type": "Bool", + "unit": "-", + "description": "Block Clutch Start in Depletion Operation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_CluStrtInDeplBlk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrDepl": { + "type": "Bool", + "unit": "-", + "description": "When enabled, this label will ignore the depletion-conditon for blocking clutch starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IgnrDepl", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna": { + "type": "Bool", + "unit": "-", + "description": "Block clutch start if run req is set by fast ISG stop function, to enable use of ISG-start in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IsgStopRunReqCluStrtBlkEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "Protection for only blocking clutch start when 12V starter is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_Use12vStrtPsblInCluStrtAbort", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseRespStartReqFromDeDmm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from DeDmm for blocking CluStrt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartReqFromDeDmm", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseRespStartreqFromVmcEm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from VmcEm for evaluating CluuStrtBlk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartreqFromVmcEm", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw": { + "type": "Bool", + "unit": "-", + "description": "Choose which resp start request to block the possiblity to request a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStrtReqInCluStrtAllw", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseTqOffsForCluStrtEval": { + "type": "Bool", + "unit": "-", + "description": "Inhibit clutch start if no Efad torque reserve is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseTqOffsForCluStrtEval", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_n_CluStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow clutch start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/n_CluStrtAllwdEngSpdMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_CluStrtSpdAllw": { + "type": "Float32", + "unit": "km/h", + "description": "Speed-limits for allowing clu-strt instead of 12V start", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/v_CluStrtSpdAllw", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtTrigNewPos": { + "type": "Bool", + "unit": "-", + "description": "Use new position of flank trigger for 12V-start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtTrigNewPos", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUseCluStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseCluStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUseIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseIsgStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPahReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPahReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_Efad12VStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of 12V start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_Efad12VStrtMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadCluStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of clutch start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadCluStrtMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadIsgStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of ISG start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadIsgStrtMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_rt_EfadStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque loss to permit Efad start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/rt_EfadStrtAllow", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_12VStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_12VStrtActrRdyDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_CluStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_CluStrtActrRdyDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from Efad or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_EfadRunReqDelay", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IceRunng12VStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for a 12V-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunng12VStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IceRunngCluStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an clutch-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngCluStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IceRunngIsgStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngIsgStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IsgStrtActrRdyDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadCluStrtDi": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to prevent a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtDi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadCluStrtEna": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to enable a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request during cat heating", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_CatHeatVehSpdOKIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_VehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_VehSpdOKIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrvHybridEco", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrvHybridEco", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrvHybridEco", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrvHybridEco", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Ignore actual Efad path to allow eng run req ISG stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_IsgStopRunReqIgnrEfadPathAct", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request after ISG-stop is completed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopPostRunReqStandstill", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqCoast", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqStandstill", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EngRunReqIsgStopMax": { + "type": "Float32", + "unit": "s", + "description": "Max time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EngRunReqIsgStopMin": { + "type": "Float32", + "unit": "s", + "description": "Min time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMin", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_TrnModIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode signal to be used for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_TrnModIsgReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseChargeInIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Use Charge from VmcEm for concidering IsgReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseChargeInIsgReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when braking in stand still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStandStill": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when standing still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStandStill", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopCoast", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopPwrDwn", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_EfadBrkOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBrkTqOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "VcVmcBsl torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBslTqOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqHyst": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast, hysteresis", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqHyst1", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMin": { + "type": "Float32", + "unit": "Nm", + "description": "Min driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMin", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "%", + "description": "Acc ped limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_EfadAccPedOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_IsgStopRoadGradMax": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_IsgStopRoadGradMaxHyst": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill, hysteresis", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMaxHyst", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_ChrgReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay time for Em_B_ChrgReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_ChrgReqDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the acc ped level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadAccPedOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the brake torque level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadBrkOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadIceStsDlyIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection that Pmm_D_IceStatus = running", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadIceStsDlyIsgDrv", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadVehSpdOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_GearLevNDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Neutral", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_GearLevNDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of brake torque OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBrkTqOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of VcVmcBsl torque request being low enough for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBslTqOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of vehicle speed OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillVehSpdOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdNOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdOKIsgBrk", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed is low enough for an ISG-request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStandStillVehSpdOK", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdHyst": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast, hysteresis", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdHyst", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMinOff": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOff", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMinOn": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOn", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadGearLvrPNDisengEna": { + "type": "Bool", + "unit": "-", + "description": "Disengage Efad in gear lever position Park and Neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadGearLvrPNDisengEna", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnaParkEngd": { + "type": "Bool", + "unit": "-", + "description": "Enable Efad path disregarding park engaged status", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnaParkEngd", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdEfad": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Efad Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdEfad", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdIsg": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Isg Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdIsg", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadModReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadModReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathAllwd1": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd1", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathAllwd2": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadDrvCycTiOut": { + "type": "Float32", + "unit": "s", + "description": "Limit for drivecycle timeout indication", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadDrvCycTiOut", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadGearLvrPNDetn": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of when the gear lever is in park or neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadGearLvrPNDetn", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the EFAD path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadPahDiTiOut2", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadShftProgsOffDly": { + "type": "Float32", + "unit": "s", + "description": "CAN delay compensation for EfadShiftInProgress-signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsOffDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadShftProgsTimeOut": { + "type": "Float32", + "unit": "s", + "description": "Time out detection for Efad gear shifting", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsTimeOut", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadTrqAllowTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout before torque allow from dep disables Tq-ctrl", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadTrqAllowTiOut", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_GearLevDRDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Drive or Reverese", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_GearLevDRDly", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgDrCycStop": { + "type": "Float32", + "unit": "s", + "description": "Keep ISG activation for a short time after engine has been stopped", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStop", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgDrCycStopMax": { + "type": "Float32", + "unit": "s", + "description": "Allow keep ISG activation after end of drive cycle, intended for soft stop", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStopMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the ISG path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgPahDiTiOut", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadGearLvrPNDiseng": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to keep Efad engaged to wheels in P/N", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/v_EfadGearLvrPNDiseng", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseEfadCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/B_UseEfadCode", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_12VStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_dbi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_swi", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtFirstStartOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtFirstStartOverride", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPcrOverride": { + "type": "Bool", + "unit": "-", + "description": "Override PCR in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtPcrOverride", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtRunDryOverride": { + "type": "Bool", + "unit": "-", + "description": "Override run dry condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtRunDryOverride", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtSpdCtrlOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtSpdCtrlOverride", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtTempOverride": { + "type": "Bool", + "unit": "-", + "description": "Override temp condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtTempOverride", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_UseOilTemp": { + "type": "Bool", + "unit": "-", + "description": "Use oil temperature to determine if ISG start i possible", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_UseOilTemp", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_Pw_IsgStrtAllow": { + "type": "Float32", + "unit": "W", + "description": "Minimum available ISG power to allow ISG start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Pw_IsgStrtAllow", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_Te_IsgStartPossible": { + "type": "Float32", + "unit": "deg C", + "description": "Use oil temperature to determine if ISG start i possible", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Te_IsgStartPossible", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_rt_IsgStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/rt_IsgStrtAllow", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_t_IsgRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from ISG or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgRunReqDelay", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtOkDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay to wait on Isg start Ok", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/t_IsgStrtOkDelay", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_v_12VStrtMax": { + "type": "Float32", + "unit": "km/h", + "description": "Maximum speed for 12V start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/v_12VStrtMax", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtUseSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/B_IsgStrtUseSpdCtrl", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "width": 1 + }, + "cVcVmcPmm_B_ISGTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override ISGTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_ISGTqAllw", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_B_IsgIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Isg Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgIgnrPathDisable", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_B_IsgRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_IsgReq, If 0 => sVcIsc_Tq_Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgRmpDwnTqSignal", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_B_SkipIsgCalibration": { + "type": "Bool", + "unit": "-", + "description": "Skip ISG standby request at Ice stop for sensor calibration", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_SkipIsgCalibration", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgSpdCtrlStrt": { + "type": "Bool", + "unit": "-", + "description": "Use ISG speed control during safe start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_UseIsgSpdCtrlStrt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Tq_IsgRampDown", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_t_IsgAdapt": { + "type": "Float32", + "unit": "s", + "description": "Time for ISG calibration request", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgAdapt", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_t_IsgDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgDisable", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_t_IsgICEStop": { + "type": "Float32", + "unit": "s", + "description": "Delay on for ICE stop for ISG stanby request", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgICEStop", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/B_UseIsgCode", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "width": 1 + }, + "cVcVmcPmm_Tq_TransHeatReqOffset": { + "type": "Float32", + "unit": "Nm", + "description": "Torque offset to reset heat request to TmStrt", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReqOffset", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": 1 + }, + "cVcVmcPmm_t_TransHeatDelayOn": { + "type": "Float32", + "unit": "s", + "description": "Delay on time for trans heat request", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/t_TransHeatDelayOn", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": 1 + }, + "cVcVmcPmm_B_PTDGearLevAT": { + "type": "Bool", + "unit": "-", + "description": "Use Gear Lever position to set powertrain disengaged.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_PTDGearLevAT", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIceEnable": { + "type": "Bool", + "unit": "-", + "description": "Use ICE enable", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseIceEnable", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseOld12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOld12VStrtAllwd", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseOldEngStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOldEngStrtAllwd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngOnReq_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngOnReq_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngineArchitecture": { + "type": "Bool", + "unit": "-", + "description": "Switch for signal conditioning depending on engine architecture. 0= VEA GEN I/II ; 1= GEP3", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/B_EngineArchitecture", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_DrDoorOpen": { + "type": "UInt8", + "unit": "-", + "description": "DoorDrvrSts detection of driver door open", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/D_DrDoorOpen", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "tVcVmcPmm_p_BrVacuumVeh_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh_x", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": [ + 1, + 7 + ] + }, + "tVcVmcPmm_Z_HillGradAcc2deg_x": { + "type": "Float32", + "unit": "m/s2", + "description": "X-value (longit. accel. input), relation of accel. to slope(deg);", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg_x", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": [ + 1, + 5 + ] + }, + "mVcVmcPmm_tc_HillGradient_c": { + "type": "Float32", + "unit": "Nm", + "description": "Total Wheel Trq Brake", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_c", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": [ + 1, + 4 + ] + }, + "mVcVmcPmm_tc_HillGradient_r": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_r", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": [ + 1, + 6 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline_c": { + "type": "Float32", + "unit": "-", + "description": "Road inclination", + "max": 100000, + "min": -100000, + "lsb": 0.0625, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_c", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": [ + 1, + 8 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline_r": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque", + "max": 100000, + "min": -100000, + "lsb": 0.25, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_r", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": [ + 1, + 8 + ] + }, + "tVcVmcPmm_Tq_IsgStrtAllow_x": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow_x", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_Tq_TransHeatReq_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq_x", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart, depending on vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": "((VcVmcPmm__HEP7_1140_Brake_1))", + "width": [ + 1, + 7 + ] + }, + "tVcVmcPmm_Z_HillGradAcc2deg": { + "type": "Float32", + "unit": "Deg", + "description": "Hill Gradient i degree", + "max": 90, + "min": -90, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": [ + 1, + 5 + ] + }, + "mVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "Hill Gradient Time Constant for filter depending on TrqWhlBrk and Vehicle Speed.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": "((VcVmcPmm__HEP7_1150_Gradient_estimation_2))", + "width": [ + 6, + 4 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "width": [ + 8, + 8 + ] + }, + "tVcVmcPmm_Tq_IsgStrtAllow": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum available ISG torque to allow ISG start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_Tq_TransHeatReq": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum torque to send heat request to TmStrt to warm transmission oil", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq", + "configs": "((ALWAYS_ACTIVE) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": [ + 1, + 6 + ] + } + } +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/config_aux_defs.json b/tests/pybuild/reference_files/config_aux_defs.json new file mode 100644 index 0000000..b0cdfac --- /dev/null +++ b/tests/pybuild/reference_files/config_aux_defs.json @@ -0,0 +1,38 @@ +{ + "SVmcPmm__HE1_VcVmcPmm_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE171__lOperator35_AUX": "(Vc_Pvc_Hw_B_AT || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE171__lOperator35_A_a": "((VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE173_Merge_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE173_Merge_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9)", + "SVmcPmm__HE173_Merge_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE173_Merge_AUX_c": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE173_Merge1_AUX": "(VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE173_Merge1_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE173_Merge1_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE477_MinMax_AUX": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE477__lOperator18_AUX": "(Vc_Pvc_Hw_B_AT || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE477__lOperator18_A_a": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE512_Switch_AUX": "((VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE614__lOperator11_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "SVmcPmm__HE784_Merge_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784_Merge_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE784_Merge_AUX_c": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge_AUX_d": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784_Merge5_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE784_Merge5_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784_Merge5_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge5_AUX_c": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784__lOperator19_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE808__calOperator_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE818_Switch_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE821__ransHeatReq_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "SVmcPmm__HE637__hEnable_dbi_A_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE637__hEnable_dbi_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE637__hEnable_dbi_A_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE389__ReqUseTrans_AUX": "(VcVmcPmm__HEP7_121M_StartModeHybrid_3 || VcVmcPmm__HEP7_121N_StartModeHybrid12V_4)", + "SVmcPmm__HE785__sgStrtAllow_A_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE785__sgStrtAllow_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE785__sgStrtAllow_A_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE148_Switch_AUX": "(VcVmcPmm__HEP7_1150_Gradient_estimation_2 || VcVmcPmm__HEP7_1140_Brake_1)" +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/config_combined.json b/tests/pybuild/reference_files/config_combined.json new file mode 100644 index 0000000..1c0d968 --- /dev/null +++ b/tests/pybuild/reference_files/config_combined.json @@ -0,0 +1,14720 @@ +{ + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": { + "yVcVmcPmm_B_EngOnReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngOnReq", + "name": "yVcVmcPmm_B_EngOnReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine on request from CVC, 1 = Engine on 0 = Engine off", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradClutchReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradClutchReq", + "name": "yVcVmcPmm_B_EradClutchReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Request state of ERAD disconnect clutch", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_TransModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_TransModeReq", + "name": "sVcVmcPmm_D_TransModeReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (ALWAYS_ACTIVE))", + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_CrShPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_CrShPathEnable", + "name": "yVcVmcPmm_B_CrShPathEnable", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad) || (ALWAYS_ACTIVE))", + "description": "enables the crankshaft path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EradPathEnable", + "name": "yVcVmcPmm_B_EradPathEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "enables the erad path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_IceStatus": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IceStatus", + "name": "sVcVmcPmm_D_IceStatus", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current status of the ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_WhlMotSysModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EradModeReq", + "name": "sVcVmcPmm_D_WhlMotSysModReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Mode request for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_IsgModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_IsgModeReq", + "name": "sVcVmcPmm_D_IsgModReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg))))", + "description": "Mode request for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_PowerDownReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_PowerDownReq", + "name": "yVcVmcPmm_B_PowerDownReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTot": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_EngRunReqTot", + "name": "yVcVmcPmm_B_EngRunReqTot", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsActive", + "name": "yVcVmcPmm_B_SsActive", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsRcfAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsRcfAct", + "name": "yVcVmcPmm_B_SsRcfAct", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Flag to indicate the reconfiguration has been activated (Stop/Start request inhibited).", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqEms": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms", + "name": "yVcVmcPmm_B_EngRunReqEms", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms1", + "name": "yVcVmcPmm_B_EngRunReqEmLv", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms2", + "name": "yVcVmcPmm_B_EngRunReqClim", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_StallPwdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_StallPwdReq", + "name": "yVcVmcPmm_B_StallPwdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stall power down request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqBrake": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms3", + "name": "yVcVmcPmm_B_EngRunReqBrake", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "description": "Engine running request used only for DRO purpose ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IceStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_IceStall", + "name": "yVcVmcPmm_B_IceStall", + "configs": "((ALWAYS_ACTIVE))", + "description": "TBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_StartMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_StartMode", + "name": "sVcVmcPmm_D_StartMode", + "configs": "((ALWAYS_ACTIVE))", + "description": "Type of requested start. (0=Normal, 1=Fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsAmbFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAmbFault", + "name": "yVcVmcPmm_B_SsAmbFault", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Ambient temp out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqHG": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqHG", + "name": "sVcVmcPmm_D_EngRunReqHG", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Engine running request for hill gradient", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqBrkVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac", + "name": "sVcVmcPmm_D_EngRunReqBrkVac", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Engine running request brake vacuum", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqFanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms4", + "name": "yVcVmcPmm_B_EngRunReqFanAfterrun", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTrans": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms5", + "name": "yVcVmcPmm_B_EngRunReqTrans", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (ALWAYS_ACTIVE))", + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms7", + "name": "yVcVmcPmm_B_12VStartEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request for HMI message", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms8", + "name": "yVcVmcPmm_B_IsgStartReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Isg in torque control", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_FCAdaptReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms9", + "name": "yVcVmcPmm_B_FCAdaptReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine request fuel adaption", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac1", + "name": "yVcVmcPmm_B_EngRunReqTm", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request from Tm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_RunReqDriverHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms10", + "name": "yVcVmcPmm_B_RunReqDriverHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "description": "Driver run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_RunReqSystemHmi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_EngRunReqBrkVac2", + "name": "yVcVmcPmm_B_RunReqSystemHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "description": "System run request to be used by HMI function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_Z_HillGradientDeg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_Z_HillGradientDeg", + "name": "sVcVmcPmm_Z_HillGradientDeg", + "configs": "((ALWAYS_ACTIVE))", + "description": "Electrical park brake Hill gradient estimation", + "type": "Float32", + "unit": "deg", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_BlockPushStartHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms11", + "name": "yVcVmcPmm_B_BlockPushStartHMI", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Info to HMI to not show Press Start Button msg if powerdown on door open and belt off - do not hide Ignition On msg", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_UnintdStall": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms12", + "name": "yVcVmcPmm_B_UnintdStall", + "configs": "((ALWAYS_ACTIVE))", + "description": "Unintended stall flag", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActSeatBeltHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms13", + "name": "yVcVmcPmm_B_SsActSeatBeltHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to driver seat belt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActDoorOpenHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms14", + "name": "yVcVmcPmm_B_SsActDoorOpenHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to opened driver door", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsAltitudeFault": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault", + "name": "yVcVmcPmm_B_SsAltitudeFault", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Altitude / ambient pressure out of range for stop/start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActTrailerHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms15", + "name": "yVcVmcPmm_B_SsActTrailerHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to trailer connected (including other conditions)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActAmbHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms16", + "name": "yVcVmcPmm_B_SsActAmbHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to ambient temperature", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActHoodHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms17", + "name": "yVcVmcPmm_B_SsActHoodHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Info to HMI that Stop/Start is not active due to hood open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms18", + "name": "yVcVmcPmm_B_EngRunReqRc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Info to HMI that EngRunReq from PpmRc (Starter protection etc) is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EradDrReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms19", + "name": "yVcVmcPmm_B_EradDrReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Erad Activavtion is requested by driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcPmm_D_DroEngRunReqEms20", + "name": "yVcVmcPmm_B_IsgActReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg))))", + "description": "Isg is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_TransHeatReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault1", + "name": "yVcVmcPmm_B_TransHeatReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "description": "Transmission heat request to TmStrt", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault2", + "name": "sVcVmcPmm_D_EngRunReqLogg", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4294970000, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngOnReqEng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault3", + "name": "yVcVmcPmm_B_EngOnReqEng", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "description": "EngOnReqEng", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqClim": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault4", + "name": "sVcVmcPmm_D_EngRunReqClim", + "configs": "((ALWAYS_ACTIVE))", + "description": "EngRunReq from Climate, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngRunReqEmLv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault5", + "name": "sVcVmcPmm_D_EngRunReqEmLv", + "configs": "((ALWAYS_ACTIVE))", + "description": "EngRunReq from Power Supply, via VcVmcPmm", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqSapp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault6", + "name": "yVcVmcPmm_B_EngRunReqSapp", + "configs": "((ALWAYS_ACTIVE))", + "description": "EngRunReq from Parking Assistance, via VcVmcPmm", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActDrMdHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault7", + "name": "yVcVmcPmm_B_SsActDrMdHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Stop/Start inhibition by DriveMode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_SsActAbsHMI": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault8", + "name": "yVcVmcPmm_B_SsActAbsHMI", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Stop/Start inhibition by ABS activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault9", + "name": "yVcVmcPmm_B_PwrUpIceStrtReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ice start request at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault10", + "name": "yVcVmcPmm_B_EngRunReqObd", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "description": "Run request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault11", + "name": "yVcVmcPmm_B_EngRunReqFuel", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (ALWAYS_ACTIVE))", + "description": "Run request by fuel age", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_AutoParkReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault12", + "name": "yVcVmcPmm_B_AutoParkReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Autopark request from driver leave function", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EfadPathReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGscCts_D_EfadPathAct", + "name": "sVcVmcPmm_D_EfadPathReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "EFAD path request (0=Don't care 1=Efad2Ice 2=Efad2Whl 5=Disengaged)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_ClutchStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault13", + "name": "yVcVmcPmm_B_ClutchStartReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Clutch ICE start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault14", + "name": "yVcVmcPmm_B_IsgPathEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "The ISG path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EfadPathEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault15", + "name": "yVcVmcPmm_B_EfadPathEnable", + "configs": "((ALWAYS_ACTIVE))", + "description": "The EFAD path is open", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_TrnEngageReqHev": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault16", + "name": "yVcVmcPmm_B_TrnEngageReqHev", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Transmission engage request in hybrid vehicles", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_WhlMotSysCluOperTypReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault17", + "name": "sVcVmcPmm_D_WhlMotSysCluOperTypReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Control signal for diff-speed direction and response level of clutch engagement", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_EfadActReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault18", + "name": "yVcVmcPmm_B_EfadActReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "The electric motor (EFAD) is requested to be activated", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "sVcVmcPmm_D_EngagementMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault19", + "name": "sVcVmcPmm_D_EngagementMode", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (ALWAYS_ACTIVE))", + "description": "Engagement mode (1=smooth, 2=fast)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_IsgStrtPahReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault20", + "name": "yVcVmcPmm_B_IsgStrtPahReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request to open the ISG path", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + }, + "yVcVmcPmm_B_FastIsgStopReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcPmm_B_SsAltiitudeFault21", + "name": "yVcVmcPmm_B_FastIsgStopReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request for fast Efad reconfiguration for ISG stop", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_DISP", + "width": 1 + } + }, + "inports": { + "sVcScIn_v_VehSpdLgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_v_Veh", + "name": "sVcScIn_v_VehSpdLgt", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_Eng": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_Eng", + "name": "sVcEc_n_Eng", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Engine speed", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_EngRunReqDriver": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EngRunReqDriver", + "name": "sVcDeDmm_D_EngRunReqDriver", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Engine running request from driver mode manager", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCcm_D_EngRunngReqByClima": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcAc_B_EngRunReqClim", + "name": "sVcCcm_D_EngRunngReqByClima", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_D_EngRunngReqByBrk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_EngRunReqBrake", + "name": "sVcVdm_D_EngRunngReqByBrk", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Enging run request from BCM (VDM)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseGb_D_TrsmEngRunReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcTc_B_EngRunReqTrans", + "name": "sVcDseGb_D_TrsmEngRunReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_D_EngRunReqEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_EngRunReqEMS", + "name": "sVcEc_D_EngRunReqEMS", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request (inhibit stop) from EMS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcIem_B_WhlMotSysCluSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcIsc_B_EradClutch", + "name": "yVcIem_B_WhlMotSysCluSts", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "ERAD clutch status. 0 = clutch open 1 = clutch closed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcMtcTc_Tq_EradReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcTc_Tq_EradReq", + "name": "sVcMtcTc_Tq_EradReqWhl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Requested ERAD Torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PropulsionAllowed", + "name": "yVcPpmPsm_B_PropulsionAllowed", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Determine if it is allowed to apply tq", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_PowertrainDisengaged": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_PowertrainDisengaged", + "name": "yVcScIn_B_PowertrainDisengaged", + "configs": "((ALWAYS_ACTIVE))", + "description": "Determines if powertrain is disengaged or not", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_GearLevAT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT", + "name": "sVcDtcAtr_D_GearLevAT", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Gear Lever Position", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcAtr_B_AT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcGp_D_GearBox", + "name": "yVcDtcAtr_B_AT", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Automatic gearbox", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcEm_D_EngRunReqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm", + "name": "sVcVmcEm_D_EngRunReqEm", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request from Energy Management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_IceEnabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_IceEnabled", + "configs": "((ALWAYS_ACTIVE))", + "description": "Internal Combustion Engine Enabel (this includes both enabel for remotestart and enabel for propulsion(DriveCycle active))", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcAsy_D_EngRunngReqByParkAssi": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPam_D_EngRunReqSapp", + "name": "sVcAsy_D_EngRunngReqByParkAssi", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine running request (inhibit stop) from climate", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_StartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StartAllowed", + "name": "yVcDepSs_B_StartAllowed", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Start allowance from Dependability monitoring: 1 = Start initiation is allowed, 0 = start initiation not allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_StopAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_StopAllowed", + "name": "yVcDepSs_B_StopAllowed", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "description": "Stop of engine allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcCta_Tq_CrShInstReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDtcCta_Tq_CrShInstReq", + "name": "sVcDtcCta_Tq_CrShInstReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Total requested crankshaft torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EcoModeSs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode", + "name": "yVcDeDmm_B_EcoModeSs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_MicHevMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDeDmm_D_MicHevMode", + "name": "sVcDeDmm_D_MicHevMode", + "configs": "((ALWAYS_ACTIVE))", + "description": "Micro hybrid mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_DrReady": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DrReady", + "name": "yVcPpmPsm_B_DrReady", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Driver has requested a PowerUp or a PowerDown", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScDep_X_ClutchPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcDi_X_ClPed", + "name": "sVcScDep_X_ClutchPedalPos", + "configs": "((ALWAYS_ACTIVE))", + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVdm_B_AbsCtrlActv": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_AbsCtrl", + "name": "yVcVdm_B_AbsCtrlActv", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Anti Blocking Systems (ABS) control is active (at least one wheel)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_EngFastStop": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDepSs_B_EngFastStop", + "name": "yVcDepSs_B_EngFastStop", + "configs": "((ALWAYS_ACTIVE))", + "description": "Emergency Fast stop from dependability. 1= Stop, 0 = Dont care", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_StartMotor": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_StartMotor", + "name": "yVcEc_B_StartMotor", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current status of the Start motor 1= running,0 = not running", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Te_Amb", + "name": "sVcEc_Te_Amb", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Ambient (outdoor) temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 120, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Qf_TeAmb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Qf_TeAmb", + "name": "sVcEc_Qf_TeAmb", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Quality factor for ambient temperature", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 4, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_SsRcfSetAlt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_SsRcfSetAlt", + "name": "yVcEc_B_SsRcfSetAlt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Reconfiguration flag for normal functionality. Placeholder to be used if needed.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_p_PVac": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_p_BrVacuum", + "name": "sVcVdm_p_PVac", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Brake vacuum pressure", + "type": "Float32", + "unit": "bar", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_ForcedStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_ForcedStart", + "name": "yVcPpmPsm_B_ForcedStart", + "configs": "((ALWAYS_ACTIVE))", + "description": "Driver is forcing a start eg rolling the vehicle to active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcGp_D_StopStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcGp_D_StopStart", + "name": "sVcGp_D_StopStart", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Car config: Stop Start (1 = no start stop,2 = start stop)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_NeutralMTValid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_NeutralMTValid", + "name": "yVcScDep_B_NeutralMTValid", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Neutral adaption finished", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_BltLockStAtDrvr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle7", + "name": "yVcCem_B_BltLockStAtDrvr", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Driver seat buckle", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_FootOnClutchPedalASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_FootOnClutchPedal", + "name": "yVcScDep_B_FootOnClutchPedalASILB", + "configs": "((ALWAYS_ACTIVE))", + "description": "tbd", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmPsm_D_EngRunReqPsm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcPpmPsm_D_EngRunReqPsm", + "name": "sVcPpmPsm_D_EngRunReqPsm", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "", + "type": "UInt8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_BrkFricTqAtWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBc_Tq_TotWhBrk1", + "name": "sVcDseWt_Tq_BrkFricTqAtWhl", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Total friction brake torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 32763, + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_X_AccPedalPos": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDi_X_AccPed1", + "name": "sVcScIn_X_AccPedalPos", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Accelerator Pedal Position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StrtAbortSoft": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortSoft", + "name": "yVcPpmRc_B_StrtAbortSoft", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cranking is aborted by VcPpmRc and restart can be done automaticaly without requiring new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_StrtAbortHard": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard", + "name": "yVcPpmRc_B_StrtAbortHard", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Cranking is aborted by VcPpmRc and restart requires new KL50 or DriverCrankingRequest", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_TrnEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard1", + "name": "yVcDeDmm_B_TrnEngageRqDr", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_AT))", + "description": "transmission engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EradEngageRqDr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable1", + "name": "yVcDeDmm_B_EradEngageRqDr", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage request from driver", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_EradEngageRqEm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_DCDCEnable2", + "name": "yVcVmcEm_B_EradEngageRqEm", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_SsRcfSet": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc2", + "name": "yVcEc_B_SsRcfSet", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Reconfiguration flag to dependability to deny stop/start functionality.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_VehSpdDirRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc3", + "name": "yVcScIn_B_VehSpdDirRvs", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Vehicle speed is in reverse direction", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_VehSpdLgtOk": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc5", + "name": "yVcScIn_B_VehSpdLgtOk", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Vehicle Speed Ok", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmAf_Z_FanAfterrun": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc4", + "name": "sVcTmAf_Z_FanAfterrun", + "configs": "((ALWAYS_ACTIVE))", + "description": "predicted fan step if engine stops", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_TCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive", + "name": "yVcEc_B_TCMNodeAlive", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "TCM node alive (1=communication works)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTrm_B_TrlrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear1", + "name": "yVcTrm_B_TrlrPrsnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Trailer Present", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvrBrkgASILB": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive1", + "name": "yVcScIn_B_DrvrBrkgASILB", + "configs": "((ALWAYS_ACTIVE))", + "description": "Driver is pressing the brake pedal to at ASIL B integrity", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_FootOnClutchPedal": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcScDep_B_ClutchNonFailed", + "name": "yVcScDep_B_FootOnClutchPedal", + "configs": "((ALWAYS_ACTIVE))", + "description": "Clutch pedal indicate pressed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_PropRear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc8", + "name": "sVcDseWt_Tq_PropRear", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Actual Propuslion Torque on rear wheels (=ERAD Torque)", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcTc_Tq_IsgReqCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc7", + "name": "sVcDtcTc_Tq_IsgReqCrSh", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "description": "Requested ISG Torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseCt_Tq_IsgCrSh": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive2", + "name": "sVcDseCt_Tq_IsgCrSh", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "description": "Actual Isg torque at crank shaft", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvgDirFwdDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear2", + "name": "yVcScIn_B_DrvgDirFwdDes", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Driver desired propulsion direction is forward", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_DrvgDirRvsDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive3", + "name": "yVcScIn_B_DrvgDirRvsDes", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Driver desired propulsion direction is reverse", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_EngCooltT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive4", + "name": "sVcEc_Te_EngCooltT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Real time value of coolant temp, wide range (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -50, + "max": 150, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive7", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_IsgStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPpmPsm_B_StrtAbortHard2", + "name": "yVcDtcSt_B_IsgStrtAbort", + "configs": "((ALWAYS_ACTIVE))", + "description": "ISG start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDsePcr_D_EngRunRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_81", + "name": "sVcDsePcr_D_EngRunRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run request from LOS", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_82", + "name": "yVcDsePcr_B_IsgDisableRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Request from LOS to disable ISG", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_83", + "name": "yVcDsePcr_B_EradDisableRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Request from LOS to disable ERAD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EngStartInhibtRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_84", + "name": "yVcDsePcr_B_EngStartInhibtRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request from LOS to inhibit engine start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EngStopRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_85", + "name": "yVcDsePcr_B_EngStopRq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request from LOS to stop engine", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTcm_B_TrsmNeutFailr": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_2", + "name": "yVcTcm_B_TrsmNeutFailr", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Note: 1 (failure) is set when the transmission can not be put in mode 3, 4 or 5 (neutral), for any reason such as EOP failure etc.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcTc_B_FcReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_3", + "name": "yVcDtcTc_B_FcReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Main conditions for fuelcut enabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_v_VehSpdLgtMax": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive8", + "name": "sVcScIn_v_VehSpdLgtMax", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad) || (ALWAYS_ACTIVE))", + "description": "Maximum vehicle speed over ground, estimated with front wheel speed", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 300, + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmPsm_D_EngRunReqRemote": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear3", + "name": "sVcPpmPsm_D_EngRunReqRemote", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request engine running for remote start", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_n_TrgGear": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive11", + "name": "sVcDtcAtr_n_TrgGear", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Engine speed at target gear", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcIcl_n_IdleSpdBs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcDtcAtr_D_Gear3", + "name": "sVcDtcIcl_n_IdleSpdBs", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (Vc_Pvc_Hw_B_AT))", + "description": "Target idle speed base level", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgStartDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_4", + "name": "yVcDsePcr_B_IsgStartDisableRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Request from LOS to open Charge PSR relay", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcAwd_D_EngRunReqStabCtrl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_5", + "name": "sVcVmcAwd_D_EngRunReqStabCtrl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run req from to ensure that Ice keep running during cornering", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear6", + "name": "sVcVdm_a_ALgt", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Longitudinal acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Qf_ALgtQf": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc9", + "name": "sVcVdm_Qf_ALgtQf", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "Longitudinal acceleration QF", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAjc_Tq_DrPropFrntReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct1", + "name": "sVcDtcAjc_Tq_DrPropFrntReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Requested Front Axle Torque stability limitations", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmm_D_CarModSts1": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc10", + "name": "sVcVmm_D_CarModSts1", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Car mode from vechicle mode management", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmPsm_B_DriveCycleActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcPsm_B_DriveCycleActive", + "name": "yVcPpmPsm_B_DriveCycleActive", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Driver has entered the driving cycle 1= Active 0 = Not Active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_p_Amb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_ReversedGear7", + "name": "sVcEc_p_Amb", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Ambient pressure sensor", + "type": "Float32", + "unit": "kPa", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_TipSport": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc11", + "name": "yVcDeDmm_B_TipSport", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Tip or sport mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_D_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc12", + "name": "sVcCem_D_DoorDrvrSts", + "configs": "((ALWAYS_ACTIVE))", + "description": "Driver door status (0=Unknown, 1=Opened, 2=Closed)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_Qf_DoorDrvrSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc13", + "name": "sVcCem_Qf_DoorDrvrSts", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Driver door status quality factor", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 3, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_TransMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_6", + "name": "sVcDtcAtr_D_TransMode", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "TransMode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcSpMon_D_PtTrsmModReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_7", + "name": "sVcSpMon_D_PtTrsmModReq", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Signal is used for requesting neutral or engaged state of the transmission.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_EngRunReqDrReEval": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc14", + "name": "yVcDeDmm_B_EngRunReqDrReEval", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request from driver evaluator to re-evaluate engine run request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_n_EngHiRes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_n_EngHiRes", + "name": "sVcEc_n_EngHiRes", + "configs": "((ALWAYS_ACTIVE))", + "description": "Hi resolution engine speed signal", + "type": "Float32", + "unit": "rpm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCem_D_HoodSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle14", + "name": "sVcCem_D_HoodSts", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "description": "Engine compartment hood status 0=Ukwn - Unknown status 1=Opend - Opened 2=Clsd - Closed", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_ShutOffReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle1", + "name": "yVcPpmRc_B_ShutOffReq", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0))", + "description": "Shut off request to VmcPmm due to two mass flywheel protection", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_StrtInhbReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv", + "name": "yVcCem_B_StrtInhbReq1WdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_StopStrtReq1WdReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBec_B_EngRunReqEmLv1", + "name": "yVcCem_B_StopStrtReq1WdReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "StopStart", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcPpmRc_D_EngRunReqRc": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDi_B_DrSeatBuckle2", + "name": "sVcPpmRc_D_EngRunReqRc", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run engine (do not S/S stop) due to starter motor over heat protection", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "sVcFsdPc_D_EngRunReqFuel": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc1", + "name": "sVcFsdPc_D_EngRunReqFuel", + "configs": "((ALWAYS_ACTIVE))", + "description": "0=OK, 1=Warn, 2 = Start, 3 not used", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepTre_B_ISGTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct3", + "name": "yVcDepTre_B_ISGTqAllw", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "ISG propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcEsc_B_Active": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct10", + "name": "yVcDtcEsc_B_Active", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Engine speed control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_SafeEngStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct11", + "name": "yVcDsePcr_B_SafeEngStrtReq", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Safe start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDeDmm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_StrtMdeReq", + "name": "yVcDeDmm_B_RespStartReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (ALWAYS_ACTIVE))", + "description": "Responsive start requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcIem_D_WhlMotSysModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct5", + "name": "sVcIem_D_WhlMotSysModSts", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Actual mode for motor drive system connected to wheel shaft.", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcCidd_D_IsgModSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct8", + "name": "sVcCidd_D_IsgModSts", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Actual mode for ISG motor drive system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Tq_EradMaxAvailWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct9", + "name": "sVcDseEm_Tq_EradMaxAvailWhl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "description": "Maximum available ERAD torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradEngageRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct15", + "name": "yVcDsePcr_B_EradEngageRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Request from Los to engage Erad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_v_VehDrDirectionRaw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive15", + "name": "sVcDtcAtr_v_VehDrDirectionRaw", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "description": "Vehicle speed in driver intended direction unfiltered (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_TransNtrlDisable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct17", + "name": "yVcDsePcr_B_TransNtrlDisable", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Request from LOS to disable request of neutral mode to TCM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_rt_IsgMaxTorqueLoss": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive13", + "name": "sVcDseEm_rt_IsgMaxTorqueLoss", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "ISG torque limit ratio", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_AccFtOnPed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct12", + "name": "yVcScDep_B_AccFtOnPed", + "configs": "((ALWAYS_ACTIVE))", + "description": "Foot on AccPedal ASILC", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFsdPc_B_RunDry": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct13", + "name": "yVcFsdPc_B_RunDry", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (ALWAYS_ACTIVE))", + "description": "Detection of empty tank for protection of the fuel pump", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_TransNtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct14", + "name": "yVcDsePcr_B_TransNtrlRq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Request from LOS too pot transmission in neutral", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepTre_B_ERADTqAllw": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEpb_a_LongAcc16", + "name": "yVcDepTre_B_ERADTqAllw", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "ERAD propulsive torque allowed by SPM torque monitoring.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_DrvMode": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct2", + "name": "sVcDeDmm_D_DrvMode", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "description": "Propulsion drive mode: 1 Eco plus, 2 Eco plus-plus, 3 Eco reduced, 4 Sport, 5 comfort, 6 XC mode, 7 AWD, 8 Save for later, 9 Pure, 10 Hybrid, 11 Power, 12 N/A, 13 N/A, 14 N/A: 15 N/A", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 15, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrChassie": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct6", + "name": "yVcCem_B_EngRunngReqByVehModMgrChassie", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by chassie", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcObdSch_D_EngRunReqObd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct18", + "name": "sVcObdSch_D_EngRunReqObd", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request from Obd", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct19", + "name": "yVcVmcEm_B_EngageReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "description": "Drivetrain engage request from EM", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_IscActvnEMS": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct20", + "name": "yVcEc_B_IscActvnEMS", + "configs": "((ALWAYS_ACTIVE))", + "description": "Idle speed activation request from EMS", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct21", + "name": "yVcCem_B_EngRunngReqByVehModMgrElectricalSystem", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by electrical system", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrClimate": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct22", + "name": "yVcCem_B_EngRunngReqByVehModMgrClimate", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by climate", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct23", + "name": "yVcCem_B_EngRunngReqByVehModMgrTrailerPrsnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Stopstart restart or inhibit request by trailer", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcObdSch_B_FuelCutReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct24", + "name": "yVcObdSch_B_FuelCutReq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Ful cut request by OBD", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcPpmRc_B_ChangeOfMindInhibit": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct25", + "name": "yVcPpmRc_B_ChangeOfMindInhibit", + "configs": "((ALWAYS_ACTIVE))", + "description": "inhibit ChangeOfMind fuel recovery in order to not interfer with the starter motor activation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEc_B_BCMNodeAlive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct26", + "name": "yVcEc_B_BCMNodeAlive", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "description": "BCM Node alive", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss2", + "name": "yVcDsePcr_B_IsgNoTqRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "ISG no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EradNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct28", + "name": "yVcDsePcr_B_EradNoTqRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Erad no torque request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_NICEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct31", + "name": "yVcVmcEm_B_NICEnable", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "NIC enabled by energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_IsgUdcCtrlRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct34", + "name": "yVcDsePcr_B_IsgUdcCtrlRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Request to put ISG in Udc control mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Ps_FCLvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct35", + "name": "sVcEc_Ps_FCLvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Current level of FC", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTcm_Te_TrsmOilT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct63", + "name": "sVcTcm_Te_TrsmOilT", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "description": "Gear box oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -40, + "max": 200, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct32", + "name": "yVcDsePcr_B_PwrUpIceStrtReq", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Request for a combustion engine start at powerup", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_PwrUpIceStrtReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct36", + "name": "yVcVmcEm_B_PwrUpIceStrtReq", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Ice start request at startup from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScIn_D_EngRunReqDepTrq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct37", + "name": "sVcScIn_D_EngRunReqDepTrq", + "configs": "((ALWAYS_ACTIVE))", + "description": "Engine run request from Dependability torque estimation system", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcScDep_B_DrvrPrsnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive3", + "name": "yVcScDep_B_DrvrPrsnt", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Driver present from CEM and signal received correctly", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_ChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct40", + "name": "yVcVmcEm_B_ChrgReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Charge request in HEP7", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcCmnEngRunReqCEC_D_Req": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct41", + "name": "sVcCmnEngRunReqCEC_D_Req", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request ICE to be running / Start ICE", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCmnEngRunReqCEC_B_ReqLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct42", + "name": "yVcCmnEngRunReqCEC_B_ReqLong", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcCtc_D_EfadModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive18", + "name": "sVcDtcCtc_D_EfadModeReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "EM Mode request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 5, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseGb_D_EfadPathAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive17", + "name": "sVcDseGb_D_EfadPathAct", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Actual Efad path (1=IsgPath, 2=WhlPath, 5=Disengaged, 6=Transition)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 6, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EfadIsgPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss16", + "name": "yVcDseGb_B_EfadIsgPathNotAvl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Efad Isg path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EfadDisableRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct45", + "name": "yVcDsePcr_B_EfadDisableRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Disable Efad modes of operation", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtc_B_CrShPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct7", + "name": "yVcVmcWtc_B_CrShPathDisabled", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "There is no torque from the ICE acting on the front axel", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_NeutralMT": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcEc_B_RemoteRcfSet2", + "name": "yVcScIn_B_NeutralMT", + "configs": "((ALWAYS_ACTIVE))", + "description": "Neutral MT ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcWtd_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcWtd_Tq_FrntReqWhl", + "name": "sVcVmcWtd_Tq_FrntReqWhl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_D_LockUp": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/InPort55", + "name": "sVcDtcAtr_D_LockUp", + "configs": "((ALWAYS_ACTIVE))", + "description": "Actual lock-up mode", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEc_Te_EngClnt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT10", + "name": "sVcEc_Te_EngClnt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Real time value of coolant temp (deg C)", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -80, + "max": 160, + "class": "CVC_EXT", + "width": 1 + }, + "sVcEmiHeat_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcDeDmm_B_EcoMode34", + "name": "sVcEmiHeat_D_EngUseReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Catalyst engine request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcCmnSta_B_StaExeTx": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcBc_B_BrPedSw2", + "name": "yVcCmnSta_B_StaExeTx", + "configs": "((ALWAYS_ACTIVE))", + "description": "Start execution", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcInjFuCut_rt_Lvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl1", + "name": "sVcInjFuCut_rt_Lvl", + "configs": "((ALWAYS_ACTIVE))", + "description": "Final fuel cut level", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_v_VehDrDirection": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT1", + "name": "sVcDtcAtr_v_VehDrDirection", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Vehicle speed in driver intended direction (Positive in driver intended direction negative in opposite)", + "type": "Float32", + "unit": "km/h", + "offset": "-", + "lsb": "-", + "min": -500, + "max": 500, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_CluStrtAbort": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcEc_Ps_FCLvl2", + "name": "yVcDtcSt_B_CluStrtAbort", + "configs": "((ALWAYS_ACTIVE))", + "description": "Clutch start aborted", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscSgs_B_CluStrtAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT3", + "name": "yVcGscSgs_B_CluStrtAvl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Clutch and gear is available for ICE clutch start", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcTmStrt_B_EngRunTmLong": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT2", + "name": "yVcTmStrt_B_EngRunTmLong", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "description": "Engine run request for ICE longer than 10 s (approx)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_PrioChrgReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT4", + "name": "yVcVmcEm_B_PrioChrgReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Prio charge request from energy management", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcAwd_B_EngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct29", + "name": "yVcVmcAwd_B_EngageReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "description": "Erad engage request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmStrt_D_EngUseReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct33", + "name": "sVcTmStrt_D_EngUseReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "description": "Engine use request for catalyst heating 0=Dont Care, 1=Low load, 2=Hi load", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 2, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EngStopDlyReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct43", + "name": "yVcDseGb_B_EngStopDlyReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Engine stop delay request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_D_EradEngageModeReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct47", + "name": "sVcDeDmm_D_EradEngageModeReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Erad engage mode", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -128, + "max": 127, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_Tq_BrkTqAtWhlsReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcBc_B_BrPedSw", + "name": "sVcVdm_Tq_BrkTqAtWhlsReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Contains driver requested brake torque and driver support system requested brake torque. The signal is always positive and acts in opposite vehicle motion direction.", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 16380, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtc_B_EfadPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct16", + "name": "yVcVmcWtc_B_EfadPathDisabled", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "The front axle electric motor path is disabled (i.e. no torque is allowed on the path)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtd_B_EradPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct48", + "name": "yVcVmcWtd_B_EradPathDisabled", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "description": "Erad path disable", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcTc_B_IsgPathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct49", + "name": "yVcDtcTc_B_IsgPathDisabled", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Isg path closed (torque ramp finished)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAtr_X_ClPedAdapt": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct44", + "name": "sVcDtcAtr_X_ClPedAdapt", + "configs": "((ALWAYS_ACTIVE))", + "description": "Adapted clutch pedal position", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 100, + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscGar_B_EfadShiftInProgress": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcEm_B_EngRunReqEm1", + "name": "yVcGscGar_B_EfadShiftInProgress", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Efad shift in progress", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDsePcr_B_EfadNoTqRq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/tlop_VcXx_insignal2", + "name": "yVcDsePcr_B_EfadNoTqRq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Information to not request any torque from Efad", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGb_B_EfadWhlPathNotAvl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss1", + "name": "yVcDseGb_B_EfadWhlPathNotAvl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Efad wheel path not available", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVscEcc_B_TrnEngageReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct50", + "name": "yVcVscEcc_B_TrnEngageReq", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Trn Engage Request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_CluStrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss3", + "name": "yVcDtcSt_B_CluStrtAct", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Clutch start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDtcSt_B_StrtAct": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct51", + "name": "yVcDtcSt_B_StrtAct", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Isg start active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_EngStartAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_Tq_EngLoss4", + "name": "yVcDepSs_B_EngStartAllowed", + "configs": "((ALWAYS_ACTIVE))", + "description": "Start of combustion engine is allowed", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDepSs_B_12VStartEnable": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct52", + "name": "yVcDepSs_B_12VStartEnable", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "12V System ready for start attempt.", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcWtd_B_FrntAxlePathDisabled": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct46", + "name": "yVcVmcWtd_B_FrntAxlePathDisabled", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Front axle path is disabled", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_RespStartReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct53", + "name": "yVcVmcEm_B_RespStartReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "description": "Response engine start request to set start mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDeDmm_B_DrMdeFactory": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct54", + "name": "sVcDeDmm_B_DrMdeFactory", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "DriveMode selection is overridden by another mode because of Factory Mode", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscAsr_B_EfadNoTqReq": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct55", + "name": "yVcGscAsr_B_EfadNoTqReq", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Request to put Efad in ISG path but with no Efad torque requested", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcEmiGpf_B_FuelCutReqHybrid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct39", + "name": "yVcEmiGpf_B_FuelCutReqHybrid", + "configs": "((ALWAYS_ACTIVE))", + "description": "Fuel cut request for Hybrid", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcBsl_Tq_FrntReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVmcBsl_Tq_FrntReqWhl", + "name": "sVcVmcBsl_Tq_FrntReqWhl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Requested wheel torque from crank shaft path", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmStrt_D_EngRunReqTm": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcEc_B_TCMNodeAlive9", + "name": "sVcTmStrt_D_EngRunReqTm", + "configs": "((ALWAYS_ACTIVE))", + "description": "Request ICE to be running / Start ICE (Replace RunReqEMS)", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDtcAjc_Tq_DrCrShReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct56", + "name": "sVcDtcAjc_Tq_DrCrShReqWhl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Requested crankshaft torque at wheel", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcTmTeOil_Te_EngOil": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct57", + "name": "sVcTmTeOil_Te_EngOil", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Engine oil temperature", + "type": "Float32", + "unit": "deg C", + "offset": "-", + "lsb": "-", + "min": -60, + "max": 195, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Tq_IsgMaxAvail": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct58", + "name": "sVcDseEm_Tq_IsgMaxAvail", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Maximum available ISG torque", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -1000, + "max": 1000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_Pw_IsgMaxAllowPrio": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct59", + "name": "sVcDseEm_Pw_IsgMaxAllowPrio", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "description": "Maximum allow ISG Powerlimit.", + "type": "Float32", + "unit": "kW", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALgtStdFromWhlSpd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct60", + "name": "sVcVdm_a_ALgtStdFromWhlSpd", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Vehicle acceleration over ground", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseEm_B_EngRunReqSocMin": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct61", + "name": "yVcDseEm_B_EngRunReqSocMin", + "configs": "((ALWAYS_ACTIVE))", + "description": "Soc min ice start request", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcScIn_B_PropulsionAllowed": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct62", + "name": "yVcScIn_B_PropulsionAllowed", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (Vc_Pvc_Hw_B_AT))", + "description": "Indicates that propulsive torque is allowed. This includes all actuators. ", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcScDep_D_DrvgDirDes": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT5", + "name": "sVcScDep_D_DrvgDirDes", + "configs": "((ALWAYS_ACTIVE))", + "description": "EPB application request", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 7, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcTfa_B_CcActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules36", + "name": "yVcVmcTfa_B_CcActive", + "configs": "((ALWAYS_ACTIVE))", + "description": "Cruise control active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseEm_rt_IsgMaxTorqueLossStart": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT6", + "name": "sVcDseEm_rt_IsgMaxTorqueLossStart", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "EPB application request", + "type": "Float32", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": 0, + "max": 1, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_D_EpbSts": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcVdm_D_EpbSts", + "name": "sVcVdm_D_EpbSts", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Epb status", + "type": "UInt8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 255, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVmcAwd_X_RoadGrad": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcTc_D_GearLevAT7", + "name": "sVcVmcAwd_X_RoadGrad", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Actual road gradient", + "type": "Float32", + "unit": "%", + "offset": "-", + "lsb": "-", + "min": -100000, + "max": 100000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcVdm_a_ALat": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/TLInport_11", + "name": "sVcVdm_a_ALat", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Lateral acceleration", + "type": "Float32", + "unit": "m/s2", + "offset": "-", + "lsb": "-", + "min": -10, + "max": 10, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_Depletion": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules1", + "name": "yVcVmcEm_B_Depletion", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "charge mode == depletion", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "sVcDseWt_Tq_EfadMaxElDrvWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct64", + "name": "sVcDseWt_Tq_EfadMaxElDrvWhl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Maximum available EFAD wheel torque for pure electric drive", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "sVcMtcAjc_Tq_EfadReqWhl": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/sVcBec_D_BattCntct65", + "name": "sVcMtcAjc_Tq_EfadReqWhl", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Requested rear torque after ERAD drivability filters", + "type": "Float32", + "unit": "Nm", + "offset": "-", + "lsb": "-", + "min": -10000, + "max": 10000, + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcEm_B_Charge": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcSpRu_D_GearDesiredRules2", + "name": "yVcVmcEm_B_Charge", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Charge mode active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcVmcTfa_B_CcOrAccActive": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive", + "name": "yVcVmcTfa_B_CcOrAccActive", + "configs": "((Vc_Pvc_Hw_B_AT))", + "description": "Cruise or Acc is active", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcGscPrn_B_EfadRvs": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive1", + "name": "yVcGscPrn_B_EfadRvs", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "description": "Reverse with Efad on forward gear", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGbGear_B_ParkLockNotEngd": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcVmcTfa_B_CCorAccActive2", + "name": "yVcDseGbGear_B_ParkLockNotEngd", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Park lock is not engaged (If FALSE no guarantee for fully engaged park lock)", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcFsdPc_B_RunDryCrkInhb": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb", + "name": "yVcFsdPc_B_RunDryCrkInhb", + "configs": "((ALWAYS_ACTIVE))", + "description": "Run Dry Crank Inhibit", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + "yVcDseGbAvl_B_EfadIsgPathAvoid": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/yVcFsdPc_B_RunDryCrkInhb1", + "name": "yVcDseGbAvl_B_EfadIsgPathAvoid", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "description": "Request to block ISG path when 1st gear is not available or overheating", + "type": "Bool", + "unit": "-", + "offset": "-", + "lsb": "-", + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": { + "rVcVmcPmm_D_EngRunReqLogg": { + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "name": "rVcVmcPmm_D_EngRunReqLogg", + "configs": "((ALWAYS_ACTIVE))", + "description": " [0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "type": "UInt32", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "4294970000", + "class": "CVC_DISP" + } + }, + "nvm": {}, + "pre_procs": [ + "VcVmcPmm__HEP7_1140_Brake_1", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9", + "VcVmcPmm__HEP7_1243_Isg_8", + "VcVmcPmm__HEP7_1270_12VStartEnable_10", + "Vc_Pvc_Hw_B_12VStartMotor", + "Vc_Pvc_Hw_B_12VStartMotor == 0", + "Vc_Pvc_Hw_B_AT", + "Vc_Pvc_Hw_B_Efad", + "Vc_Pvc_Hw_B_Erad", + "Vc_Pvc_Hw_B_HVSystem == 0", + "Vc_Pvc_Hw_B_TqConverterGbx", + "Vc_Pvc_Sw_B_StopStart" + ], + "local_vars": { + "xVcVmcPmm_B_AmbTempH": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is above limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Relay/LogicalOperator3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunning": { + "type": "Bool", + "unit": "-", + "description": "Engine is running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogOp1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_rt_FCLvl": { + "type": "Float32", + "unit": "-", + "description": "Final fuel cut level before realisation.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StartedDly": { + "type": "Bool", + "unit": "-", + "description": "Engine running detected (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStopped": { + "type": "Bool", + "unit": "-", + "description": "Engine is stopped", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay3/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunningRpmDly": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm (including time delay)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/OnDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Started": { + "type": "Bool", + "unit": "-", + "description": "engine running detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunningRpm": { + "type": "Bool", + "unit": "-", + "description": "Engine is started by rpm", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/RelationalOperator2", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHGSkipParkPre": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop will be ignored if gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator1", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Normal HillGradient limits for inhibiting stop is ignored allowing stop trigger in gearlever P", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/LogicalOperator2", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqBrake": { + "type": "UInt8", + "unit": "-", + "description": "Engine running request brakes", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/MinMax1", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))) || (ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "-", + "description": "brake vacuum start from vacuum level due to vehicle speed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator2", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_BrkVacuumStart": { + "type": "Bool", + "unit": "-", + "description": "Brake vacuum request to start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/RelationalOperator3", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "brake vacum limit in vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_a_VehAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted acceleration calculated from speed.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/DLPF1_pole2/LogicalSwitch/Switch", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_Tq_BrkTrqFilt": { + "type": "Float32", + "unit": "Nm", + "description": "Filted brake trq signal", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole1/Sum2", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_a_MergedAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted merged accelerations signal from EPB and Vehicle speed acc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole3/Sum2", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_a_BcmLongAccFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Filted accelerations signal from EPB LongAcc", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LPF1_pole4/Sum2", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_GradOutOfLim": { + "type": "Bool", + "unit": "-", + "description": "Out of limits to allow stop start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator2", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_QfFault": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator4", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHGStart": { + "type": "Bool", + "unit": "-", + "description": "Hill Gradient start of engine due to high/low gradient", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator5", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_QfFaultLongAcc": { + "type": "Bool", + "unit": "-", + "description": "Qf flag is not valid for long acc signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalOperator6", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_tc_HillGadient": { + "type": "Float32", + "unit": "s", + "description": "tc for Hillgradient final filter", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch2/Switch", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_a_SignedHGVehFilt": { + "type": "Float32", + "unit": "m/s2", + "description": "Signed vehicle speed acceleration signal. If vehicle is moving backwards.", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch4/Switch", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Hill gradient start of engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/LogicalSwitch6/Switch", + "configs": "(((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)) || ((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)))) || (((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_StandStill": { + "type": "Bool", + "unit": "-", + "description": "Hillgradient calculation for stand still lower then cal value", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator1", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_HGSpdOK": { + "type": "Bool", + "unit": "-", + "description": "Speed Ok to calculate stop inhibit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/RelationalOperator5", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_StopInhibitUpHill": { + "type": "Bool", + "unit": "-", + "description": "Stop inhibit uphill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF1/LogOp3", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "xVcVmcPmm_B_StopInhibitDownHill": { + "type": "Bool", + "unit": "-", + "description": "Stop Inhibit Down Hill", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/SR_FF8/LogOp3", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_a_MergedAccSaturated": { + "type": "Float32", + "unit": "m/s2", + "description": "Saturated merged acceleration signal", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Saturation/MinMax1", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_a_MergedAcc": { + "type": "Float32", + "unit": "m/s2", + "description": "Merged Acc signal (sVcEpb_a_LongAcc-a_HGVehFilt)", + "max": 20, + "min": -20, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Sum6", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "A/T load compensation for drive and reverse.", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqFCAdapt": { + "type": "UInt8", + "unit": "-", + "description": "FC adapt run req", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FCAdaptAct": { + "type": "Bool", + "unit": "-", + "description": "Fuel cut adapt active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/SR_FF4/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_DrLeaveKeepRun": { + "type": "Bool", + "unit": "-", + "description": "Keep engine running based on driver leave vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogOp9", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqDrLeave": { + "type": "UInt8", + "unit": "-", + "description": "Engine run req based on driver leave vehicle", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/LogicalSwitch3/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_DrLeavePowerDownReq": { + "type": "Bool", + "unit": "-", + "description": "Power down request from driver leave", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/OnDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqPcr": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Pcr", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/12110_LOS/LogicalSwitch17/Switch", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDriver": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1211_Driver/LogicalSwitch17/Switch", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqPsm": { + "type": "Bool", + "unit": "-", + "description": "Engine Run Request from Psm", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1212_Psm/LogicalSwitch17/Switch", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqEm": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Energy Management", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1213_Em/LogicalSwitch17/Switch", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TransBlock": { + "type": "Bool", + "unit": "", + "description": "transmission is being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TransEngOnBlock": { + "type": "Bool", + "unit": "", + "description": "Trans blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TransBlocking": { + "type": "Bool", + "unit": "", + "description": "Transmission is blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/OffDelay2/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EMSBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EMSBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/OffDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EmLvBlocked": { + "type": "Bool", + "unit": "", + "description": "Em Lv is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/OffDelay6/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_ClimBlocked": { + "type": "Bool", + "unit": "", + "description": "climate is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/OffDelay5/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Engine running request FC Adapt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121A_FcAdapt/LogicalSwitch17/Switch", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TmBlock": { + "type": "Bool", + "unit": "-", + "description": "EMS being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TmBlocked": { + "type": "Bool", + "unit": "", + "description": "EMS is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/OffDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIsg": { + "type": "Bool", + "unit": "", + "description": "Engine running request ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121D_ISG/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqRemote": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121E_Remote/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Engine running request stability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121F_StabCtrl/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Engine running request driver leave", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121G_DrLeave/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqChas": { + "type": "Bool", + "unit": "-", + "description": "Engine running request Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/LogicalSwitch27/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_ChasBlocked": { + "type": "Bool", + "unit": "-", + "description": "Chassis is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/OffDelay5/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqDep": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121J_Dep/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_CECBlock": { + "type": "Bool", + "unit": "-", + "description": "CEC being blocked", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalOperator6", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqCEC": { + "type": "Bool", + "unit": "-", + "description": "Engine running request from CEC", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/LogicalSwitch25/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_CECBlocked": { + "type": "Bool", + "unit": "", + "description": "CEC is blocked from demanding a restart", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/OffDelay4/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastStart": { + "type": "Bool", + "unit": "-", + "description": "Fast start mode request ISG start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/LogicalOperator14", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "xVcVmcPmm_B_SafeISGPrio": { + "type": "Bool", + "unit": "-", + "description": "Priotritzed safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF1/LogOp3", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "xVcVmcPmm_B_SafeISG": { + "type": "Bool", + "unit": "-", + "description": "Safe ISG start mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/SR_FF2/LogOp3", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "xVcVmcPmm_B_EmiStrt": { + "type": "Bool", + "unit": "-", + "description": "Emission start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/SR_FF1/LogOp3", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "xVcVmcPmm_B_StrtMdeRunning": { + "type": "Bool", + "unit": "-", + "description": "Restart within drivecycle active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF1/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StrtMdeAcc": { + "type": "Bool", + "unit": "-", + "description": "StartMode on AccPedal detected", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/SR_FF2/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_HeatUpEOP": { + "type": "Bool", + "unit": "-", + "description": "Heat of of EOP in progress", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/SR_FF4/LogOp3", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "rVcVmcPmm_Xd_AccPedalPos": { + "type": "Float32", + "unit": "%/s", + "description": "Derivative of accelerator pedal position", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/DLPF1_pole_v2/LogicalSwitch/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtTrqDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on torque demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtPwrDemand": { + "type": "Bool", + "unit": "-", + "description": "Engagment mode request based on power demands", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FastEngmtIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode during ISG-starts in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/LogicalOperator10", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngmtModFast": { + "type": "Bool", + "unit": "-", + "description": "Fast engagement mode", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/SR_FF8/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "Time the engine has been shut off.", + "max": 100000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/CounterResetEnable/MinMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StopAllowedPath": { + "type": "Bool", + "unit": "-", + "description": "An engine stop is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStop": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator27", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStart": { + "type": "Bool", + "unit": "", + "description": "engine start request, with start allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator35", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqTotPre": { + "type": "Bool", + "unit": "-", + "description": "EngRunReqTotPre", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator4", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IceStartRun": { + "type": "Bool", + "unit": "-", + "description": "ICE status is starting or running", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator42", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngStopFast": { + "type": "Bool", + "unit": "-", + "description": "Engine must be stopped, either stall, key off or monitoring function", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalOperator8", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_StartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqEngClnt": { + "type": "Bool", + "unit": "-", + "description": "Engine run request due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch15/Switch", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnOff": { + "type": "Bool", + "unit": "-", + "description": "EngOnOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StopAllowedDep": { + "type": "Bool", + "unit": "-", + "description": "A stop/start stop is allowed by dep", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch19/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqMaxTime": { + "type": "Bool", + "unit": "-", + "description": "EngRunReq for Max shut off time for engine.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch2/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_RunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "Ice stall run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch70/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "The engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/LogicalSwitch74/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqPre": { + "type": "Bool", + "unit": "", + "description": "EngRunning Request for micro hybrid vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/OffDelay1/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_FanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Fan afterrun is active for eng on req", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Relay/LogicalOperator3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqEng": { + "type": "Bool", + "unit": "-", + "description": "Eng on request from engine control, later on synced with transmission", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SR_FF7/LogOp3", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtDly": { + "type": "Bool", + "unit": "-", + "description": "Time delay on EngRunReqTot when Waiting for a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay1/Rel", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4EngStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for the engine to stop before requesting a new B_EngRunReqTot-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/SignalDelay3/Rel", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqLogg": { + "type": "UInt32", + "unit": "-", + "description": "[0=EngOnOff][1=Driver][Bit2=Psm][Bit3=Em][Bit4=TmStrt][Bit5=PrkBrk][6=Transmission[7=Clim][8=Pcr][9=FC Adapt][A=Brake][B=Fuel][C=Isg][D=Stab Ctrl][E=Driver Leave],[F=Ice Stall],[10=Steer][11=Chassie][12=Obd][13=Rc][14=Sapp][15=EMS][16=EmLv][17=Remote][18=Fan Afterrun][19=CEC][20=EngClnt][21=EngRunReq MaxTime]", + "max": 4294970000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Sum", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_PwdPossible": { + "type": "Bool", + "unit": "", + "description": "Powerdown is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator17", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "xVcVmcPmm_B_PwdTrig": { + "type": "Bool", + "unit": "", + "description": "a powerdown is triggerd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator4", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "xVcVmcPmm_B_PwdReset": { + "type": "Bool", + "unit": "", + "description": "a powerdown is reset", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/LogicalOperator7", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "xVcVmcPmm_B_SsActSeatBeltInhib": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 0 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalOperator3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_SsActSeatBeltAllow": { + "type": "Bool", + "unit": "-", + "description": "Set SsActive = 1 based on DriverBuckle and GearLever", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/LogicalSwitch16/Switch", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_SRSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Seatbelt-DriverDoor logic inhibit SsActive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/SR_FF7/LogOp3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "Driver has left the car", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/LogicalOperator20", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_AmbPresLow": { + "type": "Bool", + "unit": "-", + "description": "Ambient pressure is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator16", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "xVcVmcPmm_B_AmbTempL": { + "type": "Bool", + "unit": "-", + "description": "Ambient temp is below limit", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/LogicalOperator8", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "rVcVmcPmm_t_TrnC3OilPres": { + "type": "Float32", + "unit": "s", + "description": "C3 oil pressure buildup time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/CounterReset1/MinMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "C3 oil pressure build up phase", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/LogicalOperator41", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || ((Vc_Pvc_Hw_B_AT || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqHybrid": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request (for hybrids)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/LogicalOperator32", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT) || ((Vc_Pvc_Hw_B_AT || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqIC": { + "type": "Bool", + "unit": "-", + "description": "The transmission is requested to be engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/LogicalSwitch10/Switch", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_CrShPathDisabled": { + "type": "Bool", + "unit": "-", + "description": "The crankshaft path is closed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/LogicalSwitch9/Switch", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngStopReqAT": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalOperator27", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "rVcVmcPmm_D_TransModeReq": { + "type": "UInt8", + "unit": "-", + "description": "To enable CVC-ECM to request transmission idle states and torque transfer", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReqPre": { + "type": "Bool", + "unit": "-", + "description": "Pre transmission engage request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/LogicalSwitch8/Switch", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_TrnEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF/LogOp3", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTransPre": { + "type": "Bool", + "unit": "-", + "description": "Pre signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF1/LogOp3", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTrans": { + "type": "Bool", + "unit": "-", + "description": "Engine is requested to be started for an AT vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/SR_FF2/LogOp3", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvMT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery MT", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp16", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StrtAbrtPre": { + "type": "Bool", + "unit": "-", + "description": "Star abort for Stop in Gear vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp26", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvClNtrl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp29", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "ISG start abort", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp39", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvCl": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery for a stop in neutral system", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogOp5", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvAbortInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch1/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "-", + "description": "Starting stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch12/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "rVcVmcPmm_D_StallAbortNum": { + "type": "UInt8", + "unit": "-", + "description": "Number of start attempts", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch13/Switch", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRunning": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch14/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if no seat belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch15/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch16/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery within x seconds after first start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch17/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRecovery": { + "type": "Bool", + "unit": "", + "description": "stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch18/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch19/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallStrtM": { + "type": "Bool", + "unit": "-", + "description": "Start motor stall, time out", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch2/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if neutral is not valid. MT only", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch20/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery AT transmissions", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch22/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if stop/start strategy is off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch23/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch30/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "-", + "description": "No stall recover if is not an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch32/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if the engine coolant temp is low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch34/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "AbrtStallRcShutOff", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch40/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Stall detection is inhibited by ChangeOfMindInhibit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch41/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "ICE stall detected during an emission start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch43/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch48/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_CrnkStallRecov": { + "type": "Bool", + "unit": "", + "description": "Stall detection using startmotor flag", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "B_AbrtStallSsRcfSet", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch6/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_ForcedStallStart": { + "type": "Bool", + "unit": "", + "description": "Forced start for stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/LogicalSwitch8/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Running stall detected, set Unintended EMS flag", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/OnDelay7/RelationalOperator1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_StallAbortNum": { + "type": "Bool", + "unit": "", + "description": "Abort stall", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/RelationalOperator4", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIceStall": { + "type": "Bool", + "unit": "-", + "description": "ICE stall run request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/SR_FF3/LogOp3", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_EradSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Erad speed control request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator12", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "xVcVmcPmm_B_EradAllow": { + "type": "Bool", + "unit": "-", + "description": "Erad path is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator14", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "xVcVmcPmm_B_EradEngageReq": { + "type": "Bool", + "unit": "-", + "description": "Erad engage request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/LogicalOperator6", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "xVcVmcPmm_B_EpbActive": { + "type": "Bool", + "unit": "-", + "description": "Parking brake active", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/B_TqRsvActAT_1", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_Z_RoadGradient": { + "type": "Float32", + "unit": "-", + "description": "Road gradient", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/LogicalSwitch5/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_BrkRoadIncline": { + "type": "Bool", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/RelationalOperator4", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDEfadIsgAct": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D if Efad is in ISG-path already", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator11", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_NonSysStrt": { + "type": "Bool", + "unit": "-", + "description": "A non-system initated start is requested", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDRBraking": { + "type": "Bool", + "unit": "-", + "description": "Enable ISG-start in D/R since driver is braking vehicle", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator59", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDR": { + "type": "Bool", + "unit": "-", + "description": "An ISG-start is requested while the gear lever is placed in either drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator8", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtGearLvrDRAbort": { + "type": "Bool", + "unit": "-", + "description": "Abort ISG-start in D/R if driver releases brake pedal, allow for 12V-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/LogicalOperator9", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtLimLoosen": { + "type": "Bool", + "unit": "-", + "description": "Loosen the ISG start limits", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SR_FF8/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtWhlTrqOK": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to request an ISG-start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/SignalDelay1/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_a_Veh": { + "type": "Float32", + "unit": "m/s2", + "description": "Derivied vehicle speed", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/FirstOrderFilter1/Sum2", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An 12V start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator14", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Wait for the vehicle speed to increase to be able to requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator44", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_Dly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Delay an 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator7", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An 12V-start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/LogicalOperator8", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtLowVehSpd": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough to activate the Wait4CluStrt-logic", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/RelationalOperator17", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtWhlAccHigh": { + "type": "Bool", + "unit": "-", + "description": "The vehicle acceleration is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF1/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtWhlTqLow": { + "type": "Bool", + "unit": "-", + "description": "The requested wheel torque is low enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF10/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtAccPedAct": { + "type": "Bool", + "unit": "-", + "description": "The acc pedal is high enough to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SR_FF2/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Wait4CluStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for waiting for a clutch start is exceeded", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/SignalDelay5/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_DrvCycActvFirstStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore the unavailable-logic for the first start due to low transmission oil temp (might result in a slow response from the TCM which leads to a delayed start)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator44", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator55", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/LogicalOperator8", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EngOnReqTiOut": { + "type": "Bool", + "unit": "-", + "description": "Timeout", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay1/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_DrvCycActvFirstStrtTiOut": { + "type": "Bool", + "unit": "-", + "description": "The maximum time allowed for first start logic connected to the DriveCycleActive signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay5/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "There's not enough available torque to perform an ISG-start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/SignalDelay7/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is allowed", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator46", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtTqRsvBlk": { + "type": "Bool", + "unit": "-", + "description": "Abort CluStrt if current EFAD TqReq is too high and 12Vstrt is available", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/LogicalOperator7", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "A clutch start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator10", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "Clutch start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator20", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "ISG start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator35", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_StrtActrsRdy": { + "type": "Bool", + "unit": "-", + "description": "One or several start actuators are ready for another start attempt", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator47", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtPsbl": { + "type": "Bool", + "unit": "-", + "description": "An ISG start is possible", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator6", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtActrRdy": { + "type": "Bool", + "unit": "-", + "description": "12V start actuator is ready", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalOperator9", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further ISG start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch11/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further clutch start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch12/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtBlk": { + "type": "Bool", + "unit": "-", + "description": "Block further 12V start attempts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch15/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_12VStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "12V start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch16/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_CluStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "Clutch start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch6/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_IsgStrtCnt": { + "type": "UInt8", + "unit": "-", + "description": "ISG start counter", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/LogicalSwitch7/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_CluStrtVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is high enough to perform a clutch start", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SR_FF9/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_ElecMotLowAvailTrq": { + "type": "Bool", + "unit": "-", + "description": "Currently low available torque levels on the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/SignalDelay2/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_VehSpdOKIsgDrv": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/LogicalSwitch1/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Run request to reduce propulsion delay during ISG-stop in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator24", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Eng run req during ISG-stop coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator25", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Trigger run req after ISG-stop to reduce propulsive torque delay", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/LogicalOperator36", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EngRunReqIsgStop": { + "type": "Bool", + "unit": "-", + "description": "Engine running request to avoid loss of drive during abort of ISG-stop", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/SR_FFR/LogOp2", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReqDrv": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when the gear lever is placed in drive)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator11", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReqBrk": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for HV battery charging (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator13", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG-stop of ICE during standstill in D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator18", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopStandstillPre": { + "type": "Bool", + "unit": "-", + "description": "Engine stop using ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator2", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during coast", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator22", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopRoadGradOK": { + "type": "Bool", + "unit": "-", + "description": "Road gradient is OK for ISG-stop in standstill D/R", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator35", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to reconfig to ISG-mode for the electric motor", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator49", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgChrgReq": { + "type": "Bool", + "unit": "-", + "description": "Request to use the electic motor for charging of the HV-battery", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator5", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Usg ISG-stop during power down", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalOperator9", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_TrnModOKIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode OK for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/LogicalSwitch1/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_VehSpdOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request (when braking)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay2/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_BrkOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay3/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_AccPedOKIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "The acc ped request is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay4/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillVehSpdOK": { + "type": "Bool", + "unit": "-", + "description": "The vehicle speed is low enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay5/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillBrkTqOK": { + "type": "Bool", + "unit": "-", + "description": "The brake torque request is high enough for an ISG-reconfig request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay6/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStandStillBslTqOK": { + "type": "Bool", + "unit": "-", + "description": "VcVmcBsl torque request is low enough for an ISG request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/SignalDelay7/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EfadUnavl": { + "type": "Bool", + "unit": "-", + "description": "The efad is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator2", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Ice path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2WhlUnavl": { + "type": "Bool", + "unit": "-", + "description": "The Efad2Whl path is unavailable", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator4", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2WhlPahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to wheel path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator44", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IcePahReq": { + "type": "Bool", + "unit": "-", + "description": "Request to open the EFAD to ICE path", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator54", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceReqRst": { + "type": "Bool", + "unit": "-", + "description": "Request to reset the Efad2Ice-request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator57", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EfadDisengdReq": { + "type": "Bool", + "unit": "-", + "description": "Request to disengage the EFAD", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator59", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtReq": { + "type": "Bool", + "unit": "-", + "description": "12V start request", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalOperator65", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "rVcVmcPmm_D_EfadModReq": { + "type": "UInt8", + "unit": "-", + "description": "Efad mode request", + "max": 5, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/LogicalSwitch13/Switch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_EvenGearShiftAct": { + "type": "Bool", + "unit": "-", + "description": "A gear shift is currently active on the electric motor shaft", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF1/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_GarageShiftEfadPahDiOK": { + "type": "Bool", + "unit": "-", + "description": "The torque condition when perfoming a garage shift is okay (there should be no torque acting on the electric motor before engaging drive/reverse)", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF3/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_Efad2IceReq": { + "type": "Bool", + "unit": "-", + "description": "Request to connect the EFAD to the ICE", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SR_FF7/LogOp3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_DrvCycTiOut": { + "type": "Bool", + "unit": "-", + "description": "Time out indication for the drivecycle active signal", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay1/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_GearLvrNotDRDetn": { + "type": "Bool", + "unit": "-", + "description": "The gear lever is not in drive or reverse", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/SignalDelay4/Rel", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "xVcVmcPmm_B_IsgStrtOk": { + "type": "Bool", + "unit": "-", + "description": "ISG start ok", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/LogicalOperator4", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "xVcVmcPmm_B_12VStrtOk": { + "type": "Bool", + "unit": "-", + "description": "12Vstrt OK", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/RelationalOperator5", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "rVcVmcPmm_Tq_EradMaxLimNoLim": { + "type": "Float32", + "unit": "Nm", + "description": "ERAD max torque no limits (HW boundary)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "xVcVmcPmm_B_IsgEnable": { + "type": "Bool", + "unit": "-", + "description": "Isg is enabled", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/LogicalOperator17", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "xVcVmcPmm_B_IsgActrTqRampDwn": { + "type": "Bool", + "unit": "-", + "description": "There is no torque acting on the actuator", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/RelationalOperator13", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "xVcVmcPmm_B_PTDisengagedAT": { + "type": "Bool", + "unit": "-", + "description": "tbd", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/LogicalOperator7", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_TrailerPresent": { + "type": "Bool", + "unit": "-", + "description": "Trailer is present", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalOperator22", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "rVcVmcPmm_D_EngRunReqChas": { + "type": "UInt8", + "unit": "-", + "description": "Engine Run Req from Chassie", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/LogicalSwitch5/Switch", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "xVcVmcPmm_B_DrDoorOpen": { + "type": "Bool", + "unit": "-", + "description": "Driver door is open", + "max": "-", + "min": "-", + "lsb": "-", + "offset": "-", + "class": "CVC_DISP", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/RelationalOperator5", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_HVSystem == 0) || (Vc_Pvc_Sw_B_StopStart))", + "width": 1 + } + }, + "calib_consts": { + "cVcVmcPmm_B_PwdAbortHard": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort start is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbortHard", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdAbrtStall": { + "type": "Bool", + "unit": "", + "description": "Active powerdown if abort stall is set and an stall has occured", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdAbrtStall", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdDrReadyAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Powerdown due to AbortHard possible also at DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdDrReadyAbortHard", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdIgnoreQfDrDoor": { + "type": "Bool", + "unit": "-", + "description": "Ignore QF for driver door information", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdIgnoreQfDrDoor", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on two-mass flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOff", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRcShutOffDCA": { + "type": "Bool", + "unit": "-", + "description": "Reset Powerdown timer for two-mass flywheel protection in low DriveCycleActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcShutOffDCA", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRcfDep": { + "type": "Bool", + "unit": "", + "description": "Activate powerdown if reconfig from dependability is set", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRcfDep", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdRpmOnly": { + "type": "Bool", + "unit": "-", + "description": "Powerdown may be carried out on engine speed instaed of Ice Status signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdRpmOnly", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBelt": { + "type": "Bool", + "unit": "", + "description": "Activate pwd if seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBelt", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltDoor": { + "type": "Bool", + "unit": "-", + "description": "Include driver door status as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltDoor", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltN": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in N", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltN", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSeatBeltP": { + "type": "Bool", + "unit": "-", + "description": "Allow pwd when seatbelt is unbuckled for gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSeatBeltP", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdSpeedLimit": { + "type": "Bool", + "unit": "", + "description": "Activate speed limit threashold for powerdown", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdSpeedLimit", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMModeFail", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTCMNodeAlive", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdTransFailure", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_PwdUseSeatBeltAT": { + "type": "Bool", + "unit": "-", + "description": "Use gear lever position as condition for pwd when seatbelt is unbuckled", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_PwdUseSeatBeltAT", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_UsePowerDownReq": { + "type": "Bool", + "unit": "", + "description": "allow a powerdown to occur", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/B_UsePowerDownReq", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_n_PwdRpmOnly": { + "type": "Float32", + "unit": "rpm", + "description": "Below this rpm threashold an powerdown will be carried out if seat belt is unbuckled or engine fault has occured", + "max": 100000000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/n_PwdRpmOnly", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_BlockPsmPwd": { + "type": "Float32", + "unit": "s", + "description": "Time to ignore PowerDownHMI signal from VcPpmPsm after an open DriverDoor triggered a powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_BlockPsmPwd", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdRcShutOff": { + "type": "Float32", + "unit": "s", + "description": "Time with two-mass flywheel protection active to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRcShutOff", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdRpm": { + "type": "Float32", + "unit": "s", + "description": "time with no rpm to allow a pwd", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdRpm", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdSeatBeltAT": { + "type": "Float32", + "unit": "s", + "description": "Powerdown after this timeout if belt is off for Auto transmission", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdSeatBeltAT", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_t_PwdTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/t_PwdTcmModeFail", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_v_PwdSpeedLimit": { + "type": "Float32", + "unit": "km/h", + "description": "threashold to allow powerdown", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11111_PowerDown/v_PwdSpeedLimit", + "configs": "((Vc_Pvc_Hw_B_HVSystem == 0))", + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBeltNoSeq": { + "type": "Bool", + "unit": "-", + "description": "Require no sequence in condition to allow SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/B_SsActSeatBeltNoSeq", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActSeatBelt": { + "type": "Float32", + "unit": "s", + "description": "Reset SsActive after a delay if Driver belt off in Park", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111121_SsAct_SeatBelt_AT/t_SsActSeatBelt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltD": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in D and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltD", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltN": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in N and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltN", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltP": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltP", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorBeltR": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in R and belt is on", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorBeltR", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDoorNoBelt": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when belt is off and door is opened (AT only)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/111122_SsAct_DriverLeaving_AT/B_SsActDoorNoBelt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActAbs": { + "type": "Bool", + "unit": "", + "description": "Use ABS in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAbs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActAmbPres": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by low ambient pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActAmbPres", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActBrk": { + "type": "Bool", + "unit": "-", + "description": "Use brake request, used to ensure no stop after ABS pump activation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActBrk", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDrMdInv": { + "type": "Bool", + "unit": "-", + "description": "0=inhibit SsActive if matching any of the selected drive modes, 1=allow SsActive if matching any of the selected drive modes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDrMdInv", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActDriverLeaving": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by opened driver door when gearlever in P, belt is off and door is opened", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActDriverLeaving", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActEcoMde": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by eco mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActEcoMde", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActGpSs": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by global parameter", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActGpSs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActHood": { + "type": "Bool", + "unit": "-", + "description": "Use HoodStatus in SsActive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActHood", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActNtrl": { + "type": "Bool", + "unit": "", + "description": "Neutral must be valid for stop/start to be active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActNtrl", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActRcfSet": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from dependability control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSet", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActRcfSetAlt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start from Engine control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActRcfSetAlt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBelt": { + "type": "Bool", + "unit": "", + "description": "use reconfig of stop/start by seatbelt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBelt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActSeatBeltPrkBlock": { + "type": "Bool", + "unit": "-", + "description": "Block reconfig of stop/start by seatbelt if AT gear lever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActSeatBeltPrkBlock", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTCMModeFail": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by tcm mode not following request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMModeFail", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTCMNodeAlive": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by Tcm node alive", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTCMNodeAlive", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTemp": { + "type": "Bool", + "unit": "", + "description": "Require ok Qf on temp to deselect stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTemp", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTempStrt": { + "type": "Bool", + "unit": "-", + "description": "If 1 then temperature condtion can restart the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTempStrt", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTipSport": { + "type": "Bool", + "unit": "-", + "description": "When in Tip/Sport, deactivate SS (as an alternative to set EngRunReqDriver in VcDeDmm)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTipSport", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTrailer": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trailer detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTrailer", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_SsActTransFailure": { + "type": "Bool", + "unit": "-", + "description": "use reconfig of stop/start by trans failure signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_SsActTransFailure", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_UseSsActTemp": { + "type": "Bool", + "unit": "", + "description": "If 1 then temperature condtion can inhibit StopStart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActTemp", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_UseSsActive": { + "type": "Bool", + "unit": "", + "description": "Set stop/start as active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/B_UseSsActive", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd1": { + "type": "UInt8", + "unit": "-", + "description": "First drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd1", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd2": { + "type": "UInt8", + "unit": "-", + "description": "Second drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd2", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_D_SsActDrMd3": { + "type": "UInt8", + "unit": "-", + "description": "Third drive mode to detect, affecting SsActive", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/D_SsActDrMd3", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbHighH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbHighL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbHighL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbLowH": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, high hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Te_AmbLowL": { + "type": "Float32", + "unit": "deg C", + "description": "Ambient temp to allow off stop/start, low hysteresis limit", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Te_AmbLowL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Z_SsActTrailerUpHillH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, upper hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_Z_SsActTrailerUpHillL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill limit for inhibit stop with trailer, lower hysterersis", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/Z_SsActTrailerUpHillL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_p_AmbH": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, high hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbH", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_p_AmbL": { + "type": "Float32", + "unit": "kPa", + "description": "Ambient pressure to allow off stop/start, low hysteresis limit", + "max": 200, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/p_AmbL", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActAbs", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActBrk": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding brake request, used to ensure no stop after ABS pump activation", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActBrk", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_t_SsActTcmModeFail": { + "type": "Float32", + "unit": "s", + "description": "No response from Transmission", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1110_ReconfigStrategy_uHev/1111_Reconfig_uHev/11112_StopStartActive/t_SsActTcmModeFail", + "configs": "((Vc_Pvc_Sw_B_StopStart))", + "width": 1 + }, + "cVcVmcPmm_B_EngStoppedUseHiRes": { + "type": "Bool", + "unit": "-", + "description": "rpm to consider engine stopped", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_EngStoppedUseHiRes", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseComInhbtIceStatus": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to exit state IceStatus=Running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseComInhbtIceStatus", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIscActvnEMS": { + "type": "Bool", + "unit": "-", + "description": "use startmotor to detect eng running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseIscActvnEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTqSPM": { + "type": "Bool", + "unit": "-", + "description": "Torque SPM interface. Set = 1 to choose GEP3 signals", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/B_UseTqSPM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_StrtModLongIceStsDetn": { + "type": "UInt8", + "unit": "-", + "description": "Determine which start mode gets the long time detection for IceStatus=running", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/D_StrtModLongIceStsDetn", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngRunning": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine running", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngRunning", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngStarted": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine started", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStarted", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngStopped": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stopped", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/n_EngStopped", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_rt_FCLvlRunning": { + "type": "Float32", + "unit": "-", + "description": "Min Fuel cut level for detecting engine on", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/rt_FCLvlRunning", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_ComInhbtIceStatus": { + "type": "Float32", + "unit": "s", + "description": "Max time to listen to ChangeOfMindInhibit signal, used as stop request in IceStatus", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_ComInhbtIceStatus", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopTime": { + "type": "Float32", + "unit": "s", + "description": "minimum stop timer", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_MinStopTime", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Running": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng running", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Running", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Started": { + "type": "Float32", + "unit": "s", + "description": "time to determine eng started", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1130_IceStatus/t_Started", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_BrkAbs": { + "type": "Bool", + "unit": "s", + "description": "Keep engine running if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkAbs", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkEngRunReq": { + "type": "Bool", + "unit": "s", + "description": "use the enigne running request from brake control", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReq", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkEngRunReqAlive": { + "type": "Bool", + "unit": "-", + "description": "If engine running request from brake control is missing, request start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkEngRunReqAlive", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkHGSkipPark": { + "type": "Bool", + "unit": "-", + "description": "Use separate HillGradient conditions to allow engine stop if gearlever in P", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHGSkipPark", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkHillGrad": { + "type": "Bool", + "unit": "s", + "description": "Use brake for ensureing engine is running when in high slopes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkHillGrad", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkUseNegVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use negative brake vacuum signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkUseNegVacuum", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkVacuum": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuum", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkVacuumVeh": { + "type": "Bool", + "unit": "s", + "description": "Use brake vacuum adapted for vehicle speed for stop/start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/B_BrkVacuumVeh", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_D_BrkHillVal": { + "type": "UInt8", + "unit": "-", + "description": "Used to set if hill gradient function should be able to restart the engine(2) or only inhibit stop(1)", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/D_BrkHillVal", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkDownH": { + "type": "Float32", + "unit": "deg", + "description": "Downhill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownH", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkDownL": { + "type": "Float32", + "unit": "deg", + "description": "Downhill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkDownL", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkUpH": { + "type": "Float32", + "unit": "deg", + "description": "Uphill high hysteresis disallowing stop trigger on gearlever to P", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpH", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_BrkHGSkipParkUpL": { + "type": "Float32", + "unit": "deg", + "description": "Uphill low hysteresis allowing stop trigger on gearlever to P even if B_BrkHillGradStart inhibits", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/Z_BrkHGSkipParkUpL", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_p_BrVacuum": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuum", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_t_BrkAbs": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no stop after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkAbs", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_t_BrkEngRunReqAlive": { + "type": "Float32", + "unit": "s", + "description": "Delay for starting engine if EngRunReq signal from brake system is missing", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkEngRunReqAlive", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_t_BrkHillGrad": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding gradient, used to ensure no stop after gradient estimation active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/t_BrkHillGrad", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_BrkHillGradStart": { + "type": "Bool", + "unit": "-", + "description": "Value sent out if not Epb Qf Long Acc is correct", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_BrkHillGradStart", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_UseDefHGDynoMd": { + "type": "Bool", + "unit": "-", + "description": "Use default hill gradient value if DynoMode is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseDefHGDynoMd", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_UseWhlSpdDirection": { + "type": "Bool", + "unit": "-", + "description": "Use wheel speed direction", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/B_UseWhlSpdDirection", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_D_QfEpbLongAccInit": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccInit", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_D_QfEpbLongAccOK": { + "type": "UInt8", + "unit": "-", + "description": "Epb Qf LongAcc acceptance", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/D_QfEpbLongAccOK", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_ResetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for reset stop inhibit", + "max": 10000000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimDownHill", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_ResetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for reset stop inhibit", + "max": 10000000000, + "min": -10000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_ResetLimUpHill", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_SetLimDownHill": { + "type": "Float32", + "unit": "deg", + "description": "What down hill dergee limit for enable stop inhibit", + "max": 1000000000000, + "min": -100000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimDownHill", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_Z_SetLimUpHill": { + "type": "Float32", + "unit": "deg", + "description": "What up hill dergee limit for enable stop inhibit", + "max": 900000000000, + "min": -9000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_SetLimUpHill", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_a_HillGradientFault": { + "type": "Float32", + "unit": "m/s2", + "description": "Hillgradient acc used when fault detected", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientFault", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_a_HillGradientMax": { + "type": "Float32", + "unit": "m/s2", + "description": "Max acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMax", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_a_HillGradientMin": { + "type": "Float32", + "unit": "m/s2", + "description": "Min acceleration for Hillgradient", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/a_HillGradientMin", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_t_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Time StandStill", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/t_StandStill", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_tc_BcmLongAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration from BCM LongAcc", + "max": 1000000000, + "min": -1000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BcmLongAccFilt", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_tc_BrkTrqFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for Brake trq filter", + "max": 1000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_BrkTrqFilt", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_tc_StandStill": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for filter when stand still", + "max": 10000000000, + "min": -10000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_StandStill", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_tc_VehAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for acceleration calculated from vehicle speed", + "max": 10000000000000, + "min": -1000000000000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_VehAccFilt", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_v_SpeedLimitHG": { + "type": "Float32", + "unit": "km/h", + "description": "Speedlimit. below set speed Stop inhibit is active", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_SpeedLimitHG", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_v_StandStillLoLim": { + "type": "Float32", + "unit": "km/h", + "description": "Low Speed Activation for Stand Still Time Constant", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/v_StandStillLoLim", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": 1 + }, + "cVcVmcPmm_B_FCAdaptIdle": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_FCAdaptIdle", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEmiGpfFC": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/B_UseEmiGpfFC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptGearRst": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptGearSet": { + "type": "Int8", + "unit": "-", + "description": "Selected gear for fuel cut adaption", + "max": 10, + "min": -10, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptGearSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptLockUpRst": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_FCAdaptLockUpSet": { + "type": "UInt8", + "unit": "-", + "description": "Selected lock up status for fuel cut adaption", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/D_FCAdaptLockUpSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_FCAdaptEngClntRst": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption reset", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_FCAdaptEngClntSet": { + "type": "Float32", + "unit": "deg C", + "description": "Selected coolant temp for fuel cut adaption", + "max": 200, + "min": -200, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/Te_FCAdaptEngClntSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_FCAdaptEngRst": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption reset", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_FCAdaptEngSet": { + "type": "Float32", + "unit": "rpm", + "description": "Selected engine speed for fuel cut adaption", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/n_FCAdaptEngSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_FCAdaptIdleDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Fuel cut request reset delay time off when not in idle", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/t_FCAdaptIdleDelayOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_FCAdaptVehRst": { + "type": "Float32", + "unit": "km/h", + "description": "Selected gear for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_FCAdaptVehSet": { + "type": "Float32", + "unit": "km/h", + "description": "Selected vehicle speed for fuel cut adaption", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1161_FuelCutRequest/v_FCAdaptVehSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DrLeaveKeepRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle keep engine running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeaveKeepRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DrLeavePowerDown": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/B_DrLeavePowerDown", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_DrLeaveAutoParkReq": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveAutoParkReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_DrLeaveDCADly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeaveDCADly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_DrLeavePwrDwnDly": { + "type": "Float32", + "unit": "s", + "description": "Time to activate driver leave vehicle after power-up", + "max": 100000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/t_DrLeavePwrDwnDly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_DrLeaveLim": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to activate driver leave vehicle logic", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/1162_DriverLeaveVehicle/v_DrLeaveLim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DrLeaveEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable driver leave vehicle logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_DrLeaveEnable", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_FCAdaptEnable": { + "type": "Bool", + "unit": "-", + "description": "Enable fuel cut adaption", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1160_EvalHev/B_FCAdaptEnable", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_GlitchEngOnTrans": { + "type": "Bool", + "unit": "", + "description": "Use glitch block on eng run req trans", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_GlitchEngOnTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopTrans": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/B_MinStopTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_GlitchEngOnTrans": { + "type": "Float32", + "unit": "s", + "description": "Block transmission request if glitching", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_GlitchEngOnTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopTrans": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1216_Trans/t_MinStopTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopEMS": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/B_MinStopEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopEMS": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1217_Ems/t_MinStopEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopEmLv": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/B_MinStopEmLv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopEmLv": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1218_EmLv/t_MinStopEmLv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopClim": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/B_MinStopClim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopClim": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/1219_Clim/t_MinStopClim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopTm": { + "type": "Bool", + "unit": "", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/B_MinStopTm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopTm": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121B_Tm/t_MinStopTm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopChas": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/B_MinStopChas", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopChas": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121H_Chassis/t_MinStopChas", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_MinStopCEC": { + "type": "Bool", + "unit": "-", + "description": "block system request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/B_MinStopCEC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_MinStopCEC": { + "type": "Float32", + "unit": "s", + "description": "block system request for this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121K_CEC/t_MinStopCEC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_PwrUpIceStrtReqUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Request first start if RunReqTrans is active at startup", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_PwrUpIceStrtReqUseTrans", + "configs": "(((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)) || ((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_B_SerialModeSafeBISG": { + "type": "Bool", + "unit": "-", + "description": "1= Use SafeBISG during serial mode start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_SerialModeSafeBISG", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeEscCond": { + "type": "Bool", + "unit": "-", + "description": "1=Use esc active condition for fast start mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeEscCond", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeSkipTrnMde": { + "type": "Bool", + "unit": "-", + "description": "Skip trans mode term in fast start logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/B_StrtMdeSkipTrnMde", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_D_FastBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_FastBISG", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_D_NormalBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_NormalBISG", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_D_SafeBISG": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 3, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/D_SafeBISG", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_n_StrtDiffFast": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed diff for triggering fast map for start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/121M1_StartModeHybrid/n_StrtDiffFast", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_B_UseStartModeHybrid": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch to use StartModeHybrid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121M_StartModeHybrid/B_UseStartModeHybrid", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))))", + "width": 1 + }, + "cVcVmcPmm_B_IgnoreGearLevRespStrt": { + "type": "Bool", + "unit": "-", + "description": "Ignore logic for responsive engine start as function of gear lever position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_IgnoreGearLevRespStrt", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_B_UseFirstStartMode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseFirstStartMode", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_B_UseLastStrtMod": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to always request a safe start for the last start attempt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseLastStrtMod", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_B_UseStrtMde3All12vStrt": { + "type": "Bool", + "unit": "-", + "description": "Use Startmode3 in all 12V starts, also for slow engagements", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/B_UseStrtMde3All12vStrt", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_D_AbortStart": { + "type": "UInt8", + "unit": "-", + "description": "Number of abroved start attempts", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/D_AbortStart", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_EngmtModFast": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode fast", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModFast", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))) || (ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_GearLevRespStrtOK1": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK1", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_D_GearLevRespStrtOK2": { + "type": "UInt8", + "unit": "-", + "description": "Allow a responsive engine start as function of gear lever position", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_GearLevRespStrtOK2", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_D_StrtModDft": { + "type": "UInt8", + "unit": "-", + "description": "Default start mode", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/121N1_StartModeHybrid12V/D_StrtModDft", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_B_UseStartModeHybrid12V": { + "type": "Bool", + "unit": "-", + "description": "Calibration switch for StartModeHybrid12V", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121N_StartModeHybrid12V/B_UseStartModeHybrid12V", + "configs": "((((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeSet": { + "type": "Bool", + "unit": "-", + "description": "Set start mode in to OB-block", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtMdeStopTrig": { + "type": "Bool", + "unit": "-", + "description": "Use transition Running->Stopping to set StartMode=running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/B_StrtMdeStopTrig", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StrtMdeAcc": { + "type": "Float32", + "unit": "%", + "description": "Accelerator pedal limit to set StartMode=2", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/X_StrtMdeAcc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeAccRst": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after releasing accelerator pedal", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRst", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeAccRun": { + "type": "Float32", + "unit": "s", + "description": "Delay for resetting StartMode=2 after reaching Running", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeAccRun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtMdeRunning": { + "type": "Float32", + "unit": "s", + "description": "Deley for ICEStatus Running before set of B_StrtMdeRunning", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121O_StartMode/t_StrtMdeRunning", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_BrakeRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_BrakeRunReqOnDelayHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "cVcVmcPmm_t_FCAdaptRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for FC Adapt run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_FCAdaptRunReqOnDelayHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "cVcVmcPmm_t_RunReqObdDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqObdDelayHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "cVcVmcPmm_t_RunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for engine run req to HMI-signal", + "max": 10000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_RunReqOnDelayHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "cVcVmcPmm_t_TransRunReqOnDelayHmi": { + "type": "Float32", + "unit": "s", + "description": "On delay for trans run req to HMI-signal", + "max": 1000000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/t_TransRunReqOnDelayHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "cVcVmcPmm_v_TransRunRqDlyMaxHmi": { + "type": "Float32", + "unit": "km/h", + "description": "Min speed to skip delay on fr trans run request in power meter logic", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121P_EngRunReqDispHmi/v_TransRunRqDlyMaxHmi", + "configs": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))))", + "width": 1 + }, + "cVcVmcPmm_B_CTFStart": { + "type": "Bool", + "unit": "-", + "description": "Start Change of mind Test Function", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/B_CTFStart", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_CTF": { + "type": "UInt8", + "unit": "-", + "description": "Change of mind test function. A stop will be requested until a certain rpm threashold is reached.", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/D_CTF2", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_CFTStop": { + "type": "Float32", + "unit": "rpm", + "description": "Rpm threashold for requesting a restart", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/n_CFTStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_CTFStop": { + "type": "Float32", + "unit": "s", + "description": "time for reaching a certain value until restart is triggered", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121Q_ChMnd/t_CTFStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_FastEngmtIsgStrtUseStartReq": { + "type": "Bool", + "unit": "-", + "description": "Set fast engagement during ISG-start only after ISG-start has been requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_FastEngmtIsgStrtUseStartReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrCcActive": { + "type": "Bool", + "unit": "-", + "description": "Ignore cruise control active condition", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/B_IgnrCcActive", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_EngmtModSmooth": { + "type": "UInt8", + "unit": "-", + "description": "Engagement mode smooth", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/D_EngmtModSmooth", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Tq_FastEngmtIsgStrtBrkTqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max brake torque request to request fast engagement mode during ISG-start", + "max": 100000, + "min": 1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Tq_FastEngmtIsgStrtBrkTqMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%", + "description": "Min acclerator position to set fast engagement torque demand", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/X_AccPedFastEngmtMin", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Xd_AccPedFastEngmtMin": { + "type": "Float32", + "unit": "%/s", + "description": "Min accelerator pedal derivative to set fast engagement", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/Xd_AccPedFastEngmtMin", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngEngmtFastRstDelay": { + "type": "Float32", + "unit": "ns", + "description": "Delay resetting EngEngmtFast flag since this is used after TransMode == Engaged", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/t_EngEngmtFastRstDelay", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_tc_AccPedDer": { + "type": "Float32", + "unit": "s", + "description": "Time constant of accelerator pedal low pass derivative filter", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/121R_EngagementMode/tc_AccPedDer", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_ATComStrt": { + "type": "Bool", + "unit": "-", + "description": "Change of mind situation can set StartAllowedPath (even if PowerTrainDisengaged=0) as long as EngOnReqTrans is still =1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_ATComStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbsStrt": { + "type": "Bool", + "unit": "-", + "description": "Block start if ABS is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_AbsStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_BrkStrt": { + "type": "Bool", + "unit": "-", + "description": "Block/delay start if ABS Pump is active (indicated by EngRunngReqByBrk == 1)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_BrkStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DepStop": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_DepStrt": { + "type": "Bool", + "unit": "", + "description": "Use Dep Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_DepStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngRunReqTot_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_RunOnReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngRunReqTot_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngRunReqTot", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_EngRunReqTot_swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_LosStop": { + "type": "Bool", + "unit": "-", + "description": "UseLOS Stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_LosStrt": { + "type": "Bool", + "unit": "-", + "description": "Use LOS Start Allowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_LosStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_PTDStrt": { + "type": "Bool", + "unit": "-", + "description": "Use powertrain disengaged to allow a start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_PTDStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_RcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Use ShutOffReq from VcPpmRc (dual mass flywheel protection)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_RcShutOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_Use7DCT": { + "type": "Bool", + "unit": "-", + "description": "switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_Use7DCT1", + "configs": "((ALWAYS_ACTIVE) || (Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UseAgedFuel": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FsdPc aged fuel", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseAgedFuel", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseBrake": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseBrake", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseCEC": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from CEC (replaces EMS and TM)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseCEC", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseChas": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Chassis", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseChas", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseClim": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseClim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDep": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from dependability", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDep", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDrLeave": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Driver Leave Logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDrLeave", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDriver": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from driver", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseDriver", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEMS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEMS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEmLv": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEmLv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngClntRunReq": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to low engine coolant temperature", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngClntRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngOffMaxTime": { + "type": "Bool", + "unit": "-", + "description": "Enable counter for max time for the engine to be shut off.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOffMaxTime", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngOnOff": { + "type": "Bool", + "unit": "", + "description": "Hold eng running after an restart", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseEngOnOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseFCAdapt": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from FC Adaptiotion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFCAdapt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseFanAfterrun": { + "type": "Bool", + "unit": "-", + "description": "Enable start due to Fan Afterrun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseFanAfterrun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIceStall": { + "type": "Bool", + "unit": "-", + "description": "Enable engine run request due to engine stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIceStall", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsg": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from 'Isg availble torque'", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseIsg", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseLOS": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseLOS", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseObd": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from OBD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseObd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UsePsm": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UsePsm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRc": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from PpmRc (Starter protection etc)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRemoteStart": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from Remote Start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRemoteStart", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRunDryInhb": { + "type": "Bool", + "unit": "-", + "description": "1-Block clutch, ISG and 12V Start if RunDry i set, 0-engine start possible.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhb", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseRunDryInhbOnly": { + "type": "Bool", + "unit": "-", + "description": "If TRUE, engine can start as soon as RunDry AND RunDryCrnkInhb flags go done, otherwise a car restart is also needed.", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseRunDryInhbOnly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseSapp": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseSapp", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseStabCtrl": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from StabilityCtlr (sVcVmcAwd_D_EngRunReqStabCtrl)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStabCtrl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseStartAllowedPath": { + "type": "Bool", + "unit": "", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseStartAllowedPath", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTm": { + "type": "Bool", + "unit": "-", + "description": "Listen to the running request from tm (replace run req EMS in PHEV)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTotEngRunReq": { + "type": "Bool", + "unit": "", + "description": "Use Total EngRunReqs instead of micro hybrid: wait for driver to be last system", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTotEngRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseTrans": { + "type": "Bool", + "unit": "", + "description": "Listen to the running request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseTrans", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseWait4Eng2Stop": { + "type": "Bool", + "unit": "-", + "description": "When enabled, the engine must stop completely before another engine start attempt is requested", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/B_UseWait4Eng2Stop", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_StartMode_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Calibration of start mode during development", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_StartMode_swi": { + "type": "Bool", + "unit": "-", + "description": "Calibration of start mode during development", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/D_StartMode_swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_EngClntEngOffReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature raises above this value, the ICE is allowed to be stopped", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngOffReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_EngClntEngRunReq": { + "type": "Float32", + "unit": "deg C", + "description": "If the engine coolant temperature drops below this value, an ICE start is requested", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/Te_EngClntEngRunReq", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_FanAfterrunLimHi": { + "type": "Float32", + "unit": "%", + "description": "High threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimHi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_FanAfterrunLimLo": { + "type": "Float32", + "unit": "%", + "description": "Low threshold for Fan Afterrun", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/X_FanAfterrunLimLo", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_IceStallMax": { + "type": "Float32", + "unit": "rpm", + "description": "Maximum engine speed where IceStall signal is allowed to shut down engine", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_IceStallMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLim": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLim", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLimHigh": { + "type": "Float32", + "unit": "rpm", + "description": "If the engine speed is below this level, the engine must be stopped completely before another engine start attempt is performed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHigh", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_Wait4Eng2StopLimHighTest": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed condition used for testing", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/n_Wait4Eng2StopLimHighTest", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_ATComStrt": { + "type": "Float32", + "unit": "s", + "description": "Duration to allow Change of mind restart (without PowerTrainDisengaged) on AT after EngOnReqTrans deactivation", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_ATComStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_AbsStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding ABS, used to ensure no start after Abs active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_AbsStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_BrkStrt": { + "type": "Float32", + "unit": "s", + "description": "Delay off for holding Brake inhibit active (actually ABS pump active), used to ensure no start during ABS pump active", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_BrkStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOffFcAdapt": { + "type": "Float32", + "unit": "s", + "description": "hold eng running for this amount of time after an stop request durign FC request condition", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffFcAdapt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOffMax": { + "type": "Float32", + "unit": "s", + "description": "Max time for the engine to be shut off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOffMax", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngOnOff": { + "type": "Float32", + "unit": "s", + "description": "hold eng running after an restart this amount of time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_EngOnOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_FanAfterrunDelay": { + "type": "Float32", + "unit": "s", + "description": "Deley for Eng On Req due to afterrun", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_FanAfterrunDelay", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Wait4Eng2StopTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4Eng2Stop-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4Eng2StopTiOut", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_Wait4EngRunReqTot": { + "type": "Float32", + "unit": "s", + "description": "Time delay for the EngRunReqTot-signal (necessary to solve the algebraic loop caused by the Wait4CluStrt-logic)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_Wait4EngRunReqTot", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_WaitToReset": { + "type": "Float32", + "unit": "s", + "description": "for this amount of time, is it ok for all other EngRunReqs to become 0, uhev", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/t_WaitToReset", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_WaitToReset": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop for a while after EngRunReqDriver condition", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1210_Engine_Control/v_WaitToReset", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseC3OilPres": { + "type": "Bool", + "unit": "-", + "description": "Use transmode request to help buld up C3 oil pressure", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/B_TrnMdeUseC3OilPres", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Te_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "deg C", + "description": "Mac gearbox temperature for enabling C3 oil pressure build up function", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/Te_TrnMdeC3OilPresMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "s", + "description": "Max duration to build up oil pressure in C3 clutch", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/t_TrnMdeC3OilPresMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TrnMdeC3OilPresMax": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral during C3 oil pressure build up", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1223_C3OilPresBuildUp/v_TrnMdeC3OilPresMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnEngBlockSkipEngUseReq": { + "type": "Bool", + "unit": "-", + "description": "Skip EngUseReq term in TrnEngBlock logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnEngBlockSkipEngUseReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseAwd": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Stability/Traction control run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseAwd", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseBrake": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Brake run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseBrake", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUsePcr": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when PCR run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUsePcr", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeUseTrans": { + "type": "Bool", + "unit": "-", + "description": "Engage gearbox when Transmission run req=1", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/B_TrnMdeUseTrans", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_n_TrnEngBlockMin": { + "type": "Float32", + "unit": "rpm", + "description": "Max speed for blocking TrnMode", + "max": 100000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/n_TrnEngBlockMin", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnEngBlockMax": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngBlockMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnEngCatHeatDly": { + "type": "Float32", + "unit": "s", + "description": "delay off for catalyst heat", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngCatHeatDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_TrnEngRpmDly": { + "type": "Float32", + "unit": "s", + "description": "Max block time", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/t_TrnEngRpmDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TrnEngBlockMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed for blocking TrnMode", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1224_EngageReqHybrid/v_TrnEngBlockMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeReqBrk": { + "type": "Bool", + "unit": "", + "description": "Use EngRunReqBrakes for use with Idle Coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1225_EngageReqIdleCoast/B_TrnMdeReqBrk", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UseEradHybrid": { + "type": "Bool", + "unit": "-", + "description": "Activate for hybrid cars with an ERAD", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UseEradHybrid", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UsePropFrntRampDown": { + "type": "Bool", + "unit": "-", + "description": "1= Use sVcVmcAjc_Tq_DrPropFrntReq,0 = use sVcDtcCta_Tq_CrShInstReq to determine if torque is ramped down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/B_UsePropFrntRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_DrCrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when driver requested CrSh torque is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_DrCrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when Driver requested CrSh torque is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_DrCrShRampUp", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_PropFrntRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop front is ramped down", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_PropFrntRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when prop frontt is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/Tq_PropFrntRampUp", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_CrShPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the ICE (when closing the crankshaft path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/1226_CrShPathDisabled/t_CrShPahDiTiOut", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_CrShPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_dbi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_CrShPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShPathEnable_swi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_CrShaftRampDownIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore to wait for the tq to have ramped out before turning off the engine", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_CrShaftRampDownIgnore", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_DepStopAT": { + "type": "Bool", + "unit": "-", + "description": "Ovverride StartAllowed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_DepStopAT", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_EngOnDelayIgnore": { + "type": "Bool", + "unit": "-", + "description": "Ignore delay for EnOnReq off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_EngOnDelayIgnore", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdCrSh": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Crankshaft Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_IgnrPropAlwdCrSh1", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeHev": { + "type": "Bool", + "unit": "-", + "description": "Use Hybrid logic (Enables serial mode) for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHev", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeHevUseNIC": { + "type": "Bool", + "unit": "-", + "description": "Use NIC ih hybrid vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeHevUseNIC", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_TrnMdeIC": { + "type": "Bool", + "unit": "", + "description": "Use Idle coast for control of TransModeReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_TrnMdeIC", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_UseOldEngRevStgy": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable the old strategy for engine revving in Park or Neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/B_UseOldEngRevStgy", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_GearTotNtrl": { + "type": "Int8", + "unit": "-", + "description": "Gear threashold to go to total neutral", + "max": 9, + "min": -1, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_GearTotNtrl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TransModeReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 7, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_dbi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TransModeReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TransModeReq_swi", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeHevReqEngNIC": { + "type": "UInt8", + "unit": "-", + "description": "Transmode NIC request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeHevReqEngNIC", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqEng": { + "type": "UInt8", + "unit": "-", + "description": "Transmode request", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqEng", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqNtrl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_D_TrnMdeReqTotNtrl": { + "type": "UInt8", + "unit": "-", + "description": "TransModeRequest total neutral value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/D_TrnMdeReqTotNtrl", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_CrShRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped down", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampDown", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_Tq_CrShRampUp": { + "type": "Float32", + "unit": "Nm", + "description": "Determine when crankshaft is ramped up", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/Tq_CrShRampUp", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_n_EngOnDelayOff": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed offset from idle for delay of EngOnReq (Off)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/n_EngOnDelayOff", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_EngOnDelayOff": { + "type": "Float32", + "unit": "s", + "description": "Deley ftime for EngOnReq off", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_EngOnDelayOff", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_GearLevPNDlyOn": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of gear lever in park or neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_GearLevPNDlyOn", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_IsgIceStopACCTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown during ACC active", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopACCTimeout", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_t_IsgIceStopTimeout": { + "type": "Float32", + "unit": "s", + "description": "Timeout to wait for IsgPathEnable to perform an Isg stop at ICE shutdown", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/t_IsgIceStopTimeout", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_EngStopReqAT": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed threshold to allow engine stop request", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_EngStopReqAT", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_ReqEngDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_ReqEngDrDir", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlReset": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to exit total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlReset", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlSet": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral", + "max": 350, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlSet", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_v_TotNtrlVehDrDir": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed threashold to go to total neutral due to not moving in intended direction", + "max": 350, + "min": -350, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1220_Transmission_Control/v_TotNtrlVehDrDir", + "configs": "((Vc_Pvc_Hw_B_AT))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtFrstStrtStall": { + "type": "Bool", + "unit": "s", + "description": "No stall recoverty to close to fisrt start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtFrstStrtStall", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtNtrlAdapt": { + "type": "Bool", + "unit": "", + "description": "demand neutral to be valid for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtNtrlAdapt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on StrtAbortHard", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallAbortHard", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallEngClntL": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Engine coolant temperature low", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallEngClntL", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallGp": { + "type": "Bool", + "unit": "", + "description": "Stallrecoveryonly if an stop/start vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallGp", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallMicHev": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on MicHevMode set to stop/start off", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallMicHev", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcShutOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallRcvInSpd": { + "type": "Bool", + "unit": "-", + "description": "No stall recovery if veh is in higher speed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallRcvInSpd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallSeatBelt": { + "type": "Bool", + "unit": "-", + "description": "Abort Stall on Driver Seat Belt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSeatBelt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallSsRcfSet": { + "type": "Bool", + "unit": "-", + "description": "Set enable stall recovery if vehicle have crashed.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallSsRcfSet", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_AbrtStallTime": { + "type": "Bool", + "unit": "", + "description": "power down after a certain time in stall", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_AbrtStallTime", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallEmiExtraCond": { + "type": "Bool", + "unit": "-", + "description": "Use extra conditions for StartMode=0 Ice Stall detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallEmiExtraCond", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrt": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrtActrFinishd": { + "type": "Bool", + "unit": "-", + "description": "Activate logic to detect that the ICE start was not successful after the start actuator is finished", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtActrFinishd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallIceStrtEmi": { + "type": "Bool", + "unit": "-", + "description": "Debug variable to enable ice stall detection during emission starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallIceStrtEmi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcShutOff": { + "type": "Bool", + "unit": "-", + "description": "Set stall flag on PpmRc flywheel protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcShutOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvAT": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery in an AT vehicle", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAT", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvAccFtOnPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on acc pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvAccFtOnPed", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvClOnly": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery when it is enough with only clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvClOnly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvCrnk": { + "type": "Bool", + "unit": "", + "description": "Stallrecovery on driver cranking", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvCrnk", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvFootOnBrPed": { + "type": "Bool", + "unit": "-", + "description": "Stall recovery on foot on brake pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFootOnBrPed", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRcvFrcd": { + "type": "Bool", + "unit": "s", + "description": "stall recovery if an forced start is conductred", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRcvFrcd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRun": { + "type": "Bool", + "unit": "", + "description": "Allow stall to happen via running", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunComInhbt": { + "type": "Bool", + "unit": "-", + "description": "Use ChangeOfMindInhibit to temporarily prevent StallRun detection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunComInhbt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunHiRes": { + "type": "Bool", + "unit": "-", + "description": "Use sVcEc_n_EngHiRes to detect StallRun", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunHiRes", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunStartM": { + "type": "Bool", + "unit": "-", + "description": "Prevent StallRun if starter motor has engaged", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunStartM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallRunUnintd": { + "type": "Bool", + "unit": "-", + "description": "Use stall detection by RPM as input to Unintended Stall flag to EMS", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallRunUnintd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StallStartM": { + "type": "Bool", + "unit": "", + "description": "allow stall to happend via starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StallStartM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortClu": { + "type": "Bool", + "unit": "-", + "description": "Clutch start abort", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortClu", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortHard": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortHard", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortIsg": { + "type": "Bool", + "unit": "-", + "description": "Start abortion from starter protection for Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortIsg", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbortSoft": { + "type": "Bool", + "unit": "", + "description": "Start abortion from starter protection", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbortSoft", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrt": { + "type": "Bool", + "unit": "", + "description": "Start abortion", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtAcc": { + "type": "Bool", + "unit": "", + "description": "start abort if no accelerator pedal is pressed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtAcc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtCl": { + "type": "Bool", + "unit": "", + "description": "start abort on clutch pedal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtCl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtDrReady": { + "type": "Bool", + "unit": "-", + "description": "start abort only if not DrReady", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtDrReady", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtIce": { + "type": "Bool", + "unit": "", + "description": "Start abort only when ice status is in starting", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtIce", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtNtrl": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtNtrlValid": { + "type": "Bool", + "unit": "", + "description": "start abort only if not in neutral and neutral is valid", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtNtrlValid", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtRpm": { + "type": "Bool", + "unit": "", + "description": "start abort on rpm limit", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtRpm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_StrtAbrtStrtM": { + "type": "Bool", + "unit": "", + "description": "Start abort only when the startmotor is active", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_StrtAbrtStrtM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UnintdStallRcShOff": { + "type": "Bool", + "unit": "-", + "description": "Set Unintended stall on yVcPpmRc_B_ShutOffReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UnintdStallRcShOff", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseClPedAdaptStallRecovery": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStallRecovery1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseClPedAdaptStrtAbrt": { + "type": "Bool", + "unit": "-", + "description": "Switch to use adapted clutch pedal position", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseClPedAdaptStrtAbrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseDesDrvDir": { + "type": "Bool", + "unit": "-", + "description": "Use desired driver direction as condition for stall recovery", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseDesDrvDir", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseStallRcvBlock": { + "type": "Bool", + "unit": "-", + "description": "Use stall recovery block from FsdPc, empty fuel tank.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/B_UseStallRcvBlock", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_Te_AbrtStallEngClntL": { + "type": "Float32", + "unit": "deg C", + "description": "Min Engine Cooland Temperature to do stall recovery", + "max": 160, + "min": -80, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/Te_AbrtStallEngClntL", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StallRcvClNtrl": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClNtrl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StallRcvClOnly": { + "type": "Float32", + "unit": "%", + "description": "Limit to determine if clutch pedal is pressed", + "max": 120, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StallRcvClOnly", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StrtAbrtAcc": { + "type": "Float32", + "unit": "%", + "description": "accelerator pedal limit to deactivate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtAcc", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_X_StrtAbrtCl": { + "type": "Float32", + "unit": "%", + "description": "Clutch pedal released to activate start abortion", + "max": 110, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/X_StrtAbrtCl", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_EngStalled": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to consider engine stalled", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_EngStalled", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "rpm", + "description": "Minimum engine speed for StartMode=0 before an Ice Stall is detected", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallEmiMinEngSpd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_StallRcv": { + "type": "Float32", + "unit": "rpm", + "description": "Max rpm for stall recovery", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StallRcv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_n_StrtAbrtRpm": { + "type": "Float32", + "unit": "rpm", + "description": "rpm to allow a start abortion", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/n_StrtAbrtRpm", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_AbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes re-allowed after first start (set higher value than t_BlockAbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtFrstDrCycle", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_AbrtStall": { + "type": "Float32", + "unit": "s", + "description": "time in stall to trigger a powerdown", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_AbrtStall", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_BlockAbrtFrstDrCycle": { + "type": "Float32", + "unit": "s", + "description": "Time before stall recovery becomes disallowed after first start (set lower value than t_AbrtFrstDrCycle)", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_BlockAbrtFrstDrCycle", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_EngRunStall": { + "type": "Float32", + "unit": "s", + "description": "Time for engine running before reset stall counter", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_EngRunStall1", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtPahReqTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for an ISG start path request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_IsgStrtPahReqTiOut", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallEmiMinEngSpd": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of low engine speed for StartMode=0", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallEmiMinEngSpd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrt": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtActrFinishd": { + "type": "Float32", + "unit": "s", + "description": "Time delay to detect that the ICE start was not successful after the start actuator is finished", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtActrFinishd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtEmi": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts)", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtEmiExtra": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until a stall is determined (for emission starts with extra logic)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtEmiExtra", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallIceStrtIsgDrv": { + "type": "Float32", + "unit": "ns", + "description": "Time from EngOnReq until a stall is determined when performing an ISG-start while gear leaver is placed in Drive (only for HEP7)", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallIceStrtIsgDrv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRcvClDelay": { + "type": "Float32", + "unit": "s", + "description": "Time delay until clutch sets OK to start.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvClDelay", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRcvNeutral": { + "type": "Float32", + "unit": "s", + "description": "Time in Neutral until trigger start", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRcvNeutral", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRun": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRun", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRunComInhbt": { + "type": "Float32", + "unit": "s", + "description": "Max time that ChangeOfMindInhibit signal can override StallRun detection", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunComInhbt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallRunUnintd": { + "type": "Float32", + "unit": "s", + "description": "Time from EngOnReq until an Unintended stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallRunUnintd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StallStrtM": { + "type": "Float32", + "unit": "s", + "description": "time from EngOnReq until a stall is determined", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StallStrtM", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_t_StrtAbrt": { + "type": "Float32", + "unit": "s", + "description": "time from triggering an start abortion until requesting an stall", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/t_StrtAbrt", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_StallRcvStart": { + "type": "Float32", + "unit": "km/h", + "description": "vehicle speed to allow stall restart on only cl or/and neutral", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallRcvStart", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_StallReset": { + "type": "Float32", + "unit": "km/h", + "description": "Stall recovery when vehicle is near standing still", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_StallReset", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_v_VehMaxStallRcv": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to do stall recovery", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1230_Engine_Stall_Control/v_VehMaxStallRcv", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_ERADTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override EradTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_ERADTqAllw", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Erad Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradIgnrPathDisable", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradPathEnable_dbi": { + "type": "Bool", + "unit": "", + "description": "override EradPath with this switch,", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradPathEnable_swi": { + "type": "Bool", + "unit": "", + "description": "override EradPath using this switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradPathEnable_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_EradRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_EradReqWhl, If 0 => sVcIsc_Tq_Erad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/B_EradRmpDwnTqSignal", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_dbi": { + "type": "Int8", + "unit": "-", + "description": "Debug value", + "max": 100, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_D_WhlMotSysCluOperTypReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/D_WhlMotSysCluOperTypReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_Tq_ERADRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/Tq_ERADRampDown", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradDisable", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradNtrlGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time in neutral for Erad disable", + "max": 2, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradNtrlGlitch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradOffGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time disengage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOffGlitch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_t_EradOnGlitch": { + "type": "Float32", + "unit": "s", + "description": "Glitch time engage erad", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/t_EradOnGlitch", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_v_EradOffSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad disengage speed to high", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOffSpdLim", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_v_EradOnSpdLim": { + "type": "Float32", + "unit": "km/h", + "description": "Erad engage speed limit", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradOnSpdLim", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_v_EradSpdCtrl": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed to request erad idle speed (speed control)", + "max": 500, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/12411_Erad/v_EradSpdCtrl", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_B_UseEradCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1241_Erad/B_UseEradCode", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding1": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding1", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding2": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding2", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding3": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding3", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EpbCoding4": { + "type": "UInt8", + "unit": "-", + "description": "Epb coding", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421111_EpbCoding/D_EpbCoding4", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseAwdRoadGrad": { + "type": "Bool", + "unit": "-", + "description": "Use Awd road grad", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/B_UseAwdRoadGrad", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_tc_LatAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Lat acc filter constant", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/tc_LatAccFilt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtGearLvrDRAbortEna": { + "type": "Bool", + "unit": "-", + "description": "Enable aborting ISG-start in D/R", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtGearLvrDRAbortEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtInDUseEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Trigger ISG-start in D if Efad actual path is already ISG", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_IsgStrtInDUseEfadPathAct", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStrtAtStndStill": { + "type": "Bool", + "unit": "-", + "description": "When enabled, every engine start will be an ISG-start when standing still and brakes are applied", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/B_UseIsgStrtAtStndStill", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadIsgStrLoosenLim": { + "type": "UInt8", + "unit": "-", + "description": "When the number of ISG start attempts exceed this limit, the conditions for the next ISG-start attempt will be loosen", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/D_EfadIsgStrLoosenLim", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Te_Efad12VStrtEngClntMin": { + "type": "Float32", + "unit": "deg C", + "description": "Minimum coolant temperature to allow 12V-starts", + "max": 300, + "min": -300, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Te_Efad12VStrtEngClntMin", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtDiFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Prevent an ISG start when the crankshaft wheel torque is above this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtDiFlt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadIsgStrtEnaFlt": { + "type": "Float32", + "unit": "Nm", + "description": "Allow an ISG start when the crankshaft wheel torque is below this level (when there's a fault present on one or more start actuators)", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/Tq_EfadIsgStrtEnaFlt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_BrkLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of requested brake torque when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_BrkLimIsgStrtGearLvrDR", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtWhlTrqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of the driver request being low enough to request an ISG-start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_IsgStrtWhlTrqOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "ns", + "description": "Time limit for detection of logic connected to requesting ISG start as a function of vehicle speed when gear lever is placed in Drive", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/t_VehSpdLimIsgStrtGearLvrDR", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_VehSpdLimIsgStrtGearLvrDR": { + "type": "Float32", + "unit": "m/s", + "description": "Vehicle speed limit to be able to request an ISG-start when gear lever is placed in Drive", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/v_VehSpdLimIsgStrtGearLvrDR", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_Efad12VStrtEnblIngoreDep": { + "type": "Bool", + "unit": "-", + "description": "If false 12VStartEnable can not be set without having permission from Dep(StartAllowed = True)", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_Efad12VStrtEnblIngoreDep", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUse12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_EfadUse12VStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUseFactory12VStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable/disable forced 12V-start when in factory mode", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_EfadUseFactory12VStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseDly12VStrtVehPwrUp": { + "type": "Bool", + "unit": "-", + "description": "Enable delay of 12Vstart request during vehicle power up due to potential problems related to wake up delay from other nodes", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseDly12VStrtVehPwrUp", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseWait4CluStrt": { + "type": "Bool", + "unit": "-", + "description": "Enable functionality to wait for the vehicle speed to increase before requesting a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/B_UseWait4CluStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_IceStsStarting": { + "type": "UInt8", + "unit": "-", + "description": "An extra calibration possibility to block a start actuator", + "max": 127, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/D_IceStsStarting", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_Wait4CluStrtDi": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is above this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtDi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_Wait4CluStrtEna": { + "type": "Float32", + "unit": "Nm", + "description": "If the requested wheel torque is below this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/Tq_Wait4CluStrtEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_Wait4CluStrtDi": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtDi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_Wait4CluStrtEna": { + "type": "Float32", + "unit": "%", + "description": "If the acc pedal is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/X_Wait4CluStrtEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_a_Wait4CluStrtDi": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration drops below this level, it's NOT possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtDi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_a_Wait4CluStrtEna": { + "type": "Float32", + "unit": "m/s2", + "description": "If the vehicle acceleration is above this level, it's possible to wait for the vehicle speed to increase before requesting a clutch start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/a_Wait4CluStrtEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_n_12VStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow 12V start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/n_12VStrtAllwdEngSpdMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_FirstStrtDlyOff": { + "type": "Float32", + "unit": "s", + "description": "Time out delay for waiting with an ISG-start request during first start", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_FirstStrtDlyOff", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_Wait4CluStrtTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout detection for the Wait4ClutStart-logic", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/t_Wait4CluStrtTiOut", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_tc_VdmAccFilt": { + "type": "Float32", + "unit": "s", + "description": "Filter constant for vehicle acceleration signal from VDM", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/tc_VdmAccFilt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_Efad12VStartMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed for 12V start motor crank", + "max": 250, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMax1", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_Efad12VStartMin": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed for 12V start motor crank", + "max": 250, + "min": -250, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242112_12VStart/v_Efad12VStartMin", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseEngOnReqDly": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/B_UseEngOnReqDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Te_TrnOil": { + "type": "Float32", + "unit": "deg C", + "description": "Allow for a longer first start time (from button press to ICE running) if the transmission oil temperature is low", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/Te_TrnOil", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_n_IsgStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/n_IsgStrtAllwdEngSpdMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_rt_EfadLowAvailTrq": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque losses to allow an ISG-start attempt", + "max": 100000, + "min": -100000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/rt_EfadLowAvailTrq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_DrvCycActvFirstStrt": { + "type": "Float32", + "unit": "s", + "description": "Timeout for first start logic connected to the DriveCycleActive signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_DrvCycActvFirstStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadLowAvailTrqDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection of maximum Efad torque losses to allow an ISG-start attempt", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EfadLowAvailTrqDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EngOnReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay for EngOnReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242113_IsgStartAllowed/t_EngOnReqDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtInDeplBlk": { + "type": "Bool", + "unit": "-", + "description": "Block Clutch Start in Depletion Operation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_CluStrtInDeplBlk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrDepl": { + "type": "Bool", + "unit": "-", + "description": "When enabled, this label will ignore the depletion-conditon for blocking clutch starts", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IgnrDepl", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStopRunReqCluStrtBlkEna": { + "type": "Bool", + "unit": "-", + "description": "Block clutch start if run req is set by fast ISG stop function, to enable use of ISG-start in speed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_IsgStopRunReqCluStrtBlkEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_Use12vStrtPsblInCluStrtAbort": { + "type": "Bool", + "unit": "-", + "description": "Protection for only blocking clutch start when 12V starter is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_Use12vStrtPsblInCluStrtAbort", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseRespStartReqFromDeDmm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from DeDmm for blocking CluStrt", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartReqFromDeDmm", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseRespStartreqFromVmcEm": { + "type": "Bool", + "unit": "-", + "description": "Use RespStartReq from VmcEm for evaluating CluuStrtBlk", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStartreqFromVmcEm", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseRespStrtReqInCluStrtAllw": { + "type": "Bool", + "unit": "-", + "description": "Choose which resp start request to block the possiblity to request a clutch start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseRespStrtReqInCluStrtAllw", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseTqOffsForCluStrtEval": { + "type": "Bool", + "unit": "-", + "description": "Inhibit clutch start if no Efad torque reserve is available", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/B_UseTqOffsForCluStrtEval", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_n_CluStrtAllwdEngSpdMax": { + "type": "Float32", + "unit": "rpm", + "description": "Max engine speed to allow clutch start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/n_CluStrtAllwdEngSpdMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_CluStrtSpdAllw": { + "type": "Float32", + "unit": "km/h", + "description": "Speed-limits for allowing clu-strt instead of 12V start", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242114_ClutchStartAllowed/v_CluStrtSpdAllw", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtBlk_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStrtTrigNewPos": { + "type": "Bool", + "unit": "-", + "description": "Use new position of flank trigger for 12V-start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_12VStrtTrigNewPos", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtBlk_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_CluStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_CluStrtReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUseCluStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseCluStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadUseIsgStrt": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_EfadUseIsgStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtBlk_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtBlk_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtBlk_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPahReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPahReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtPahReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtReq_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/B_IsgStrtReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_Efad12VStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of 12V start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_Efad12VStrtMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadCluStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of clutch start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadCluStrtMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadIsgStrtMax": { + "type": "UInt8", + "unit": "-", + "description": "Maximum number of ISG start attempts allowed", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/D_EfadIsgStrtMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_rt_EfadStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max Efad torque loss to permit Efad start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/rt_EfadStrtAllow", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_12VStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_12VStrtActrRdyDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_CluStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_CluStrtActrRdyDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from Efad or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_EfadRunReqDelay", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IceRunng12VStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for a 12V-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunng12VStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IceRunngCluStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an clutch-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngCluStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IceRunngIsgStrt": { + "type": "Float32", + "unit": "s", + "description": "Time before ice status = running is detected for an ISG-start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IceRunngIsgStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtActrRdyDly": { + "type": "Float32", + "unit": "s", + "description": "When the B_EngOnReq-signal goes low (e.g. after an ICE start abort), delay the actuator ready signal (to avoid trying another start one sample after the start abort is detected)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/t_IsgStrtActrRdyDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadCluStrtDi": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to prevent a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtDi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadCluStrtEna": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to enable a clutch start request", + "max": 400, + "min": -100, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/v_EfadCluStrtEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_CatHeatVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request during cat heating", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_CatHeatVehSpdOKIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_VehSpdOKIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/t_VehSpdOKIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (when the gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKIsgDrvHybridEco", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdNOKPrioIsgDrvHybridEco", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKIsgDrvHybridEco", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrv": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKPrioIsgDrvHybridEco": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (during Prio charge request and gear lever is placed in Drive) in HybridEco", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242121_VehSpdOKIsgDrv/v_EfadVehSpdOKPrioIsgDrvHybridEco", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStopRunReqIgnrEfadPathAct": { + "type": "Bool", + "unit": "-", + "description": "Ignore actual Efad path to allow eng run req ISG stop", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_IsgStopRunReqIgnrEfadPathAct", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopPostRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request after ISG-stop is completed", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopPostRunReqStandstill", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopRunReqCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqCoast", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopRunReqStandstill": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop ICE run request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/B_UseIsgStopRunReqStandstill", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EngRunReqIsgStopMax": { + "type": "Float32", + "unit": "s", + "description": "Max time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EngRunReqIsgStopMin": { + "type": "Float32", + "unit": "s", + "description": "Min time to hold ISG stop run req", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/1242122_IsgStopRunReq/t_EngRunReqIsgStopMin", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_TrnModIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Transmission mode signal to be used for the ISG-mode request", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_TrnModIsgReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseChargeInIsgReq": { + "type": "Bool", + "unit": "-", + "description": "Use Charge from VmcEm for concidering IsgReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseChargeInIsgReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgBrk": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when braking in stand still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStandStill": { + "type": "Bool", + "unit": "-", + "description": "Debug switch to enable an ISG-mode request when standing still", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStandStill", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopCoast": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during coast", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopCoast", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgStopPwrDwn": { + "type": "Bool", + "unit": "-", + "description": "Use ISG stop during power down", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/B_UseIsgStopPwrDwn", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_EfadBrkOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBrkTqOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "Nm", + "description": "VcVmcBsl torque limit to enable an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStandStillBslTqOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqHyst": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast, hysteresis", + "max": 10000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqHyst1", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMax": { + "type": "Float32", + "unit": "Nm", + "description": "Max driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgStopCoastDrReqMin": { + "type": "Float32", + "unit": "Nm", + "description": "Min driver requested torque (including regen) to allow ISG stop in coast", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/Tq_IsgStopCoastDrReqMin", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "%", + "description": "Acc ped limit to enable an ISG request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_EfadAccPedOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_IsgStopRoadGradMax": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_X_IsgStopRoadGradMaxHyst": { + "type": "Float32", + "unit": "%", + "description": "Maximum road gradient to allow ISG-stop in D/R standstill, hysteresis", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/X_IsgStopRoadGradMaxHyst", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_ChrgReqDly": { + "type": "Float32", + "unit": "s", + "description": "Delay time for Em_B_ChrgReq", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_ChrgReqDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadAccPedOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the acc ped level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadAccPedOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadBrkOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the brake torque level is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadBrkOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadIceStsDlyIsgDrv": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection that Pmm_D_IceStatus = running", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadIceStsDlyIsgDrv", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "s", + "description": "Time limit to detect that the vehicle speed is OK for an ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_EfadVehSpdOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_GearLevNDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Neutral", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_GearLevNDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillBrkTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of brake torque OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBrkTqOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillBslTqOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of VcVmcBsl torque request being low enough for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillBslTqOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of vehicle speed OK for an ISG request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/t_IsgStandStillVehSpdOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdNOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to disable the ISG-mode request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdNOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadVehSpdOKIsgBrk": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed limit to allow an ISG reconfig request (when braking)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_EfadVehSpdOKIsgBrk", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStandStillVehSpdOK": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed is low enough for an ISG-request", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStandStillVehSpdOK", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdHyst": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast, hysteresis", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdHyst", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMax": { + "type": "Float32", + "unit": "km/h", + "description": "Max vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMinOff": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOff", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_IsgStopCoastSpdMinOn": { + "type": "Float32", + "unit": "km/h", + "description": "Min vehicle speed to allow ISG stop during coast", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124212_IsgReq/v_IsgStopCoastSpdMinOn", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadGearLvrPNDisengEna": { + "type": "Bool", + "unit": "-", + "description": "Disengage Efad in gear lever position Park and Neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadGearLvrPNDisengEna", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnaParkEngd": { + "type": "Bool", + "unit": "-", + "description": "Enable Efad path disregarding park engaged status", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnaParkEngd", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_EfadPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_EfadPathEnable_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdEfad": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Efad Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdEfad", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IgnrPropAlwdIsg": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Propulsion Allowed signal for the Isg Path Enable logic", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/B_IgnrPropAlwdIsg", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgPathEnable_dbi": { + "type": "Bool", + "unit": "-", + "description": "Debug value", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_IsgPathEnable_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgPathEnable_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadModReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadModReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadModReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathAllwd1": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd1", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathAllwd2": { + "type": "UInt8", + "unit": "-", + "description": "Allow ISG speed control (as a function of EFAD path actual)", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathAllwd2", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathReq_dbi": { + "type": "UInt8", + "unit": "-", + "description": "Debug value", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_D_EfadPathReq_swi": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/D_EfadPathReq_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadDrvCycTiOut": { + "type": "Float32", + "unit": "s", + "description": "Limit for drivecycle timeout indication", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadDrvCycTiOut", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadGearLvrPNDetn": { + "type": "Float32", + "unit": "s", + "description": "Time limit for detection of when the gear lever is in park or neutral", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadGearLvrPNDetn", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the EFAD path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadPahDiTiOut2", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadShftProgsOffDly": { + "type": "Float32", + "unit": "s", + "description": "CAN delay compensation for EfadShiftInProgress-signal", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsOffDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadShftProgsTimeOut": { + "type": "Float32", + "unit": "s", + "description": "Time out detection for Efad gear shifting", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadShftProgsTimeOut", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_EfadTrqAllowTiOut": { + "type": "Float32", + "unit": "s", + "description": "Timeout before torque allow from dep disables Tq-ctrl", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_EfadTrqAllowTiOut", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_GearLevDRDly": { + "type": "Float32", + "unit": "s", + "description": "Time delay for detection that GearLev = Drive or Reverese", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_GearLevDRDly", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgDrCycStop": { + "type": "Float32", + "unit": "s", + "description": "Keep ISG activation for a short time after engine has been stopped", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStop", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgDrCycStopMax": { + "type": "Float32", + "unit": "s", + "description": "Allow keep ISG activation after end of drive cycle, intended for soft stop", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgDrCycStopMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_t_IsgPahDiTiOut": { + "type": "Float32", + "unit": "s", + "description": "Maximum time allowed to wait for there being no torque acting on the electric motor (when closing the ISG path)", + "max": 5000, + "min": -5000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/t_IsgPahDiTiOut", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_v_EfadGearLvrPNDiseng": { + "type": "Float32", + "unit": "km/h", + "description": "Max speed to keep Efad engaged to wheels in P/N", + "max": 255, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/v_EfadGearLvrPNDiseng", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseEfadCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/B_UseEfadCode", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_12VStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_12VStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "12V Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_12VStartEnable_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStartEnable_dbi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_dbi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStartEnable_swi": { + "type": "Bool", + "unit": "s", + "description": "Isg Start Enable debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStartEnable_swi", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtFirstStartOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtFirstStartOverride", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtPcrOverride": { + "type": "Bool", + "unit": "-", + "description": "Override PCR in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtPcrOverride", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtRunDryOverride": { + "type": "Bool", + "unit": "-", + "description": "Override run dry condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtRunDryOverride", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtSpdCtrlOverride": { + "type": "Bool", + "unit": "-", + "description": "Override first start condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtSpdCtrlOverride", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtTempOverride": { + "type": "Bool", + "unit": "-", + "description": "Override temp condition in ISG start ok calculation", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_IsgStrtTempOverride", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_UseOilTemp": { + "type": "Bool", + "unit": "-", + "description": "Use oil temperature to determine if ISG start i possible", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/B_UseOilTemp", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_Pw_IsgStrtAllow": { + "type": "Float32", + "unit": "W", + "description": "Minimum available ISG power to allow ISG start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Pw_IsgStrtAllow", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_Te_IsgStartPossible": { + "type": "Float32", + "unit": "deg C", + "description": "Use oil temperature to determine if ISG start i possible", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Te_IsgStartPossible", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_rt_IsgStrtAllow": { + "type": "Float32", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/rt_IsgStrtAllow", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_t_IsgRunReqDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay time to send run req due to low trq from ISG or low power from HV battery", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL_MERGEABLE", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgRunReqDelay", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_t_IsgStrtOkDelay": { + "type": "Float32", + "unit": "s", + "description": "Delay to wait on Isg start Ok", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/t_IsgStrtOkDelay", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_v_12VStrtMax": { + "type": "Float32", + "unit": "km/h", + "description": "Maximum speed for 12V start", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/v_12VStrtMax", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": 1 + }, + "cVcVmcPmm_B_IsgStrtUseSpdCtrl": { + "type": "Bool", + "unit": "-", + "description": "Max ISG torque loss to permit ISG start and permit engine stop.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124312_IsgStartCoordination/B_IsgStrtUseSpdCtrl", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "width": 1 + }, + "cVcVmcPmm_B_ISGTqAllw": { + "type": "Bool", + "unit": "-", + "description": "Override ISGTqAllw", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_ISGTqAllw", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_B_IsgIgnrPathDisable": { + "type": "Bool", + "unit": "-", + "description": "Ignore the Isg Path Disable signal", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgIgnrPathDisable", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_B_IsgRmpDwnTqSignal": { + "type": "Bool", + "unit": "-", + "description": "if 1=> sVcDtcTc_Tq_IsgReq, If 0 => sVcIsc_Tq_Isg", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_IsgRmpDwnTqSignal", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_B_SkipIsgCalibration": { + "type": "Bool", + "unit": "-", + "description": "Skip ISG standby request at Ice stop for sensor calibration", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_SkipIsgCalibration", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgSpdCtrlStrt": { + "type": "Bool", + "unit": "-", + "description": "Use ISG speed control during safe start", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/B_UseIsgSpdCtrlStrt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_Tq_IsgRampDown": { + "type": "Float32", + "unit": "Nm", + "description": "limit to consider erad path to be ramped out", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/Tq_IsgRampDown", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_t_IsgAdapt": { + "type": "Float32", + "unit": "s", + "description": "Time for ISG calibration request", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgAdapt", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_t_IsgDisable": { + "type": "Float32", + "unit": "s", + "description": "Time out torque ramp for erad disable", + "max": 5, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgDisable", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_t_IsgICEStop": { + "type": "Float32", + "unit": "s", + "description": "Delay on for ICE stop for ISG stanby request", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/t_IsgICEStop", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_B_UseIsgCode": { + "type": "Bool", + "unit": "-", + "description": "Debug switch", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/B_UseIsgCode", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "width": 1 + }, + "cVcVmcPmm_Tq_TransHeatReqOffset": { + "type": "Float32", + "unit": "Nm", + "description": "Torque offset to reset heat request to TmStrt", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReqOffset", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": 1 + }, + "cVcVmcPmm_t_TransHeatDelayOn": { + "type": "Float32", + "unit": "s", + "description": "Delay on time for trans heat request", + "max": 100, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/t_TransHeatDelayOn", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": 1 + }, + "cVcVmcPmm_B_PTDGearLevAT": { + "type": "Bool", + "unit": "-", + "description": "Use Gear Lever position to set powertrain disengaged.", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_PTDGearLevAT", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseIceEnable": { + "type": "Bool", + "unit": "-", + "description": "Use ICE enable", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseIceEnable", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_UseOld12VStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOld12VStrtAllwd", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": 1 + }, + "cVcVmcPmm_B_UseOldEngStrtAllwd": { + "type": "Bool", + "unit": "-", + "description": "Debug", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1260_Eval/B_UseOldEngStrtAllwd", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngOnReq_dbi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_dbi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngOnReq_swi": { + "type": "Bool", + "unit": "", + "description": "override B_EngOnReq", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/B_EngOnReq_swi", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_B_EngineArchitecture": { + "type": "Bool", + "unit": "-", + "description": "Switch for signal conditioning depending on engine architecture. 0= VEA GEN I/II ; 1= GEP3", + "max": "-", + "min": "-", + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/B_EngineArchitecture", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "cVcVmcPmm_D_DrDoorOpen": { + "type": "UInt8", + "unit": "-", + "description": "DoorDrvrSts detection of driver door open", + "max": 10, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1300_EUCD_SPA_CMA_Map/D_DrDoorOpen", + "configs": "((ALWAYS_ACTIVE))", + "width": 1 + }, + "tVcVmcPmm_p_BrVacuumVeh_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh_x", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 1, + 7 + ] + }, + "tVcVmcPmm_Z_HillGradAcc2deg_x": { + "type": "Float32", + "unit": "m/s2", + "description": "X-value (longit. accel. input), relation of accel. to slope(deg);", + "max": 500, + "min": -500, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg_x", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 1, + 5 + ] + }, + "mVcVmcPmm_tc_HillGradient_c": { + "type": "Float32", + "unit": "Nm", + "description": "Total Wheel Trq Brake", + "max": 5000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_c", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 1, + 4 + ] + }, + "mVcVmcPmm_tc_HillGradient_r": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient_r", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 1, + 6 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline_c": { + "type": "Float32", + "unit": "-", + "description": "Road inclination", + "max": 100000, + "min": -100000, + "lsb": 0.0625, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_c", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": [ + 1, + 8 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline_r": { + "type": "Float32", + "unit": "Nm", + "description": "Brake torque", + "max": 100000, + "min": -100000, + "lsb": 0.25, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline_r", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": [ + 1, + 8 + ] + }, + "tVcVmcPmm_Tq_IsgStrtAllow_x": { + "type": "Float32", + "unit": "rpm", + "description": "Engine speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow_x", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_Tq_TransHeatReq_x": { + "type": "Float32", + "unit": "km/h", + "description": "Vehicle speed", + "max": 300, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq_x", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_p_BrVacuumVeh": { + "type": "Float32", + "unit": "kPa", + "description": "Brake vacuum level to request an restart, depending on vehicle speed", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1140_Brake/p_BrVacuumVeh/p_BrVacuumVeh", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 1, + 7 + ] + }, + "tVcVmcPmm_Z_HillGradAcc2deg": { + "type": "Float32", + "unit": "Deg", + "description": "Hill Gradient i degree", + "max": 90, + "min": -90, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/Z_HillGradAcc2deg/Z_HillGradAcc2deg", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 1, + 5 + ] + }, + "mVcVmcPmm_tc_HillGradient": { + "type": "Float32", + "unit": "s", + "description": "Hill Gradient Time Constant for filter depending on TrqWhlBrk and Vehicle Speed.", + "max": 1000, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1100_Eval/1150_Gradient_estimation/tc_HillGradient/tc_HillGradient", + "configs": "((((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))))", + "width": [ + 6, + 4 + ] + }, + "mVcVmcPmm_Z_BrkRoadIncline": { + "type": "UInt8", + "unit": "-", + "description": "OK signal to allow for an ISG start in Drive", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1242_Efad/12421_Efad/124211_IceStartCoordination/1242111_IsgStartGearLeverDR/12421112_BrkRoadIncline/Z_BrkRoadIncline/Z_BrkRoadIncline", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "width": [ + 8, + 8 + ] + }, + "tVcVmcPmm_Tq_IsgStrtAllow": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum available ISG torque to allow ISG start", + "max": 10000, + "min": -10000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1243_Isg/12431_Isg/124311_IsgStartCoordination12V/Tq_IsgStrtAllow/Tq_IsgStrtAllow", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "width": [ + 1, + 6 + ] + }, + "tVcVmcPmm_Tq_TransHeatReq": { + "type": "Float32", + "unit": "Nm", + "description": "Minimum torque to send heat request to TmStrt to warm transmission oil", + "max": 1000, + "min": -1000, + "lsb": 1, + "offset": 0, + "class": "CVC_CAL", + "handle": "VcVmcPmm__HEP7/VcVmcPmm/Subsystem/VcVmcPmm/VcVmcPmm/1000_Hev/1200_Control/1240_Hybrid_Mode_Control/1244_TransHeatReq/Tq_TransHeatReq/Tq_TransHeatReq", + "configs": "((((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "width": [ + 1, + 6 + ] + } + } +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/config_combined_header.json b/tests/pybuild/reference_files/config_combined_header.json new file mode 100644 index 0000000..61c0a97 --- /dev/null +++ b/tests/pybuild/reference_files/config_combined_header.json @@ -0,0 +1,53 @@ +{ + "VcVmcPmm__HEP7_1140_Brake_1": "((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))", + "VcVmcPmm__HEP7_1150_Gradient_estimation_2": "((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem))", + "VcVmcPmm__HEP7_121M_StartModeHybrid_3": "((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0))", + "VcVmcPmm__HEP7_121N_StartModeHybrid12V_4": "((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor))", + "VcVmcPmm__HEP7_121P_EngRunReqDispHmi_5": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1224_EngageReqHybrid_7": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad))", + "VcVmcPmm__HEP7_1243_Isg_8": "((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))", + "VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9": "((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg))", + "VcVmcPmm__HEP7_1270_12VStartEnable_10": "((Vc_Pvc_Hw_B_12VStartMotor && !Vc_Pvc_Hw_B_Efad && !Vc_Pvc_Hw_B_Erad && !Vc_Pvc_Hw_B_Isg))", + "VcVmcPmm__HEP7_1000_Hev_11": "((Vc_D_CodegenHev>0))", + "Vc_Pvc_Hw_B_Isg_CN": "((Vc_Pvc_Hw_B_Isg))", + "Vc_Pvc_Hw_B_HVSystem_CN": "((Vc_Pvc_Hw_B_HVSystem))", + "Vc_Pvc_Hw_B_Efad_CN": "((Vc_Pvc_Hw_B_Efad))", + "Vc_Pvc_Hw_B_Erad_CN": "((Vc_Pvc_Hw_B_Erad))", + "SVmcPmm__HE1_VcVmcPmm_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE171__lOperator35_AUX": "(Vc_Pvc_Hw_B_AT || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE171__lOperator35_A_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE173_Merge_AUX_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE173_Merge_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))) || ((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)))", + "SVmcPmm__HE173_Merge_AUX_b": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE173_Merge_AUX_c": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE173_Merge1_AUX": "(((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE173_Merge1_AUX_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE173_Merge1_AUX_b": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE477_MinMax_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE477__lOperator18_AUX": "(Vc_Pvc_Hw_B_AT || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE477__lOperator18_A_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE512_Switch_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad)) && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE614__lOperator11_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Erad))", + "SVmcPmm__HE784_Merge_AUX_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE784_Merge_AUX_b": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE784_Merge_AUX_c": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge_AUX_d": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE784_Merge5_AUX_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE784_Merge5_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE784_Merge5_AUX_b": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge5_AUX_c": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE784__lOperator19_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE808__calOperator_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE818_Switch_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE821__ransHeatReq_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_TqConverterGbx))", + "SVmcPmm__HE637__hEnable_dbi_A_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE637__hEnable_dbi_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && Vc_Pvc_Hw_B_Efad) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE637__hEnable_dbi_A_b": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE389__ReqUseTrans_AUX": "(((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor==0)) || ((Vc_Pvc_Hw_B_Isg && Vc_Pvc_Hw_B_12VStartMotor)))", + "SVmcPmm__HE785__sgStrtAllow_A_a": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE785__sgStrtAllow_AUX": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad)) && Vc_Pvc_Hw_B_12VStartMotor) || (((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE785__sgStrtAllow_A_b": "((((Vc_Pvc_Hw_B_Efad || Vc_Pvc_Hw_B_Erad || Vc_Pvc_Hw_B_Isg)) && ((Vc_Pvc_Hw_B_Isg && !Vc_Pvc_Hw_B_Efad))))", + "SVmcPmm__HE148_Switch_AUX": "(((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)) || ((Vc_Pvc_Sw_B_StopStart || Vc_Pvc_Hw_B_HVSystem)))" +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/config_local_defs.json b/tests/pybuild/reference_files/config_local_defs.json new file mode 100644 index 0000000..b0cdfac --- /dev/null +++ b/tests/pybuild/reference_files/config_local_defs.json @@ -0,0 +1,38 @@ +{ + "SVmcPmm__HE1_VcVmcPmm_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE171__lOperator35_AUX": "(Vc_Pvc_Hw_B_AT || (VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE171__lOperator35_A_a": "((VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE173_Merge_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE173_Merge_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8) || VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9)", + "SVmcPmm__HE173_Merge_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE173_Merge_AUX_c": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE173_Merge1_AUX": "(VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE173_Merge1_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE173_Merge1_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE477_MinMax_AUX": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE477__lOperator18_AUX": "(Vc_Pvc_Hw_B_AT || (VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE477__lOperator18_A_a": "((VcVmcPmm__HEP7_1224_EngageReqHybrid_7 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE512_Switch_AUX": "((VcVmcPmm__HEP7_1223_C3OilPresBuildUp_6 && Vc_Pvc_Hw_B_AT))", + "SVmcPmm__HE614__lOperator11_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Erad))", + "SVmcPmm__HE784_Merge_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784_Merge_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE784_Merge_AUX_c": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge_AUX_d": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784_Merge5_AUX_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE784_Merge5_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784_Merge5_AUX_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE784_Merge5_AUX_c": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE784__lOperator19_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE808__calOperator_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE818_Switch_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor == 0))", + "SVmcPmm__HE821__ransHeatReq_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_TqConverterGbx))", + "SVmcPmm__HE637__hEnable_dbi_A_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad))", + "SVmcPmm__HE637__hEnable_dbi_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && Vc_Pvc_Hw_B_Efad) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE637__hEnable_dbi_A_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE389__ReqUseTrans_AUX": "(VcVmcPmm__HEP7_121M_StartModeHybrid_3 || VcVmcPmm__HEP7_121N_StartModeHybrid12V_4)", + "SVmcPmm__HE785__sgStrtAllow_A_a": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor))", + "SVmcPmm__HE785__sgStrtAllow_AUX": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8 && Vc_Pvc_Hw_B_12VStartMotor) || (VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE785__sgStrtAllow_A_b": "((VcVmcPmm__HEP7_1240_Hybrid_Mode_Control_9 && VcVmcPmm__HEP7_1243_Isg_8))", + "SVmcPmm__HE148_Switch_AUX": "(VcVmcPmm__HEP7_1150_Gradient_estimation_2 || VcVmcPmm__HEP7_1140_Brake_1)" +} \ No newline at end of file diff --git a/tests/pybuild/reference_files/nvm_structs_ref_dcl.json b/tests/pybuild/reference_files/nvm_structs_ref_dcl.json new file mode 100644 index 0000000..dc51ea9 --- /dev/null +++ b/tests/pybuild/reference_files/nvm_structs_ref_dcl.json @@ -0,0 +1,147 @@ +[ + { + "signals": [ + { + "x_size": 1, + "type": "UInt8", + "name": "sVcDclOil_D_BadDcysMEM", + "y_size": 1 + }, + { + "x_size": 1, + "type": "UInt8", + "name": "sVcDclEem_D_MvBattChrReqCarModTrp", + "y_size": 1 + }, + { + "x_size": 5, + "type": "UInt8", + "name": "VcDclEem_D_LvBattChrReqDenial", + "y_size": 1 + }, + { + "x_size": 1, + "type": "Bool", + "name": "sVcAesMo_rt_NvmMafLrngLd1Ne1", + "y_size": 1 + } + ], + "name": "NVM_LIST_8", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": false, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": false, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [ + { + "name": "sVcAcCtrl_t_CmprRunTiNVM", + "type": "UInt32", + "x_size": 1, + "y_size": 1 + }, + { + "name": "sVcAesHw_X_VntAdpnOffs", + "type": "Float32", + "x_size": 1, + "y_size": 1 + }, + { + "name": "sVcAesMo_Ar_ArrayTest", + "type": "Float32", + "x_size": 4, + "y_size": 2 + }, + { + "name": "sVcAesMo_Ar_NvmThrAdpn", + "type": "Float32", + "x_size": 1, + "y_size": 1 + } + ], + "name": "NVM_LIST_32", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 975, + "persistent": false, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + }, + { + "signals": [], + "name": "NVM_LIST_8_PER", + "default_datatype": "UInt8", + "instanceName": "nvm_list_8_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 56, + "persistent": true, + "allowed_datatypes": [ + "Bool", + "UInt8", + "Int8" + ] + }, + { + "signals": [], + "name": "NVM_LIST_16_PER", + "default_datatype": "UInt16", + "instanceName": "nvm_list_16_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 240, + "persistent": true, + "allowed_datatypes": [ + "UInt16", + "Int16" + ] + }, + { + "signals": [ + { + "name": "sVcAcCtrl_t_Test1", + "type": "UInt32", + "x_size": 1, + "y_size": 1 + } + ], + "name": "NVM_LIST_32_PER", + "default_datatype": "UInt32", + "instanceName": "nvm_list_32_per", + "includeStart": "MemMap_SDA_START.h", + "includeStop": "MemMap_SDA_STOP.h", + "size": 190, + "persistent": true, + "allowed_datatypes": [ + "Float32", + "UInt32", + "Int32" + ] + } +] \ No newline at end of file diff --git a/tests/pybuild/reference_files/ts_test.h b/tests/pybuild/reference_files/ts_test.h new file mode 100644 index 0000000..46b8230 --- /dev/null +++ b/tests/pybuild/reference_files/ts_test.h @@ -0,0 +1,4 @@ +/* Autogenerated by build system */ +#ifndef TS_TEST_H +#define TS_TEST_H +#endif /* TS_TEST_H */ diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref.a2l b/tests/pybuild/reference_files/vcc_nvm_struct_ref.a2l new file mode 100644 index 0000000..707f029 --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref.a2l @@ -0,0 +1,117 @@ + + /begin MEASUREMENT + sVcAcCtrl_t_CmprRunTiNVM /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + ULONG /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_32" 0 + /end MEASUREMENT + + /begin MEASUREMENT + sVcAesHw_X_VntAdpnOffs /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_32" 4 + /end MEASUREMENT + + /begin MEASUREMENT + sVcAesMo_Ar_ArrayTest /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + MATRIX_DIM 4 2 1 + SYMBOL_LINK "nvm_list_32" 8 + /end MEASUREMENT + + /begin MEASUREMENT + sVcAesMo_Ar_NvmThrAdpn /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_32" 40 + /end MEASUREMENT + + /begin MEASUREMENT + sVcAesMo_rt_NvmMafLrngLd1Ne1 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + UBYTE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + BIT_MASK 0x01 + SYMBOL_LINK "nvm_list_8" 0 + /end MEASUREMENT + + /begin MEASUREMENT + sVcAcCtrl_t_Test1 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + ULONG /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_32_per" 0 + /end MEASUREMENT + + /begin COMPU_METHOD + VcNvm_1_0_0_None /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0.0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + VcNvm /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcAcCtrl_t_CmprRunTiNVM /* Identifier */ + sVcAesHw_X_VntAdpnOffs /* Identifier */ + sVcAesMo_Ar_ArrayTest /* Identifier */ + sVcAesMo_Ar_NvmThrAdpn /* Identifier */ + sVcAesMo_rt_NvmMafLrngLd1Ne1 /* Identifier */ + sVcAcCtrl_t_Test1 /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin RECORD_LAYOUT + ULONG_COL_DIRECT /* Name */ + FNC_VALUES 1 ULONG COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + FLOAT32_IEEE_COL_DIRECT /* Name */ + FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref.c b/tests/pybuild/reference_files/vcc_nvm_struct_ref.c new file mode 100644 index 0000000..4a067fd --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref.c @@ -0,0 +1,26 @@ +#include "vcc_nvm_struct.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_8 nvm_list_8; +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 nvm_list_16; +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 nvm_list_32; +#include "CVC_NVM_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_8_PER nvm_list_8_per; +#include "CVC_NVM_P_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_16_PER nvm_list_16_per; +#include "CVC_NVM_P_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_32_PER nvm_list_32_per; +#include "CVC_NVM_P_END.h" + diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref.h b/tests/pybuild/reference_files/vcc_nvm_struct_ref.h new file mode 100644 index 0000000..e87afea --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref.h @@ -0,0 +1,68 @@ +/* + * vcc_nvm_struct.h - struct for NVM signals + */ + +#ifndef VCC_NVM_STRUCT_H +#define VCC_NVM_STRUCT_H + +#include "tl_basetypes.h" +#include "CVC_NVM_START.h" +struct NVM_LIST_8 { + Bool _sVcAesMo_rt_NvmMafLrngLd1Ne1; + UInt8 unused[55]; +}; /* 1 bytes used of 56 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 { + UInt16 unused[240]; +}; /* 0 bytes used of 480 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 { + UInt32 _sVcAcCtrl_t_CmprRunTiNVM; + Float32 _sVcAesHw_X_VntAdpnOffs; + Float32 _sVcAesMo_Ar_ArrayTest[4][2]; + Float32 _sVcAesMo_Ar_NvmThrAdpn; + UInt32 unused[964]; +}; /* 44 bytes used of 3900 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_8_PER { + UInt8 unused[56]; +}; /* 0 bytes used of 56 */ +#include "CVC_NVM_P_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_16_PER { + UInt16 unused[240]; +}; /* 0 bytes used of 480 */ +#include "CVC_NVM_P_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_32_PER { + UInt32 _sVcAcCtrl_t_Test1; + UInt32 unused[189]; +}; /* 4 bytes used of 760 */ +#include "CVC_NVM_P_END.h" + +#include "PREDECL_START.h" +extern struct NVM_LIST_8 nvm_list_8; +extern struct NVM_LIST_16 nvm_list_16; +extern struct NVM_LIST_32 nvm_list_32; +extern struct NVM_LIST_8_PER nvm_list_8_per; +extern struct NVM_LIST_16_PER nvm_list_16_per; +extern struct NVM_LIST_32_PER nvm_list_32_per; +#include "PREDECL_END.h" + + +#define sVcAesMo_rt_NvmMafLrngLd1Ne1 nvm_list_8._sVcAesMo_rt_NvmMafLrngLd1Ne1 +#define sVcAcCtrl_t_CmprRunTiNVM nvm_list_32._sVcAcCtrl_t_CmprRunTiNVM +#define sVcAesHw_X_VntAdpnOffs nvm_list_32._sVcAesHw_X_VntAdpnOffs +#define sVcAesMo_Ar_ArrayTest nvm_list_32._sVcAesMo_Ar_ArrayTest +#define sVcAesMo_Ar_NvmThrAdpn nvm_list_32._sVcAesMo_Ar_NvmThrAdpn +#define sVcAcCtrl_t_Test1 nvm_list_32_per._sVcAcCtrl_t_Test1 + +#endif /* VCC_NVM_STRUCT_H */ diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.a2l b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.a2l new file mode 100644 index 0000000..2eb5bac --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.a2l @@ -0,0 +1,82 @@ + + /begin MEASUREMENT + sVcTest_t_UInt32 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + ULONG /* Datatype */ + VcNvm_1_1_0_s /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 4294967295 /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 0 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_Int16 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + SWORD /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -32768 /* LowerLimit */ + 32767 /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 4 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_UInt8 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + UBYTE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 6 + /end MEASUREMENT + + /begin COMPU_METHOD + VcNvm_1_1_0_s /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "s" /* Unit */ + COEFFS 0 1 1.0 0 0 1 + /end COMPU_METHOD + + /begin COMPU_METHOD + VcNvm_1_0_0_None /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0.0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + VcNvm /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcTest_t_UInt32 /* Identifier */ + sVcTest_t_Int16 /* Identifier */ + sVcTest_t_UInt8 /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin RECORD_LAYOUT + ULONG_COL_DIRECT /* Name */ + FNC_VALUES 1 ULONG COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + SWORD_COL_DIRECT /* Name */ + FNC_VALUES 1 SWORD COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.h b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.h new file mode 100644 index 0000000..46263e2 --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_duplicate.h @@ -0,0 +1,48 @@ +/* + * vcc_nvm_struct.h - struct for NVM signals + */ + +#ifndef VCC_NVM_STRUCT_H +#define VCC_NVM_STRUCT_H + +#include "tl_basetypes.h" +#include "CVC_NVM_START.h" +struct NVM_LIST_CRITICAL1 { + UInt32 _sVcTest_t_UInt32; + Int16 _sVcTest_t_Int16; + UInt8 _sVcTest_t_UInt8; + UInt16 unused[52]; +}; /* 7 bytes used of 112 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 { + UInt32 unused[56]; +}; /* 0 bytes used of 224 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 { + UInt16 unused[56]; +}; /* 0 bytes used of 112 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_8 { + UInt8 unused[56]; +}; /* 0 bytes used of 56 */ +#include "CVC_NVM_END.h" + +#include "PREDECL_START.h" +extern struct NVM_LIST_CRITICAL1 nvm_list_critical1; +extern struct NVM_LIST_32 nvm_list_32; +extern struct NVM_LIST_16 nvm_list_16; +extern struct NVM_LIST_8 nvm_list_8; +#include "PREDECL_END.h" + + +#define sVcTest_t_UInt32 nvm_list_critical1._sVcTest_t_UInt32 +#define sVcTest_t_Int16 nvm_list_critical1._sVcTest_t_Int16 +#define sVcTest_t_UInt8 nvm_list_critical1._sVcTest_t_UInt8 + +#endif /* VCC_NVM_STRUCT_H */ diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.a2l b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.a2l new file mode 100644 index 0000000..dce7c3c --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.a2l @@ -0,0 +1,63 @@ + + /begin MEASUREMENT + sVcTest_t_UInt32 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + ULONG /* Datatype */ + VcNvm_2_1_0_s /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 4294967295 /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 0 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_Int16 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + SWORD /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -32768 /* LowerLimit */ + 32767 /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 4 + /end MEASUREMENT + + /begin COMPU_METHOD + VcNvm_2_1_0_s /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "s" /* Unit */ + COEFFS 0 1 1.0 0 0 2 + /end COMPU_METHOD + + /begin COMPU_METHOD + VcNvm_1_0_0_None /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0.0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + VcNvm /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcTest_t_UInt32 /* Identifier */ + sVcTest_t_Int16 /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin RECORD_LAYOUT + ULONG_COL_DIRECT /* Name */ + FNC_VALUES 1 ULONG COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + SWORD_COL_DIRECT /* Name */ + FNC_VALUES 1 SWORD COLUMN_DIR DIRECT + /end RECORD_LAYOUT diff --git a/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.h b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.h new file mode 100644 index 0000000..9bc7ffc --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_struct_ref_critical_remove.h @@ -0,0 +1,46 @@ +/* + * vcc_nvm_struct.h - struct for NVM signals + */ + +#ifndef VCC_NVM_STRUCT_H +#define VCC_NVM_STRUCT_H + +#include "tl_basetypes.h" +#include "CVC_NVM_START.h" +struct NVM_LIST_CRITICAL1 { + UInt32 _sVcTest_t_UInt32; + Int16 _sVcTest_t_Int16; + UInt16 unused[53]; +}; /* 6 bytes used of 112 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 { + UInt32 unused[56]; +}; /* 0 bytes used of 224 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 { + UInt16 unused[56]; +}; /* 0 bytes used of 112 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_8 { + UInt8 unused[56]; +}; /* 0 bytes used of 56 */ +#include "CVC_NVM_END.h" + +#include "PREDECL_START.h" +extern struct NVM_LIST_CRITICAL1 nvm_list_critical1; +extern struct NVM_LIST_32 nvm_list_32; +extern struct NVM_LIST_16 nvm_list_16; +extern struct NVM_LIST_8 nvm_list_8; +#include "PREDECL_END.h" + + +#define sVcTest_t_UInt32 nvm_list_critical1._sVcTest_t_UInt32 +#define sVcTest_t_Int16 nvm_list_critical1._sVcTest_t_Int16 + +#endif /* VCC_NVM_STRUCT_H */ diff --git a/tests/pybuild/reference_files/vcc_nvm_structs_critical.c b/tests/pybuild/reference_files/vcc_nvm_structs_critical.c new file mode 100644 index 0000000..2f30cc1 --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_structs_critical.c @@ -0,0 +1,18 @@ +#include "vcc_nvm_structs_critical.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_CRITICAL1 nvm_list_critical1; +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 nvm_list_32; +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 nvm_list_16; +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_8 nvm_list_8; +#include "CVC_NVM_END.h" + diff --git a/tests/pybuild/reference_files/vcc_nvm_structs_critical.h b/tests/pybuild/reference_files/vcc_nvm_structs_critical.h new file mode 100644 index 0000000..46263e2 --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_structs_critical.h @@ -0,0 +1,48 @@ +/* + * vcc_nvm_struct.h - struct for NVM signals + */ + +#ifndef VCC_NVM_STRUCT_H +#define VCC_NVM_STRUCT_H + +#include "tl_basetypes.h" +#include "CVC_NVM_START.h" +struct NVM_LIST_CRITICAL1 { + UInt32 _sVcTest_t_UInt32; + Int16 _sVcTest_t_Int16; + UInt8 _sVcTest_t_UInt8; + UInt16 unused[52]; +}; /* 7 bytes used of 112 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 { + UInt32 unused[56]; +}; /* 0 bytes used of 224 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 { + UInt16 unused[56]; +}; /* 0 bytes used of 112 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_8 { + UInt8 unused[56]; +}; /* 0 bytes used of 56 */ +#include "CVC_NVM_END.h" + +#include "PREDECL_START.h" +extern struct NVM_LIST_CRITICAL1 nvm_list_critical1; +extern struct NVM_LIST_32 nvm_list_32; +extern struct NVM_LIST_16 nvm_list_16; +extern struct NVM_LIST_8 nvm_list_8; +#include "PREDECL_END.h" + + +#define sVcTest_t_UInt32 nvm_list_critical1._sVcTest_t_UInt32 +#define sVcTest_t_Int16 nvm_list_critical1._sVcTest_t_Int16 +#define sVcTest_t_UInt8 nvm_list_critical1._sVcTest_t_UInt8 + +#endif /* VCC_NVM_STRUCT_H */ diff --git a/tests/pybuild/reference_files/vcc_nvm_structs_critical_bosch.a2l b/tests/pybuild/reference_files/vcc_nvm_structs_critical_bosch.a2l new file mode 100644 index 0000000..fcfe5f2 --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_structs_critical_bosch.a2l @@ -0,0 +1,82 @@ + + /begin MEASUREMENT + sVcTest_t_UInt32 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + ULONG /* Datatype */ + VcNvm_2_1_0_s /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 4294967295 /* UpperLimit */ + READ_WRITE + ECU_ADDRESS 0x00000000 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_Int16 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + SWORD /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -32768 /* LowerLimit */ + 32767 /* UpperLimit */ + READ_WRITE + ECU_ADDRESS 0x00000000 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_UInt8 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + UBYTE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + ECU_ADDRESS 0x00000000 + /end MEASUREMENT + + /begin COMPU_METHOD + VcNvm_2_1_0_s /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "s" /* Unit */ + COEFFS 0 1 1.0 0 0 2 + /end COMPU_METHOD + + /begin COMPU_METHOD + VcNvm_1_0_0_None /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0.0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + VcNvm /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcTest_t_UInt32 /* Identifier */ + sVcTest_t_Int16 /* Identifier */ + sVcTest_t_UInt8 /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin RECORD_LAYOUT + ULONG_COL_DIRECT /* Name */ + FNC_VALUES 1 ULONG COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + SWORD_COL_DIRECT /* Name */ + FNC_VALUES 1 SWORD COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT diff --git a/tests/pybuild/reference_files/vcc_nvm_structs_critical_denso.a2l b/tests/pybuild/reference_files/vcc_nvm_structs_critical_denso.a2l new file mode 100644 index 0000000..46115a4 --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_structs_critical_denso.a2l @@ -0,0 +1,82 @@ + + /begin MEASUREMENT + sVcTest_t_UInt32 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + ULONG /* Datatype */ + VcNvm_2_1_0_s /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 4294967295 /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 0 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_Int16 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + SWORD /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + -32768 /* LowerLimit */ + 32767 /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 4 + /end MEASUREMENT + + /begin MEASUREMENT + sVcTest_t_UInt8 /* Name */ + "Enter a nice description of your variable here" /* LongIdentifier */ + UBYTE /* Datatype */ + VcNvm_1_0_0_None /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + nan /* LowerLimit */ + nan /* UpperLimit */ + READ_WRITE + SYMBOL_LINK "nvm_list_critical1" 6 + /end MEASUREMENT + + /begin COMPU_METHOD + VcNvm_2_1_0_s /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "s" /* Unit */ + COEFFS 0 1 1.0 0 0 2 + /end COMPU_METHOD + + /begin COMPU_METHOD + VcNvm_1_0_0_None /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "-" /* Unit */ + COEFFS 0 1 0.0 0 0 1 + /end COMPU_METHOD + + /begin FUNCTION + VcNvm /* Name */ + "" /* LongIdentifier */ + /begin LOC_MEASUREMENT + sVcTest_t_UInt32 /* Identifier */ + sVcTest_t_Int16 /* Identifier */ + sVcTest_t_UInt8 /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION + + /begin RECORD_LAYOUT + ULONG_COL_DIRECT /* Name */ + FNC_VALUES 1 ULONG COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + SWORD_COL_DIRECT /* Name */ + FNC_VALUES 1 SWORD COLUMN_DIR DIRECT + /end RECORD_LAYOUT + + /begin RECORD_LAYOUT + UBYTE_COL_DIRECT /* Name */ + FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT + /end RECORD_LAYOUT diff --git a/tests/pybuild/reference_files/vcc_nvm_structs_ref_used_positions.h b/tests/pybuild/reference_files/vcc_nvm_structs_ref_used_positions.h new file mode 100644 index 0000000..983bd7f --- /dev/null +++ b/tests/pybuild/reference_files/vcc_nvm_structs_ref_used_positions.h @@ -0,0 +1,68 @@ +/* + * vcc_nvm_struct.h - struct for NVM signals + */ + +#ifndef VCC_NVM_STRUCT_H +#define VCC_NVM_STRUCT_H + +#include "tl_basetypes.h" +#include "CVC_NVM_START.h" +struct NVM_LIST_8 { + Bool _sVcAesMo_rt_NvmMafLrngLd1Ne1; + UInt8 unused[55]; +}; /* 1 bytes used of 56 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_16 { + UInt16 unused[240]; +}; /* 0 bytes used of 480 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_32_PER { + UInt32 _sVcAcCtrl_t_Test1; + UInt32 unused[189]; +}; /* 4 bytes used of 760 */ +#include "CVC_NVM_P_END.h" + +#include "CVC_NVM_START.h" +struct NVM_LIST_32 { + UInt32 _sVcAcCtrl_t_CmprRunTiNVM; + Float32 _sVcAesHw_X_VntAdpnOffs; + Float32 _sVcAesMo_Ar_ArrayTest[4][2]; + Float32 _sVcAesMo_Ar_NvmThrAdpn; + UInt32 unused[964]; +}; /* 44 bytes used of 3900 */ +#include "CVC_NVM_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_16_PER { + UInt16 unused[240]; +}; /* 0 bytes used of 480 */ +#include "CVC_NVM_P_END.h" + +#include "CVC_NVM_P_START.h" +struct NVM_LIST_8_PER { + UInt8 unused[56]; +}; /* 0 bytes used of 56 */ +#include "CVC_NVM_P_END.h" + +#include "PREDECL_START.h" +extern struct NVM_LIST_8 nvm_list_8; +extern struct NVM_LIST_16 nvm_list_16; +extern struct NVM_LIST_32_PER nvm_list_32_per; +extern struct NVM_LIST_32 nvm_list_32; +extern struct NVM_LIST_16_PER nvm_list_16_per; +extern struct NVM_LIST_8_PER nvm_list_8_per; +#include "PREDECL_END.h" + + +#define sVcAesMo_rt_NvmMafLrngLd1Ne1 nvm_list_8._sVcAesMo_rt_NvmMafLrngLd1Ne1 +#define sVcAcCtrl_t_Test1 nvm_list_32_per._sVcAcCtrl_t_Test1 +#define sVcAcCtrl_t_CmprRunTiNVM nvm_list_32._sVcAcCtrl_t_CmprRunTiNVM +#define sVcAesHw_X_VntAdpnOffs nvm_list_32._sVcAesHw_X_VntAdpnOffs +#define sVcAesMo_Ar_ArrayTest nvm_list_32._sVcAesMo_Ar_ArrayTest +#define sVcAesMo_Ar_NvmThrAdpn nvm_list_32._sVcAesMo_Ar_NvmThrAdpn + +#endif /* VCC_NVM_STRUCT_H */ diff --git a/tests/pybuild/src_files/mdl/C.mdl b/tests/pybuild/src_files/mdl/C.mdl new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/C.mdl @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/C_par.m b/tests/pybuild/src_files/mdl/C_par.m new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/C_par.m @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSA/A/A.mdl b/tests/pybuild/src_files/mdl/SSA/A/A.mdl new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSA/A/A.mdl @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSA/A/A_par.m b/tests/pybuild/src_files/mdl/SSA/A/A_par.m new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSA/A/A_par.m @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSB/B/B.mdl b/tests/pybuild/src_files/mdl/SSB/B/B.mdl new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSB/B/B.mdl @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSB/B/B_par.m b/tests/pybuild/src_files/mdl/SSB/B/B_par.m new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSB/B/B_par.m @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSB/B/test/BB.mdl b/tests/pybuild/src_files/mdl/SSB/B/test/BB.mdl new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSB/B/test/BB.mdl @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSB/B/test/BB_par.m b/tests/pybuild/src_files/mdl/SSB/B/test/BB_par.m new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSB/B/test/BB_par.m @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSB/B1/B1.mdl b/tests/pybuild/src_files/mdl/SSB/B1/B1.mdl new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSB/B1/B1.mdl @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/mdl/SSB/B1/B1_par.m b/tests/pybuild/src_files/mdl/SSB/B1/B1_par.m new file mode 100644 index 0000000..938877a --- /dev/null +++ b/tests/pybuild/src_files/mdl/SSB/B1/B1_par.m @@ -0,0 +1 @@ +Dummy for test_copy_models. \ No newline at end of file diff --git a/tests/pybuild/src_files/src_file1.c b/tests/pybuild/src_files/src_file1.c new file mode 100644 index 0000000..0dc1278 --- /dev/null +++ b/tests/pybuild/src_files/src_file1.c @@ -0,0 +1,3 @@ +#include "src_file1.h" + +int dummy = 1; \ No newline at end of file diff --git a/tests/pybuild/src_files/src_file1.h b/tests/pybuild/src_files/src_file1.h new file mode 100644 index 0000000..47d6560 --- /dev/null +++ b/tests/pybuild/src_files/src_file1.h @@ -0,0 +1,6 @@ +#ifndef __SRC_FILE1 +#define __SRC_FILE1 + +extern int dummy; + +#endif \ No newline at end of file diff --git a/tests/pybuild/sw_cnfg.py b/tests/pybuild/sw_cnfg.py new file mode 100644 index 0000000..084a7bd --- /dev/null +++ b/tests/pybuild/sw_cnfg.py @@ -0,0 +1,1794 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Used for mocking ReadConfigSw_conf_dict in feature config and,...""" + +# Mock data +SW_DICT = { + 'CFG1': { + 'Vc_AcReg_B_CodegenPHEV': 0.0, + 'Vc_Ac_Ctrl_B_CodeGenFixDisplacementAc': 0.0, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOff': 1.0, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOn': 1.0, + }, + 'CFG2': { + 'Vc_AcReg_B_CodegenPHEV': 1.0, + 'Vc_Ac_Ctrl_B_CodeGenFixDisplacementAc': 1.0, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOff': 1.0, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOn': 1.0, + } +} + +# File data from SPM_Codeswitch_Setup_csv +SW_FILE_DICT = { + 'VED4_GENIII': { + 'NEVER_ACTIVE': 0, + 'ALWAYS_ACTIVE': 1, + 'Vc_Ac_Ctrl_B_Codegen': 0, + 'Vc_Ac_Ctrl_B_CodeGenFixDisplacementAc': 0, + 'Vc_Ac_Ctrl_B_CodeGenMecAC': 1, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOff': 0, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOn': 1, + 'Vc_Ac_Ctrl_B_CodeGenVariableDisplacementAc': 1, + 'Vc_Ac_Fan_B_Codegen': 0, + 'Vc_Ac_Ovr_B_Codegen': 0, + 'Vc_AcReg_B_CodegenPHEV': 0, + 'Vc_Aes_B_CodeGen2VNT': 1, + 'Vc_Aes_B_CodeGenBasCalDsl': 1, + 'Vc_Aes_B_CodeGenCNDILA': 1, + 'Vc_Aes_B_CodeGenDiesel': 1, + 'Vc_Aes_B_CodeGenDsl': 1, + 'Vc_Aes_B_CodeGenEChrgr': 0, + 'Vc_Aes_B_CodeGenEgr': 1, + 'Vc_Aes_B_CodeGenEgrCoolr': 0, + 'Vc_Aes_B_CodeGenEgrLongRoute': 1, + 'Vc_Aes_B_CodeGenGEP3': 0, + 'Vc_Aes_B_CodeGenGsl': 0, + 'Vc_Aes_B_CodeGenPredUpShift': 1, + 'Vc_Aes_B_CodeGenSC': 0, + 'Vc_Aes_B_CodeGenWCAC': 1, + 'Vc_Aes_Bc_B_CodeGenBaseMode5': 1, + 'Vc_Aes_Bc_B_CodeGenBaseModes': 1, + 'Vc_Aes_Bc_B_CodeGenBoostAvl': 1, + 'Vc_Aes_Bc_B_CodeGenBoostMaxRgn': 1, + 'Vc_Aes_Bc_B_CodeGenEgrCoolr': 0, + 'Vc_Aes_Ch_B_CodeGenCcv': 0, + 'Vc_Aes_Ch_B_CodeGenLocalThrMon': 0, + 'Vc_Aes_Ch_B_CodeGenThrIdleMax': 1, + 'Vc_Aes_Ch_B_CodeGenThrMan': 0, + 'Vc_Aes_Co_B_CodeGenDrvModIdleNvh': 1, + 'Vc_Aes_Co_B_CodeGenDrvModSignal': 0, + 'Vc_Aes_Co_B_CodeGenIntkFil': 0, + 'Vc_Aes_Co_B_CodeGenMafBasCmp': 0, + 'Vc_Aes_Co_B_CodeGenMafPlsCmp': 0, + 'Vc_Aes_Co_B_CodeGenOscr': 0, + 'Vc_Aes_Co_B_CodeGenPresAdpn': 0, + 'Vc_Aes_Ct_B_CodeGenBoostCtrl': 0, + 'Vc_Aes_Ct_B_CodeGenLoadTran': 1, + 'Vc_Aes_Ct_B_CodeGenTqTran': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst1AmbP': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst1Bst2P': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst1IntkMapP': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst2AmbP': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst2IntkMapP': 1, + 'Vc_Aes_EgrM_B_CodeGenEgr': 0, + 'Vc_Aes_EgrM_B_CodeGenEgrClr': 0, + 'Vc_Aes_EgrM_B_CodeGenTotalEGRMon': 1, + 'Vc_Aes_Hw_B_CodeGenAirBypVlv': 0, + 'Vc_Aes_Hw_B_CodeGenVntGvnr': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPEgrClrMon': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPEgrSysMon': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPOverTempMon': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrng': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrngLam': 1, + 'Vc_Aes_Mo_B_CodeGenMafLrngNvm': 0, + 'Vc_Aes_Mo_B_CodeGenVirtSnsrCylAdj': 0, + 'Vc_Aes_Obd_B_CodeGenExhP': 1, + 'Vc_Aes_Obd_B_CodeGenMaf': 1, + 'Vc_Aes_Osc_B_CodeGenOscr': 1, + 'Vc_Aes_Ps_B_CodeGenPresSpThr': 1, + 'Vc_Aes_Rx_B_CodeGenDrvModSignal': 1, + 'Vc_Aes_Sc_B_CodeGenISG': 0, + 'Vc_Aes_Snsr_B_CodeGenIntkFil': 0, + 'Vc_Aes_Snsr_B_CodeGenMafBasCmp': 1, + 'Vc_Aes_Snsr_B_CodeGenMafPlsCmp': 1, + 'Vc_Aes_Snsr_B_CodeGenPresAdpn': 1, + 'Vc_Aes_Sp_B_BoostScav': 0, + 'Vc_Aes_Sp_B_CodeGenBoostAvl': 0, + 'Vc_Aes_Sp_B_CodeGenBoostOperMod': 1, + 'Vc_Aes_Sp_B_CodeGenBoostProtnT': 0, + 'Vc_Aes_Sp_B_CodeGenBoostSpMan': 0, + 'Vc_Aes_Sp_B_CodeGenCylReqMaxTq': 0, + 'Vc_Aes_Sp_B_CodeGenCylReqMin': 0, + 'Vc_Aes_Sp_B_CodeGenPresOperMod': 1, + 'Vc_Aes_Sp_B_CodeGenRvsFlowOvlp': 0, + 'Vc_Aes_Sp_B_CodeGenTargetPres': 0, + 'Vc_Aes_Sp_B_CodeGenVolmcNom': 0, + 'Vc_Aes_Srg_B_CodeGenSrgOscDetn': 1, + 'Vc_Aes_StatPresM_B_CodeGenAmbP': 1, + 'Vc_Aes_StatPresM_B_CodeGenBst1P': 1, + 'Vc_Aes_StatPresM_B_CodeGenBst2P': 1, + 'Vc_Aes_StatPresM_B_CodeGenElcmP': 0, + 'Vc_Aes_StatPresM_B_CodeGenExhaustP': 1, + 'Vc_Aes_StatPresM_B_CodeGenIntkMapP': 1, + 'Vc_Aes_SupM_B_CodeGenSprChrg': 0, + 'Vc_Aes_Tc_B_CodeGen2TMdl': 1, + 'Vc_Aes_Tc_B_CodeGenConvBoostCtl': 0, + 'Vc_Aes_Tc_B_CodeGenConvCtrl': 0, + 'Vc_Aes_Tc_B_CodeGenHPCmprByp': 1, + 'Vc_Aes_Tc_B_CodeGenModelBasedCtl': 0, + 'Vc_Aes_Tc_B_CodeGenStatFF': 0, + 'Vc_Aes_Tc_B_ExhPresFb': 1, + 'Vc_Aes_TrboM_B_CodeGen2Trbo': 1, + 'Vc_Aes_TrboM_B_CodeGenBstPeak': 1, + 'Vc_Aes_TrboM_B_CodeGenCACP': 0, + 'Vc_Aes_TrboM_B_CodeGenLPPres': 1, + 'Vc_Aes_TrboM_B_CodeGenPowerPulse': 0, + 'Vc_Aes_TrboM_B_CodeGenTrbo': 1, + 'Vc_Aes_TrboM_B_CodeGenTrboMode06': 1, + 'Vc_Aes_TrboM_B_CodeGenTrboOverSpd': 0, + 'Vc_Aes_TrboM_B_CodeGenVacVnt': 0, + 'Vc_Aes_Ve_B_CodeGenRvsFlowOvlp': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMapDsl': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMapGsl': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMdl': 0, + 'Vc_Aes_Vnt_B_CodeGenVntGvnr': 0, + 'Vc_At_Te_B_CodeGenTeScr2': 0, + 'Vc_B_CodeGen_7DCT_Gbx': 1, + 'Vc_B_CodeGen_AW_Gbx': 1, + 'Vc_B_CodeGen_EuCD_Platform': 0, + 'Vc_B_CodeGen_SPA_Platform': 1, + 'Vc_B_CodeGen25LT': 0, + 'Vc_B_CodeGen7DCT': 1, + 'Vc_B_CodeGenAccStopAndGo': 1, + 'Vc_B_CodeGenBrakeFootOnOffPedal': 1, + 'Vc_B_CodeGenCGEA': 0, + 'Vc_B_CodeGenCMA': 0, + 'Vc_B_CodeGenConvImpTq': 1, + 'Vc_B_CodegenDISI': 0, + 'Vc_B_CodeGenDv6c': 0, + 'Vc_B_CodeGenECLUTCH': 0, + 'Vc_B_CodegenEcoMode': 1, + 'Vc_B_CodeGenEDC17': 0, + 'Vc_B_CodeGenEfad': 0, + 'Vc_B_CodegenExtAsIntervent': 1, + 'Vc_B_CodeGenGearBoxLoss': 1, + 'Vc_B_CodeGenGtdi': 0, + 'Vc_B_CodeGenI5T': 0, + 'Vc_B_CodegenIdleCoast': 1, + 'Vc_B_CodegenLowRangeMode': 0, + 'Vc_B_CodeGenOilTemp': 0, + 'Vc_B_CodeGenPEV': 0, + 'Vc_B_CodeGenPnG': 1, + 'Vc_B_CodeGenReverseSwitch': 0, + 'Vc_B_CodeGenSI6': 0, + 'Vc_B_CodeGenSPA': 1, + 'Vc_B_CodegenSportMode': 1, + 'Vc_B_CodeGenTrafficSignSpeed': 0, + 'Vc_B_CodeGenVEA': 1, + 'Vc_B_CodeGenVED4': 1, + 'Vc_B_CodeGenVEP4': 0, + 'Vc_B_PistonCoolingRename': 1, + 'Vc_D_CodegenByPass': 1, + 'Vc_D_CodegenHev': 1, + 'Vc_D_CodegenHev12VStarter': 0, + 'Vc_D_CodegenPhevUH61inX1': 0, + 'Vc_Dcl_B_CodeGenOilLevel': 0, + 'Vc_Dcl_B_EMSTorque': 0, + 'Vc_Dcl_B_EuCDC1MCA': 0, + 'Vc_Dcl_B_Hybrid': 0, + 'Vc_Dcl_B_SPA': 1, + 'Vc_Dcl_B_SPMTorque': 1, + 'Vc_Dcl_B_VED': 1, + 'Vc_Dcl_B_VEP': 0, + 'Vc_Dcl_Dpf_B_CodeGenDiffPressHistogram': 0, + 'Vc_Dcl_Dpf_B_CodeGenRegenCauseHistogram': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenInjSum': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenMilage': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenOnOff': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenTime': 1, + 'Vc_Dcl_Dpf_B_CodeGenSootMass': 1, + 'Vc_Dcl_Dsl_B_CodeGenBoostAir': 0, + 'Vc_Dcl_Dsl_B_CodeGenHeatProtection': 0, + 'Vc_Dcl_Dsl_B_CodeGenInjectorSystem': 0, + 'Vc_Dcl_Dsl_B_CodeGenThermalLoading': 0, + 'Vc_Dcl_IcPnG_B_CodeGenIdleCoast': 0, + 'Vc_Dcl_IcPnG_B_CodeGenPnG': 0, + 'Vc_Dcl_Iupr_B_CATM': 1, + 'Vc_Dcl_Iupr_B_EVAP': 1, + 'Vc_Dcl_Iupr_B_Markow': 0, + 'Vc_Dcl_Iupr_B_MOXH': 1, + 'Vc_Dcl_Iupr_B_MOXT': 1, + 'Vc_Dcl_Iupr_B_StContTrq': 1, + 'Vc_Dcl_Iupr_B_StTrq': 0, + 'Vc_Dcl_Iupr_B_UOXS': 1, + 'Vc_Dcl_Iupr_B_VehSpd': 0, + 'Vc_Dcl_Pc_B_CodeGenPC': 0, + 'Vc_Dcl_Phev_B_IceInhibitedStop': 1, + 'Vc_Dcl_Phev_B_IceRunningPercentage': 1, + 'Vc_Dcl_Phev_B_IceSystemInducedStarts': 1, + 'Vc_Dcl_Phev_B_ISG': 1, + 'Vc_Dcl_Phev_B_LOS': 1, + 'Vc_Dcl_Phev_B_ModeManager': 0, + 'Vc_Dcl_Phev_B_ModeManagerSPA': 1, + 'Vc_Dcl_Phev_B_PHEV': 0, + 'Vc_Dcl_Phev_B_RunDry': 1, + 'Vc_Dcl_Phev_B_TorqueManager': 1, + 'Vc_Dcl_Phev_B_VehSpd': 1, + 'Vc_Dcl_Pt_B_CodeGemPurgingTime': 0, + 'Vc_Dcl_Pt_B_CodeGenCatTempHistogram': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelCutHist': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelMassIncrease': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelMassLoss': 0, + 'Vc_Dcl_Pt_B_CodeGenLowCatTemp': 0, + 'Vc_Dcl_Pt_B_CodeGenLVGStartHist': 0, + 'Vc_Dcl_Pt_B_CodeGenMisfireHist': 0, + 'Vc_Dcl_Pt_B_KnockCtrlAdaptTime': 0, + 'Vc_Dcl_Soot_B_CodeGenDpfRegenDuration': 1, + 'Vc_Dcl_Soot_B_CodeGenDpfRegenMileage': 1, + 'Vc_Dcl_Soot_B_CodeGenEmCoMode': 1, + 'Vc_Dcl_Soot_B_CodeGenEoNoxModel': 1, + 'Vc_Dcl_Soot_B_CodeGenGlowTemp': 1, + 'Vc_Dcl_Soot_B_CodeGenLntNoxConcentration': 1, + 'Vc_Dcl_Soot_B_CodeGenPowerPulse': 1, + 'Vc_Dcl_Soot_B_CodeGenScrAdaption': 1, + 'Vc_Dcl_Soot_B_CodeGenScrAgingSeverity': 1, + 'Vc_Dcl_Soot_B_CodeGenScrAmmonia': 1, + 'Vc_Dcl_Soot_B_CodeGenScrDef': 1, + 'Vc_Dcl_Soot_B_CodeGenScrNoxConcentration': 1, + 'Vc_Dcl_Soot_B_CodeGenScrRde': 1, + 'Vc_Dcl_Soot_B_CodeGenScrTemp': 1, + 'Vc_Dcl_Soot_B_CodeGenSoxLoad': 1, + 'Vc_Dcl_Ss_B_CodeGenChangeOfMind': 0, + 'Vc_Dcl_Ss_B_CodeGenDieselStopStart': 0, + 'Vc_Dcl_Ss_B_CodeGenEgRailPressTempTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgRailPressureAtSS': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStartAmbPressSS': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStartTempTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopLoadTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopPosition': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopTimeSS': 0, + 'Vc_Dcl_Ss_B_CodeGenHistory': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStart': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStop': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStopDsl': 1, + 'Vc_Dcl_Ss_B_CodeGenStartCounts': 1, + 'Vc_Dcl_Ss_B_CodeGenStopIntakePressure': 0, + 'Vc_Dcl_Ss_B_CodeGenSystemStart': 1, + 'Vc_Dcl_Ss_B_CodeGenTempIgnOn': 0, + 'Vc_Dcl_Ss_B_CodeGenTimeToDriveEngagedAutomatic': 0, + 'Vc_Dcl_Strt_B_CodeGenVEA': 1, + 'Vc_Dcl_Vu1_B_CodeGenAmbTempAmbPressHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenCanBusHEVOff': 0, + 'Vc_Dcl_Vu1_B_CodeGenCanBusOff': 1, + 'Vc_Dcl_Vu1_B_CodeGenDCLRemoteStart': 1, + 'Vc_Dcl_Vu1_B_CodeGenDrCycle': 1, + 'Vc_Dcl_Vu1_B_CodeGenEgStartTempAmbHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenEngClntTemp': 1, + 'Vc_Dcl_Vu1_B_CodeGenGPF': 0, + 'Vc_Dcl_Vu1_B_CodeGenI5Ttest': 0, + 'Vc_Dcl_Vu1_B_CodeGenIdleCoast': 1, + 'Vc_Dcl_Vu1_B_CodeGenPedalActiveTime': 1, + 'Vc_Dcl_Vu1_B_CodeGenPowertrainModeHistogram': 0, + 'Vc_Dcl_Vu1_B_CodeGenShiftProt': 0, + 'Vc_Dcl_Vu1_B_CodeGenSoakHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenTakeOffGear': 0, + 'Vc_Dcl_Vu1_B_CodeGenTempHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenTorqueMonitoring': 1, + 'Vc_Dcl_Vu1_B_CodeGenTotFuelMass': 0, + 'Vc_Dcl_Vu1_B_CodeGenTrailerCnt': 1, + 'Vc_Dcl_Vu1_B_CodeGenTrimCnt': 0, + 'Vc_Dcl_Vu1_B_ModeManagerSPA': 1, + 'Vc_Dcl_Vu2_B_CodeGenDistance': 1, + 'Vc_Dcl_Vu2_B_CodeGenEMSTorque': 0, + 'Vc_Dcl_Vu2_B_CodeGenEnergy': 1, + 'Vc_Dcl_Vu2_B_CodeGenFuel': 1, + 'Vc_Dcl_Vu2_B_CodeGenLoadRpmHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenLoadRpmSteadyHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenModelTorque': 1, + 'Vc_Dcl_Vu2_B_CodeGenRefuel': 0, + 'Vc_Dcl_Vu2_B_CodeGenSpeedLimitVehSpeedHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehAccHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehSpeedHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehSpeedSteadyHistogram': 1, + 'Vc_Dcl_Vu2_B_DcyTimeWithHighOilTemp': 1, + 'Vc_Dcl_Vu2_B_EngOilTemp': 1, + 'Vc_Dcl_Vu2_B_OilDilution': 1, + 'Vc_Dcl_Vu2_B_OilLvlVsMileageSinceLastService': 1, + 'Vc_Dcl_Vu2_B_OilPressureVsTorque': 1, + 'Vc_Dcl_Vu2_B_OilTempAtStartVsDrivCycleTime': 1, + 'Vc_De_As_B_CodegenOldGain': 0, + 'Vc_De_Da_B_Codegen': 1, + 'Vc_De_Da_B_CodeGenEcoGrade': 0, + 'Vc_De_Da_B_CodegenEcoGrDenso': 1, + 'Vc_De_Da_B_CodegenEcoGrOther': 0, + 'Vc_De_Da_B_CodeGenExtRng': 1, + 'Vc_De_Da_B_CodeGenPerfMeter': 0, + 'Vc_De_Da_B_CodeGenRefDrv': 1, + 'Vc_De_Dmm_CodeGenAT': 1, + 'Vc_De_Dmm_CodeGenFSiD': 1, + 'Vc_De_Dmm_CodeGenFSiN': 1, + 'Vc_De_Dmm_CodeGenMT': 1, + 'Vc_De_Dmm_CodeGenSiD': 1, + 'Vc_De_Dmm_CodeGenSiG': 1, + 'Vc_De_Dmm_CodeGenSiN': 1, + 'Vc_De_Dmm_CodeGenSteerActive': 1, + 'Vc_De_Gsi_B_Codegen': 1, + 'Vc_De_Gsi_B_CodegenCoolshift': 1, + 'Vc_De_PnG_B_CodeGenGlideTimeModel': 0, + 'Vc_De_Scl_B_CodeGenASL': 1, + 'Vc_De_Scl_B_CodeGenNewSetSpeed': 1, + 'Vc_De_Scl_B_CodeGenOldSetSpeed': 0, + 'Vc_De_Scl_B_CodeGenTSSL': 0, + 'Vc_De_Tfr_B_Codegen2Maps': 0, + 'Vc_De_Tfr_B_Codegen4Maps': 1, + 'Vc_De_Tfr_B_Codegen6Maps': 0, + 'Vc_De_Tfr_B_CodegenAccPedRcf': 1, + 'Vc_De_Tfr_B_CodegenConvComp': 0, + 'Vc_De_Tfr_B_CodegenForceMap': 1, + 'Vc_De_Tfr_B_CodegenHDC': 1, + 'Vc_De_Tfr_B_CodegenHDCTOS': 0, + 'Vc_De_Tfr_B_CodegenHighAltMaps': 0, + 'Vc_De_Tfr_B_CodegenIdleSpeedMod': 1, + 'Vc_De_Tfr_B_CodegenLowRangeMode': 0, + 'Vc_De_Tfr_B_CodegenMaxTrqAdapt': 1, + 'Vc_De_Tfr_B_CodegenNoHDCTOS': 0, + 'Vc_De_Tfr_B_CodeGenPedalTrim': 0, + 'Vc_De_Tfr_B_CodegenPedMapMult': 0, + 'Vc_De_Tfr_B_CodegenTqMax': 0, + 'Vc_Debug_B_CodeGenCGEA': 0, + 'Vc_Debug_B_CodeGenLevel1': 1, + 'Vc_Debug_B_CodeGenLevel2': 1, + 'Vc_Debug_B_CodeGenLevel3': 1, + 'Vc_Debug_B_CodeGenLevel4': 1, + 'Vc_Debug_B_CodeGenLevel5': 0, + 'Vc_Dia_Dcl_B_CodeGenAmbTempAmbPressHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenCanBusOff': 0, + 'Vc_Dia_Dcl_B_CodeGenCPSDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenCustomConfigDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenDiffPressHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenDPFDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenEgStartTempAmbHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenHistory': 0, + 'Vc_Dia_Dcl_B_CodeGenICEDieselDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenICEPetrolDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenInhibitStart': 0, + 'Vc_Dia_Dcl_B_CodeGenInhibitStop': 0, + 'Vc_Dia_Dcl_B_CodeGenLoadRpmHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenLoadRpmSteadyHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenPedalActiveTime': 0, + 'Vc_Dia_Dcl_B_CodeGenPistonCoolingDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenPowertrainModeHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenPwrTrainCoolingSystemDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenCauseHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenInjSum': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenMilage': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenOnOff': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenTime': 0, + 'Vc_Dia_Dcl_B_CodeGenScavengingDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSoakHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenSootMass': 0, + 'Vc_Dia_Dcl_B_CodeGenStartCounts': 0, + 'Vc_Dia_Dcl_B_CodeGenStopStartDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSuperChargerDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSystemStart': 0, + 'Vc_Dia_Dcl_B_CodeGenTempHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenTotFuelMass': 0, + 'Vc_Dia_Dcl_B_CodeGenVehSpeedHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenVehSpeedSteadyHistogram': 0, + 'Vc_DIDApi_Enable': 1, + 'Vc_Dtc_Ajc_B_CodegenCcCancel': 1, + 'Vc_Dtc_Ajc_B_CodegenDpBase': 0, + 'Vc_Dtc_Ajc_B_CodegenDpBaseLPFilter': 0, + 'Vc_Dtc_Ajc_B_CodegenDpClutch': 1, + 'Vc_Dtc_Ajc_B_CodegenDpRegenGain': 1, + 'Vc_Dtc_Ajc_B_CodegenDpSportMode': 1, + 'Vc_Dtc_Ajc_B_CodegenDpTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenDpZeroCrossComp': 1, + 'Vc_Dtc_Ajc_B_CodegenLowTrqDetect': 1, + 'Vc_Dtc_Ajc_B_CodegenNewAjc': 0, + 'Vc_Dtc_Ajc_B_CodegenTiAccPedComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiAccPedRate': 1, + 'Vc_Dtc_Ajc_B_CodegenTiAtmoPres': 1, + 'Vc_Dtc_Ajc_B_CodegenTiConvComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiConvLim': 1, + 'Vc_Dtc_Ajc_B_CodegenTiEGTGain': 1, + 'Vc_Dtc_Ajc_B_CodegenTiLP': 1, + 'Vc_Dtc_Ajc_B_CodegenTiOverrunGain': 0, + 'Vc_Dtc_Ajc_B_CodegenTiSportMode': 1, + 'Vc_Dtc_Ajc_B_CodegenTiTemp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenTiTqRsv': 0, + 'Vc_Dtc_Ajc_B_CodegenTiZeroCrossComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenTrailerLim': 0, + 'Vc_Dtc_As_B_Codegen6thOrderFilt_Ndiff': 0, + 'Vc_Dtc_Atf_B_CodeGenAcCut': 0, + 'Vc_Dtc_Atf_B_CodeGenAltCut': 0, + 'Vc_Dtc_Atf_B_CodeGenCGEA': 0, + 'Vc_Dtc_Cta_B_CodegenAT': 1, + 'Vc_Dtc_Cta_B_CodegenBTL': 0, + 'Vc_Dtc_Cta_B_CodegenInertia': 1, + 'Vc_Dtc_Cta_B_CodegenMT': 1, + 'Vc_Dtc_Cta_B_CodegenShaftProt': 1, + 'Vc_Dtc_Dc_B_CodegenAT': 1, + 'Vc_Dtc_Esc_B_CodegenAT': 1, + 'Vc_Dtc_Esc_B_CodegenMonAT': 1, + 'Vc_Dtc_Esc_B_CodegenMonPS': 0, + 'Vc_Dtc_Esc_B_CodegenMT': 1, + 'Vc_Dtc_Ffl_B_CodegenFfl': 1, + 'Vc_Dtc_Ffl_B_CodegenFflInertia': 0, + 'Vc_Dtc_Isc_B_CodegenPIDBase': 0, + 'Vc_Dtc_Isc_B_CodegenTorqueReserve': 0, + 'Vc_Dtc_Rct_B_CodegenCtr': 1, + 'Vc_Dtc_Rct_B_CodegenInertiaCmp': 1, + 'Vc_Dtc_Rct_B_CodegenMT': 1, + 'Vc_Dtc_Rct_B_CodegenPS': 0, + 'Vc_Dtc_Tc_B_CodegenOilTorqueLimit': 1, + 'Vc_Dtc_Tc_B_CodegenTqRsv': 1, + 'Vc_Dtc_Tc_B_CodgenACTrqRsvReq': 1, + 'Vc_Emi_Gpf_B_CodeGenSelIf': 0, + 'Vc_Ext_In_B_CanMod': 1, + 'Vc_Ext_In_B_CodeGenASLTestButton': 0, + 'Vc_Ext_In_B_CodeGenHack': 0, + 'Vc_Ext_In_B_PhevHighIdle': 0, + 'Vc_Ext_In_B_VEATestinSI6': 0, + 'Vc_Ext_Out_B_CodeGenAccDistCtlActv': 0, + 'Vc_Ext_Out_B_CodeGenAesVEAX0b': 1, + 'Vc_Ext_Out_B_CodeGenASLUseCcLamp': 0, + 'Vc_Ext_Out_B_CodegenVEA': 1, + 'Vc_ExtVar_B_CodeGenCGEA': 0, + 'Vc_ExtVar_B_CodeGenOilLevSens': 1, + 'Vc_ExtVar_B_CodeGenRegenCharge': 0, + 'Vc_ExtVar_B_CodeGenTOC': 0, + 'Vc_Fsd_Pc_B_CodeGenAntiClogging': 0, + 'Vc_Ftiv_Mon_B_Ftiv': 0, + 'Vc_Fuel_Ctrl_B_CodeGenFuDev': 1, + 'Vc_Fuel_Ctrl_B_CodeGenHeatFu': 1, + 'Vc_Fuel_Ctrl_B_CodeGenMonVap': 0, + 'Vc_Ign_B_CodeGen4CylLogic': 1, + 'Vc_Ign_B_CodeGenPetrolEgr': 0, + 'Vc_Lam_B_CodeGenLVGAct': 0, + 'Vc_Lin_CptM_B_Alternator12V': 1, + 'Vc_Lin_CptM_B_EDWaterPump': 0, + 'Vc_Lin_CptM_B_ElAC': 0, + 'Vc_Lin_CptM_B_EWaterPump': 0, + 'Vc_Lin_CptM_B_GrillShutter': 1, + 'Vc_Lin_CptM_B_SPA': 1, + 'Vc_Lin_CptM_B_SpoilerShutter': 1, + 'Vc_Lin_CptM_B_VEP': 0, + 'Vc_Lin_CptM_B_VEP315H': 0, + 'Vc_NewDiagnosticCoreIF': 1, + 'Vc_Nvm_B_CodeGenNvmSync': 0, + 'Vc_Nvm_B_CodeGenNvmSyncDebug': 0, + 'Vc_Nvm_Codegen': 1, + 'Vc_Obd_Cmn_B_CodeGenAmbT': 1, + 'Vc_Obd_Cmn_B_CodeGenBoostT': 1, + 'Vc_Obd_Cmn_B_CodeGenBoostT2': 0, + 'Vc_Obd_Cmn_B_CodeGenCisgT': 0, + 'Vc_Obd_Cmn_B_CodeGenClntT': 1, + 'Vc_Obd_Cmn_B_CodeGenEcmInit': 0, + 'Vc_Obd_Cmn_B_CodeGenInitReq': 1, + 'Vc_Obd_Cmn_B_CodeGenInManiT': 1, + 'Vc_Obd_Cmn_B_CodeGenIntkT': 1, + 'Vc_Obd_Cmn_B_CodeGenLtClntWcacT': 1, + 'Vc_Obd_Cmn_B_CodeGenObdExe': 1, + 'Vc_Obd_Cmn_B_CodeGenOilT': 1, + 'Vc_Obd_Cmn_B_CodeGenPowerPulseT': 1, + 'Vc_Obd_Cmn_B_CodeGenPreHeatDet': 1, + 'Vc_Obd_Cmn_B_CodeGenTempAve': 1, + 'Vc_Obd_Gpf_B_CodeGenSelIf': 0, + 'Vc_Obd_Sch_B_ObdSch': 0, + 'Vc_Oil_Lvl_B_CodeGenPHEV': 0, + 'Vc_Oil_Lvl_B_CodeGenStck': 1, + 'Vc_Oil_Lvl_B_CodeGenVEA': 1, + 'Vc_Oil_Pr_B_CodeGenPIDCtrl': 0, + 'Vc_Oil_Pr_B_CodeGenResetCtrl': 0, + 'Vc_Oil_Pr_B_CodeGenVEP': 0, + 'Vc_Oil_Pr_B_CodeGenVvtPwmBst': 0, + 'Vc_Oil_PrMon_B_CodeGen2ModOilPmp': 1, + 'Vc_Pem_Alc_B_Codegen_AcCut': 1, + 'Vc_Pem_Alc_B_Codegen_AltCut': 1, + 'Vc_Pem_Alc_B_Codegen_Controller': 0, + 'Vc_Pem_Alc_B_CodegenDpfRegen': 1, + 'Vc_Pem_Alc_B_CodegenFastCat': 1, + 'Vc_Pem_Alc_B_CodegenStart': 1, + 'Vc_Ppm_B_CodegenRemoteStart': 1, + 'Vc_Ppm_Imob_B_ImobSkipAllowed': 1, + 'Vc_Ppm_Psm_B_CodegenKERS': 1, + 'Vc_Ppm_Psm_D_CodegenSysRly': 1, + 'Vc_Ppm_Rc_B_Glow': 1, + 'Vc_Ppm_St_B_CodeGenEmsPowerPackStatus': 0, + 'Vc_Ppm_St_B_CodeGenIntIceStatus': 0, + 'Vc_Pvc_Hw_B_12VStartMotor': 1, + 'Vc_Pvc_Hw_B_AT': 1, + 'Vc_Pvc_Hw_B_Awd': 1, + 'Vc_Pvc_Hw_B_Bev': 0, + 'Vc_Pvc_Hw_B_Diesel': 1, + 'Vc_Pvc_Hw_B_DualClutchGbx': 0, + 'Vc_Pvc_Hw_B_DualErad': 0, + 'Vc_Pvc_Hw_B_EClutch': 0, + 'Vc_Pvc_Hw_B_Efad': 0, + 'Vc_Pvc_Hw_B_Erad': 0, + 'Vc_Pvc_Hw_B_Gep3Gen1': 0, + 'Vc_Pvc_Hw_B_HVSystem': 0, + 'Vc_Pvc_Hw_B_Isg': 1, + 'Vc_Pvc_Hw_B_ManualClutch': 1, + 'Vc_Pvc_Hw_B_MT': 1, + 'Vc_Pvc_Hw_B_MVSystem': 1, + 'Vc_Pvc_Hw_B_Petrol': 0, + 'Vc_Pvc_Hw_B_RangeExtender': 0, + 'Vc_Pvc_Hw_B_TqConverterGbx': 1, + 'Vc_Pvc_Hw_B_VeaGen1': 0, + 'Vc_Pvc_Hw_B_VeaGen2': 0, + 'Vc_Pvc_Hw_B_VeaGen3': 1, + 'Vc_Pvc_Sw_B_IdleCoast': 1, + 'Vc_Pvc_Sw_B_StopStart': 1, + 'Vc_Reg_Ch_B_CodegenAltCut': 1, + 'Vc_Reg_Ch_B_CodegenCostEms': 1, + 'Vc_Reg_Ch_B_CodegenCostSpm': 0, + 'Vc_Reg_Ch_B_CodeGenDID': 1, + 'Vc_Reg_Ch_B_CodegenDpfRegen': 1, + 'Vc_Reg_Ch_B_CodegenFastCat': 1, + 'Vc_Reg_Ch_B_CodegenFuelpumpBoost': 1, + 'Vc_Reg_Ch_B_CodegenInjComp': 1, + 'Vc_Sc_Dep_B_CodeGenDepPropAllowed': 1, + 'Vc_Sc_Dep_B_CodegenEngPosition': 0, + 'Vc_Sc_Dep_B_GenDepAccPedalPosition': 1, + 'Vc_Sc_Dep_B_UseEMSClutchPedalPosition': 0, + 'Vc_Sc_Feh_B_HEP7': 0, + 'Vc_Sc_Feh_B_HRE': 0, + 'Vc_Sc_In_RegenByPaddles': 0, + 'Vc_Sp_B_CruiseDownHill': 0, + 'Vc_Sp_B_DriverEvaluator': 1, + 'Vc_Sp_B_FanRequest': 0, + 'Vc_Sp_B_GLMMonitor': 0, + 'Vc_Sp_B_GradeEstimator': 0, + 'Vc_Sp_B_HEV': 0, + 'Vc_Sp_B_IntermediateGear': 1, + 'Vc_Sp_B_LTS': 1, + 'Vc_Sp_B_OpenLUEngSpeed': 1, + 'Vc_Sp_B_PredictiveUpShift': 1, + 'Vc_Sp_B_SportInit': 1, + 'Vc_Sp_B_TransMode': 1, + 'Vc_Tc_Dir_B_CodeGenElectcPrndCtrl': 0, + 'Vc_Temp_StkM_B_CodeGenBoost': 1, + 'Vc_Temp_StkM_B_CodeGenBoostT2': 0, + 'Vc_Temp_StkM_B_CodeGenClnt': 1, + 'Vc_Temp_StkM_B_CodeGenInMani': 1, + 'Vc_Temp_StkM_B_CodeGenLtClntWcacT': 1, + 'Vc_Temp_StkM_B_CodeGenMaf': 1, + 'Vc_Temp_StkM_B_CodeGenPowerPulseT': 0, + 'Vc_Temp_ThM_B_CodeGenThms': 0, + 'Vc_Tm_Af_B_CodeGenLnrAirFlowCalcn': 0, + 'Vc_Tm_Af_B_CodeGenMapAirFlowCalcn': 1, + 'Vc_Tm_Af_B_CodeGenMovCtrDenso': 1, + 'Vc_Tm_Af_B_CodeGenShttrSeqCtrl': 1, + 'Vc_Tm_Af_B_CodeGenShttrSyncCtrl': 1, + 'Vc_Tm_Efl_B_CodeGenAuxWtrPmpReqHandler': 1, + 'Vc_Tm_Efl_B_CodeGenClntFlwFb': 1, + 'Vc_Tm_Efl_B_CodeGenClntFlwRequestHandler': 0, + 'Vc_Tm_Efl_B_CodeGenClntSetpoint': 0, + 'Vc_Tm_Efl_B_CodeGenCwpHvac': 1, + 'Vc_Tm_Efl_B_CodeGenEgrPmpHandler': 1, + 'Vc_Tm_Efl_B_CodeGenEwpRly': 0, + 'Vc_Tm_Efl_B_CodeGenRadClntFlowRequest': 0, + 'Vc_Tm_Efl_B_CodeGenSpoilerShutter': 1, + 'Vc_Tm_Efl_B_CodeGenThermostatOpenRequest': 0, + 'Vc_Tm_Efl_B_CodeGenValveHandler': 0, + 'Vc_Tm_Efl_B_CodeGenWtrPmpAftRun': 0, + 'Vc_Trq_B_CodeGenMaxNoBoost': 0, + 'Vc_Trq_Req_B_CodeGenTrqDlyTCM': 0, + 'Vc_Vmc_Ajc_B_CodegenCcCancel': 1, + 'Vc_Vmc_Ajc_B_CodegenDpBase': 0, + 'Vc_Vmc_Ajc_B_CodegenDpBaseLPFilter': 0, + 'Vc_Vmc_Ajc_B_CodegenDpClutch': 1, + 'Vc_Vmc_Ajc_B_CodegenDpRegenGain': 1, + 'Vc_Vmc_Ajc_B_CodegenDpSlowFast': 1, + 'Vc_Vmc_Ajc_B_CodegenDpSlowFast12Maps': 0, + 'Vc_Vmc_Ajc_B_CodegenDpSportMode': 1, + 'Vc_Vmc_Ajc_B_CodegenDpTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenDpZeroCrossComp': 1, + 'Vc_Vmc_Ajc_B_CodegenLowTrqDetect': 1, + 'Vc_Vmc_Ajc_B_CodegenTiAccPedRate': 1, + 'Vc_Vmc_Ajc_B_CodegenTiAtmoPres': 1, + 'Vc_Vmc_Ajc_B_CodegenTiConvComp': 1, + 'Vc_Vmc_Ajc_B_CodegenTiConvLim': 1, + 'Vc_Vmc_Ajc_B_CodegenTiEGTGain': 1, + 'Vc_Vmc_Ajc_B_CodegenTiLP': 1, + 'Vc_Vmc_Ajc_B_CodegenTiOverrunGain': 0, + 'Vc_Vmc_Ajc_B_CodegenTiSlowFast': 1, + 'Vc_Vmc_Ajc_B_CodegenTiSlowFast12Maps': 0, + 'Vc_Vmc_Ajc_B_CodegenTiSportMode': 1, + 'Vc_Vmc_Ajc_B_CodegenTiTemp': 1, + 'Vc_Vmc_Ajc_B_CodegenTiTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenTiTqRsv': 0, + 'Vc_Vmc_Ajc_B_CodegenTiZeroCrossComp': 1, + 'Vc_Vmc_Ajc_B_CodegenTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenTrailerLim': 0, + 'Vc_Vmc_Crp_B_CodegenCreep': 1, + 'Vc_Vmc_Em_CodeGenStartStop': 0, + 'Vc_Vmc_Pmm_B_CodegenAT': 1, + 'Vc_Vmc_Pmm_B_CodegenPS': 0 + }, + 'VEP4_GENIII': { + 'NEVER_ACTIVE': 0, + 'ALWAYS_ACTIVE': 1, + 'Vc_Ac_Ctrl_B_Codegen': 0, + 'Vc_Ac_Ctrl_B_CodeGenFixDisplacementAc': 0, + 'Vc_Ac_Ctrl_B_CodeGenMecAC': 1, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOff': 1, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOn': 1, + 'Vc_Ac_Ctrl_B_CodeGenVariableDisplacementAc': 1, + 'Vc_Ac_Fan_B_Codegen': 0, + 'Vc_Ac_Ovr_B_Codegen': 0, + 'Vc_AcReg_B_CodegenPHEV': 0, + 'Vc_Aes_B_CodeGen2VNT': 0, + 'Vc_Aes_B_CodeGenBasCalDsl': 0, + 'Vc_Aes_B_CodeGenCNDILA': 0, + 'Vc_Aes_B_CodeGenDiesel': 0, + 'Vc_Aes_B_CodeGenDsl': 0, + 'Vc_Aes_B_CodeGenEChrgr': 1, + 'Vc_Aes_B_CodeGenEgr': 1, + 'Vc_Aes_B_CodeGenEgrCoolr': 0, + 'Vc_Aes_B_CodeGenEgrLongRoute': 1, + 'Vc_Aes_B_CodeGenGEP3': 1, + 'Vc_Aes_B_CodeGenGsl': 1, + 'Vc_Aes_B_CodeGenPredUpShift': 1, + 'Vc_Aes_B_CodeGenSC': 0, + 'Vc_Aes_B_CodeGenWCAC': 1, + 'Vc_Aes_Bc_B_CodeGenBaseMode5': 0, + 'Vc_Aes_Bc_B_CodeGenBaseModes': 0, + 'Vc_Aes_Bc_B_CodeGenBoostAvl': 0, + 'Vc_Aes_Bc_B_CodeGenBoostMaxRgn': 0, + 'Vc_Aes_Bc_B_CodeGenEgrCoolr': 0, + 'Vc_Aes_Ch_B_CodeGenCcv': 1, + 'Vc_Aes_Ch_B_CodeGenLocalThrMon': 0, + 'Vc_Aes_Ch_B_CodeGenThrIdleMax': 0, + 'Vc_Aes_Ch_B_CodeGenThrMan': 0, + 'Vc_Aes_Co_B_CodeGenDrvModIdleNvh': 0, + 'Vc_Aes_Co_B_CodeGenDrvModSignal': 0, + 'Vc_Aes_Co_B_CodeGenIntkFil': 0, + 'Vc_Aes_Co_B_CodeGenMafBasCmp': 0, + 'Vc_Aes_Co_B_CodeGenMafPlsCmp': 0, + 'Vc_Aes_Co_B_CodeGenOscr': 0, + 'Vc_Aes_Co_B_CodeGenPresAdpn': 0, + 'Vc_Aes_Ct_B_CodeGenBoostCtrl': 0, + 'Vc_Aes_Ct_B_CodeGenLoadTran': 0, + 'Vc_Aes_Ct_B_CodeGenTqTran': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst1AmbP': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst1Bst2P': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst1IntkMapP': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst2AmbP': 1, + 'Vc_Aes_DynPresM_B_CodeGenBst2IntkMapP': 1, + 'Vc_Aes_EgrM_B_CodeGenEgr': 0, + 'Vc_Aes_EgrM_B_CodeGenEgrClr': 0, + 'Vc_Aes_EgrM_B_CodeGenTotalEGRMon': 1, + 'Vc_Aes_Hw_B_CodeGenAirBypVlv': 1, + 'Vc_Aes_Hw_B_CodeGenVntGvnr': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPEgrClrMon': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPEgrSysMon': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPOverTempMon': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrng': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrngLam': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrngNvm': 0, + 'Vc_Aes_Mo_B_CodeGenVirtSnsrCylAdj': 0, + 'Vc_Aes_Obd_B_CodeGenExhP': 0, + 'Vc_Aes_Obd_B_CodeGenMaf': 1, + 'Vc_Aes_Osc_B_CodeGenOscr': 1, + 'Vc_Aes_Ps_B_CodeGenPresSpThr': 0, + 'Vc_Aes_Rx_B_CodeGenDrvModSignal': 1, + 'Vc_Aes_Sc_B_CodeGenISG': 0, + 'Vc_Aes_Snsr_B_CodeGenIntkFil': 0, + 'Vc_Aes_Snsr_B_CodeGenMafBasCmp': 0, + 'Vc_Aes_Snsr_B_CodeGenMafPlsCmp': 0, + 'Vc_Aes_Snsr_B_CodeGenPresAdpn': 1, + 'Vc_Aes_Sp_B_BoostScav': 1, + 'Vc_Aes_Sp_B_CodeGenBoostAvl': 1, + 'Vc_Aes_Sp_B_CodeGenBoostOperMod': 0, + 'Vc_Aes_Sp_B_CodeGenBoostProtnT': 1, + 'Vc_Aes_Sp_B_CodeGenBoostSpMan': 0, + 'Vc_Aes_Sp_B_CodeGenCylReqMaxTq': 1, + 'Vc_Aes_Sp_B_CodeGenCylReqMin': 1, + 'Vc_Aes_Sp_B_CodeGenPresOperMod': 0, + 'Vc_Aes_Sp_B_CodeGenRvsFlowOvlp': 1, + 'Vc_Aes_Sp_B_CodeGenTargetPres': 0, + 'Vc_Aes_Sp_B_CodeGenVolmcNom': 1, + 'Vc_Aes_Srg_B_CodeGenSrgOscDetn': 1, + 'Vc_Aes_StatPresM_B_CodeGenAmbP': 1, + 'Vc_Aes_StatPresM_B_CodeGenBst1P': 1, + 'Vc_Aes_StatPresM_B_CodeGenBst2P': 1, + 'Vc_Aes_StatPresM_B_CodeGenElcmP': 1, + 'Vc_Aes_StatPresM_B_CodeGenExhaustP': 0, + 'Vc_Aes_StatPresM_B_CodeGenIntkMapP': 1, + 'Vc_Aes_SupM_B_CodeGenSprChrg': 0, + 'Vc_Aes_Tc_B_CodeGen2TMdl': 0, + 'Vc_Aes_Tc_B_CodeGenConvBoostCtl': 0, + 'Vc_Aes_Tc_B_CodeGenConvCtrl': 0, + 'Vc_Aes_Tc_B_CodeGenHPCmprByp': 0, + 'Vc_Aes_Tc_B_CodeGenModelBasedCtl': 0, + 'Vc_Aes_Tc_B_CodeGenStatFF': 1, + 'Vc_Aes_Tc_B_ExhPresFb': 0, + 'Vc_Aes_TrboM_B_CodeGen2Trbo': 1, + 'Vc_Aes_TrboM_B_CodeGenBstPeak': 1, + 'Vc_Aes_TrboM_B_CodeGenCACP': 0, + 'Vc_Aes_TrboM_B_CodeGenLPPres': 0, + 'Vc_Aes_TrboM_B_CodeGenPowerPulse': 0, + 'Vc_Aes_TrboM_B_CodeGenTrbo': 1, + 'Vc_Aes_TrboM_B_CodeGenTrboMode06': 0, + 'Vc_Aes_TrboM_B_CodeGenTrboOverSpd': 0, + 'Vc_Aes_TrboM_B_CodeGenVacVnt': 0, + 'Vc_Aes_Ve_B_CodeGenRvsFlowOvlp': 1, + 'Vc_Aes_Ve_B_CodeGenVolmcMapDsl': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMapGsl': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMdl': 1, + 'Vc_Aes_Vnt_B_CodeGenVntGvnr': 0, + 'Vc_At_Te_B_CodeGenTeScr2': 0, + 'Vc_B_CodeGen_7DCT_Gbx': 1, + 'Vc_B_CodeGen_AW_Gbx': 1, + 'Vc_B_CodeGen_EuCD_Platform': 0, + 'Vc_B_CodeGen_SPA_Platform': 1, + 'Vc_B_CodeGen25LT': 0, + 'Vc_B_CodeGen7DCT': 1, + 'Vc_B_CodeGenAccStopAndGo': 1, + 'Vc_B_CodeGenBrakeFootOnOffPedal': 1, + 'Vc_B_CodeGenCGEA': 0, + 'Vc_B_CodeGenCMA': 0, + 'Vc_B_CodeGenConvImpTq': 1, + 'Vc_B_CodegenDISI': 0, + 'Vc_B_CodeGenDv6c': 0, + 'Vc_B_CodeGenECLUTCH': 0, + 'Vc_B_CodegenEcoMode': 1, + 'Vc_B_CodeGenEDC17': 0, + 'Vc_B_CodeGenEfad': 0, + 'Vc_B_CodegenExtAsIntervent': 1, + 'Vc_B_CodeGenGearBoxLoss': 1, + 'Vc_B_CodeGenGtdi': 0, + 'Vc_B_CodeGenI5T': 0, + 'Vc_B_CodegenIdleCoast': 1, + 'Vc_B_CodegenLowRangeMode': 0, + 'Vc_B_CodeGenOilTemp': 1, + 'Vc_B_CodeGenPEV': 0, + 'Vc_B_CodeGenPnG': 1, + 'Vc_B_CodeGenReverseSwitch': 0, + 'Vc_B_CodeGenSI6': 0, + 'Vc_B_CodeGenSPA': 1, + 'Vc_B_CodegenSportMode': 1, + 'Vc_B_CodeGenTrafficSignSpeed': 0, + 'Vc_B_CodeGenVEA': 1, + 'Vc_B_CodeGenVED4': 0, + 'Vc_B_CodeGenVEP4': 1, + 'Vc_B_PistonCoolingRename': 1, + 'Vc_D_CodegenByPass': 1, + 'Vc_D_CodegenHev': 2, + 'Vc_D_CodegenHev12VStarter': 0, + 'Vc_D_CodegenPhevUH61inX1': 1, + 'Vc_Dcl_B_CodeGenOilLevel': 0, + 'Vc_Dcl_B_EMSTorque': 0, + 'Vc_Dcl_B_EuCDC1MCA': 0, + 'Vc_Dcl_B_Hybrid': 0, + 'Vc_Dcl_B_SPA': 1, + 'Vc_Dcl_B_SPMTorque': 1, + 'Vc_Dcl_B_VED': 0, + 'Vc_Dcl_B_VEP': 1, + 'Vc_Dcl_Dpf_B_CodeGenDiffPressHistogram': 0, + 'Vc_Dcl_Dpf_B_CodeGenRegenCauseHistogram': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenInjSum': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenMilage': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenOnOff': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenTime': 1, + 'Vc_Dcl_Dpf_B_CodeGenSootMass': 1, + 'Vc_Dcl_Dsl_B_CodeGenBoostAir': 0, + 'Vc_Dcl_Dsl_B_CodeGenHeatProtection': 0, + 'Vc_Dcl_Dsl_B_CodeGenInjectorSystem': 0, + 'Vc_Dcl_Dsl_B_CodeGenThermalLoading': 0, + 'Vc_Dcl_IcPnG_B_CodeGenIdleCoast': 0, + 'Vc_Dcl_IcPnG_B_CodeGenPnG': 0, + 'Vc_Dcl_Iupr_B_CATM': 1, + 'Vc_Dcl_Iupr_B_EVAP': 1, + 'Vc_Dcl_Iupr_B_Markow': 1, + 'Vc_Dcl_Iupr_B_MOXH': 1, + 'Vc_Dcl_Iupr_B_MOXT': 1, + 'Vc_Dcl_Iupr_B_StContTrq': 1, + 'Vc_Dcl_Iupr_B_StTrq': 0, + 'Vc_Dcl_Iupr_B_UOXS': 1, + 'Vc_Dcl_Iupr_B_VehSpd': 1, + 'Vc_Dcl_Pc_B_CodeGenPC': 0, + 'Vc_Dcl_Phev_B_IceInhibitedStop': 1, + 'Vc_Dcl_Phev_B_IceRunningPercentage': 1, + 'Vc_Dcl_Phev_B_IceSystemInducedStarts': 1, + 'Vc_Dcl_Phev_B_ISG': 1, + 'Vc_Dcl_Phev_B_LOS': 1, + 'Vc_Dcl_Phev_B_ModeManager': 0, + 'Vc_Dcl_Phev_B_ModeManagerSPA': 1, + 'Vc_Dcl_Phev_B_PHEV': 1, + 'Vc_Dcl_Phev_B_RunDry': 1, + 'Vc_Dcl_Phev_B_TorqueManager': 1, + 'Vc_Dcl_Phev_B_VehSpd': 1, + 'Vc_Dcl_Pt_B_CodeGemPurgingTime': 0, + 'Vc_Dcl_Pt_B_CodeGenCatTempHistogram': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelCutHist': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelMassIncrease': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelMassLoss': 0, + 'Vc_Dcl_Pt_B_CodeGenLowCatTemp': 0, + 'Vc_Dcl_Pt_B_CodeGenLVGStartHist': 0, + 'Vc_Dcl_Pt_B_CodeGenMisfireHist': 0, + 'Vc_Dcl_Pt_B_KnockCtrlAdaptTime': 0, + 'Vc_Dcl_Soot_B_CodeGenDpfRegenDuration': 0, + 'Vc_Dcl_Soot_B_CodeGenDpfRegenMileage': 0, + 'Vc_Dcl_Soot_B_CodeGenEmCoMode': 0, + 'Vc_Dcl_Soot_B_CodeGenEoNoxModel': 0, + 'Vc_Dcl_Soot_B_CodeGenGlowTemp': 0, + 'Vc_Dcl_Soot_B_CodeGenLntNoxConcentration': 0, + 'Vc_Dcl_Soot_B_CodeGenPowerPulse': 0, + 'Vc_Dcl_Soot_B_CodeGenScrAdaption': 0, + 'Vc_Dcl_Soot_B_CodeGenScrAgingSeverity': 0, + 'Vc_Dcl_Soot_B_CodeGenScrAmmonia': 0, + 'Vc_Dcl_Soot_B_CodeGenScrDef': 0, + 'Vc_Dcl_Soot_B_CodeGenScrNoxConcentration': 0, + 'Vc_Dcl_Soot_B_CodeGenScrRde': 0, + 'Vc_Dcl_Soot_B_CodeGenScrTemp': 0, + 'Vc_Dcl_Soot_B_CodeGenSoxLoad': 0, + 'Vc_Dcl_Ss_B_CodeGenChangeOfMind': 0, + 'Vc_Dcl_Ss_B_CodeGenDieselStopStart': 0, + 'Vc_Dcl_Ss_B_CodeGenEgRailPressTempTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgRailPressureAtSS': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStartAmbPressSS': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStartTempTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopLoadTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopPosition': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopTimeSS': 0, + 'Vc_Dcl_Ss_B_CodeGenHistory': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStart': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStop': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStopDsl': 0, + 'Vc_Dcl_Ss_B_CodeGenStartCounts': 1, + 'Vc_Dcl_Ss_B_CodeGenStopIntakePressure': 0, + 'Vc_Dcl_Ss_B_CodeGenSystemStart': 1, + 'Vc_Dcl_Ss_B_CodeGenTempIgnOn': 0, + 'Vc_Dcl_Ss_B_CodeGenTimeToDriveEngagedAutomatic': 0, + 'Vc_Dcl_Strt_B_CodeGenVEA': 1, + 'Vc_Dcl_Vu1_B_CodeGenAmbTempAmbPressHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenCanBusHEVOff': 1, + 'Vc_Dcl_Vu1_B_CodeGenCanBusOff': 1, + 'Vc_Dcl_Vu1_B_CodeGenDCLRemoteStart': 1, + 'Vc_Dcl_Vu1_B_CodeGenDrCycle': 1, + 'Vc_Dcl_Vu1_B_CodeGenEgStartTempAmbHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenEngClntTemp': 1, + 'Vc_Dcl_Vu1_B_CodeGenGPF': 1, + 'Vc_Dcl_Vu1_B_CodeGenI5Ttest': 0, + 'Vc_Dcl_Vu1_B_CodeGenIdleCoast': 1, + 'Vc_Dcl_Vu1_B_CodeGenPedalActiveTime': 1, + 'Vc_Dcl_Vu1_B_CodeGenPowertrainModeHistogram': 0, + 'Vc_Dcl_Vu1_B_CodeGenShiftProt': 1, + 'Vc_Dcl_Vu1_B_CodeGenSoakHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenTakeOffGear': 0, + 'Vc_Dcl_Vu1_B_CodeGenTempHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenTorqueMonitoring': 1, + 'Vc_Dcl_Vu1_B_CodeGenTotFuelMass': 0, + 'Vc_Dcl_Vu1_B_CodeGenTrailerCnt': 1, + 'Vc_Dcl_Vu1_B_CodeGenTrimCnt': 1, + 'Vc_Dcl_Vu1_B_ModeManagerSPA': 1, + 'Vc_Dcl_Vu2_B_CodeGenDistance': 1, + 'Vc_Dcl_Vu2_B_CodeGenEMSTorque': 0, + 'Vc_Dcl_Vu2_B_CodeGenEnergy': 1, + 'Vc_Dcl_Vu2_B_CodeGenFuel': 1, + 'Vc_Dcl_Vu2_B_CodeGenLoadRpmHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenLoadRpmSteadyHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenModelTorque': 1, + 'Vc_Dcl_Vu2_B_CodeGenRefuel': 0, + 'Vc_Dcl_Vu2_B_CodeGenSpeedLimitVehSpeedHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehAccHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehSpeedHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehSpeedSteadyHistogram': 1, + 'Vc_Dcl_Vu2_B_DcyTimeWithHighOilTemp': 1, + 'Vc_Dcl_Vu2_B_EngOilTemp': 1, + 'Vc_Dcl_Vu2_B_OilDilution': 1, + 'Vc_Dcl_Vu2_B_OilLvlVsMileageSinceLastService': 1, + 'Vc_Dcl_Vu2_B_OilPressureVsTorque': 1, + 'Vc_Dcl_Vu2_B_OilTempAtStartVsDrivCycleTime': 1, + 'Vc_De_As_B_CodegenOldGain': 1, + 'Vc_De_Da_B_Codegen': 1, + 'Vc_De_Da_B_CodeGenEcoGrade': 0, + 'Vc_De_Da_B_CodegenEcoGrDenso': 1, + 'Vc_De_Da_B_CodegenEcoGrOther': 0, + 'Vc_De_Da_B_CodeGenExtRng': 1, + 'Vc_De_Da_B_CodeGenPerfMeter': 0, + 'Vc_De_Da_B_CodeGenRefDrv': 1, + 'Vc_De_Dmm_CodeGenAT': 1, + 'Vc_De_Dmm_CodeGenFSiD': 1, + 'Vc_De_Dmm_CodeGenFSiN': 1, + 'Vc_De_Dmm_CodeGenMT': 1, + 'Vc_De_Dmm_CodeGenSiD': 1, + 'Vc_De_Dmm_CodeGenSiG': 1, + 'Vc_De_Dmm_CodeGenSiN': 1, + 'Vc_De_Dmm_CodeGenSteerActive': 1, + 'Vc_De_Gsi_B_Codegen': 1, + 'Vc_De_Gsi_B_CodegenCoolshift': 1, + 'Vc_De_PnG_B_CodeGenGlideTimeModel': 0, + 'Vc_De_Scl_B_CodeGenASL': 1, + 'Vc_De_Scl_B_CodeGenNewSetSpeed': 1, + 'Vc_De_Scl_B_CodeGenOldSetSpeed': 0, + 'Vc_De_Scl_B_CodeGenTSSL': 0, + 'Vc_De_Tfr_B_Codegen2Maps': 0, + 'Vc_De_Tfr_B_Codegen4Maps': 1, + 'Vc_De_Tfr_B_Codegen6Maps': 0, + 'Vc_De_Tfr_B_CodegenAccPedRcf': 1, + 'Vc_De_Tfr_B_CodegenConvComp': 0, + 'Vc_De_Tfr_B_CodegenForceMap': 1, + 'Vc_De_Tfr_B_CodegenHDC': 1, + 'Vc_De_Tfr_B_CodegenHDCTOS': 0, + 'Vc_De_Tfr_B_CodegenHighAltMaps': 1, + 'Vc_De_Tfr_B_CodegenIdleSpeedMod': 1, + 'Vc_De_Tfr_B_CodegenLowRangeMode': 0, + 'Vc_De_Tfr_B_CodegenMaxTrqAdapt': 1, + 'Vc_De_Tfr_B_CodegenNoHDCTOS': 0, + 'Vc_De_Tfr_B_CodeGenPedalTrim': 0, + 'Vc_De_Tfr_B_CodegenPedMapMult': 0, + 'Vc_De_Tfr_B_CodegenTqMax': 0, + 'Vc_Debug_B_CodeGenCGEA': 0, + 'Vc_Debug_B_CodeGenLevel1': 1, + 'Vc_Debug_B_CodeGenLevel2': 1, + 'Vc_Debug_B_CodeGenLevel3': 1, + 'Vc_Debug_B_CodeGenLevel4': 1, + 'Vc_Debug_B_CodeGenLevel5': 0, + 'Vc_Dia_Dcl_B_CodeGenAmbTempAmbPressHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenCanBusOff': 0, + 'Vc_Dia_Dcl_B_CodeGenCPSDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenCustomConfigDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenDiffPressHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenDPFDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenEgStartTempAmbHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenHistory': 0, + 'Vc_Dia_Dcl_B_CodeGenICEDieselDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenICEPetrolDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenInhibitStart': 0, + 'Vc_Dia_Dcl_B_CodeGenInhibitStop': 0, + 'Vc_Dia_Dcl_B_CodeGenLoadRpmHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenLoadRpmSteadyHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenPedalActiveTime': 0, + 'Vc_Dia_Dcl_B_CodeGenPistonCoolingDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenPowertrainModeHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenPwrTrainCoolingSystemDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenCauseHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenInjSum': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenMilage': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenOnOff': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenTime': 0, + 'Vc_Dia_Dcl_B_CodeGenScavengingDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSoakHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenSootMass': 0, + 'Vc_Dia_Dcl_B_CodeGenStartCounts': 0, + 'Vc_Dia_Dcl_B_CodeGenStopStartDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSuperChargerDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSystemStart': 0, + 'Vc_Dia_Dcl_B_CodeGenTempHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenTotFuelMass': 0, + 'Vc_Dia_Dcl_B_CodeGenVehSpeedHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenVehSpeedSteadyHistogram': 0, + 'Vc_DIDApi_Enable': 1, + 'Vc_Dtc_Ajc_B_CodegenCcCancel': 1, + 'Vc_Dtc_Ajc_B_CodegenDpBase': 1, + 'Vc_Dtc_Ajc_B_CodegenDpBaseLPFilter': 0, + 'Vc_Dtc_Ajc_B_CodegenDpClutch': 1, + 'Vc_Dtc_Ajc_B_CodegenDpRegenGain': 1, + 'Vc_Dtc_Ajc_B_CodegenDpSportMode': 1, + 'Vc_Dtc_Ajc_B_CodegenDpTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenDpZeroCrossComp': 1, + 'Vc_Dtc_Ajc_B_CodegenLowTrqDetect': 1, + 'Vc_Dtc_Ajc_B_CodegenNewAjc': 0, + 'Vc_Dtc_Ajc_B_CodegenTiAccPedComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiAccPedRate': 1, + 'Vc_Dtc_Ajc_B_CodegenTiAtmoPres': 1, + 'Vc_Dtc_Ajc_B_CodegenTiConvComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiConvLim': 1, + 'Vc_Dtc_Ajc_B_CodegenTiEGTGain': 1, + 'Vc_Dtc_Ajc_B_CodegenTiLP': 1, + 'Vc_Dtc_Ajc_B_CodegenTiOverrunGain': 0, + 'Vc_Dtc_Ajc_B_CodegenTiSportMode': 1, + 'Vc_Dtc_Ajc_B_CodegenTiTemp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenTiTqRsv': 1, + 'Vc_Dtc_Ajc_B_CodegenTiZeroCrossComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenTrailerLim': 0, + 'Vc_Dtc_As_B_Codegen6thOrderFilt_Ndiff': 0, + 'Vc_Dtc_Atf_B_CodeGenAcCut': 0, + 'Vc_Dtc_Atf_B_CodeGenAltCut': 0, + 'Vc_Dtc_Atf_B_CodeGenCGEA': 0, + 'Vc_Dtc_Cta_B_CodegenAT': 1, + 'Vc_Dtc_Cta_B_CodegenBTL': 0, + 'Vc_Dtc_Cta_B_CodegenInertia': 1, + 'Vc_Dtc_Cta_B_CodegenMT': 1, + 'Vc_Dtc_Cta_B_CodegenShaftProt': 1, + 'Vc_Dtc_Dc_B_CodegenAT': 1, + 'Vc_Dtc_Esc_B_CodegenAT': 1, + 'Vc_Dtc_Esc_B_CodegenMonAT': 1, + 'Vc_Dtc_Esc_B_CodegenMonPS': 0, + 'Vc_Dtc_Esc_B_CodegenMT': 1, + 'Vc_Dtc_Ffl_B_CodegenFfl': 1, + 'Vc_Dtc_Ffl_B_CodegenFflInertia': 0, + 'Vc_Dtc_Isc_B_CodegenPIDBase': 1, + 'Vc_Dtc_Isc_B_CodegenTorqueReserve': 1, + 'Vc_Dtc_Rct_B_CodegenCtr': 1, + 'Vc_Dtc_Rct_B_CodegenInertiaCmp': 1, + 'Vc_Dtc_Rct_B_CodegenMT': 1, + 'Vc_Dtc_Rct_B_CodegenPS': 0, + 'Vc_Dtc_Tc_B_CodegenOilTorqueLimit': 1, + 'Vc_Dtc_Tc_B_CodegenTqRsv': 1, + 'Vc_Dtc_Tc_B_CodgenACTrqRsvReq': 1, + 'Vc_Emi_Gpf_B_CodeGenSelIf': 1, + 'Vc_Ext_In_B_CanMod': 1, + 'Vc_Ext_In_B_CodeGenASLTestButton': 0, + 'Vc_Ext_In_B_CodeGenHack': 0, + 'Vc_Ext_In_B_PhevHighIdle': 1, + 'Vc_Ext_In_B_VEATestinSI6': 0, + 'Vc_Ext_Out_B_CodeGenAccDistCtlActv': 0, + 'Vc_Ext_Out_B_CodeGenAesVEAX0b': 1, + 'Vc_Ext_Out_B_CodeGenASLUseCcLamp': 0, + 'Vc_Ext_Out_B_CodegenVEA': 1, + 'Vc_ExtVar_B_CodeGenCGEA': 0, + 'Vc_ExtVar_B_CodeGenOilLevSens': 1, + 'Vc_ExtVar_B_CodeGenRegenCharge': 0, + 'Vc_ExtVar_B_CodeGenTOC': 0, + 'Vc_Fsd_Pc_B_CodeGenAntiClogging': 0, + 'Vc_Ftiv_Mon_B_Ftiv': 0, + 'Vc_Fuel_Ctrl_B_CodeGenFuDev': 1, + 'Vc_Fuel_Ctrl_B_CodeGenHeatFu': 0, + 'Vc_Fuel_Ctrl_B_CodeGenMonVap': 1, + 'Vc_Ign_B_CodeGen4CylLogic': 1, + 'Vc_Ign_B_CodeGenPetrolEgr': 1, + 'Vc_Lam_B_CodeGenLVGAct': 0, + 'Vc_Lin_CptM_B_Alternator12V': 1, + 'Vc_Lin_CptM_B_EDWaterPump': 0, + 'Vc_Lin_CptM_B_ElAC': 0, + 'Vc_Lin_CptM_B_EWaterPump': 0, + 'Vc_Lin_CptM_B_GrillShutter': 1, + 'Vc_Lin_CptM_B_SPA': 1, + 'Vc_Lin_CptM_B_SpoilerShutter': 1, + 'Vc_Lin_CptM_B_VEP': 1, + 'Vc_Lin_CptM_B_VEP315H': 0, + 'Vc_NewDiagnosticCoreIF': 1, + 'Vc_Nvm_B_CodeGenNvmSync': 1, + 'Vc_Nvm_B_CodeGenNvmSyncDebug': 0, + 'Vc_Nvm_Codegen': 1, + 'Vc_Obd_Cmn_B_CodeGenAmbT': 1, + 'Vc_Obd_Cmn_B_CodeGenBoostT': 1, + 'Vc_Obd_Cmn_B_CodeGenBoostT2': 0, + 'Vc_Obd_Cmn_B_CodeGenCisgT': 0, + 'Vc_Obd_Cmn_B_CodeGenClntT': 1, + 'Vc_Obd_Cmn_B_CodeGenEcmInit': 0, + 'Vc_Obd_Cmn_B_CodeGenInitReq': 1, + 'Vc_Obd_Cmn_B_CodeGenInManiT': 1, + 'Vc_Obd_Cmn_B_CodeGenIntkT': 1, + 'Vc_Obd_Cmn_B_CodeGenLtClntWcacT': 1, + 'Vc_Obd_Cmn_B_CodeGenObdExe': 1, + 'Vc_Obd_Cmn_B_CodeGenOilT': 1, + 'Vc_Obd_Cmn_B_CodeGenPowerPulseT': 0, + 'Vc_Obd_Cmn_B_CodeGenPreHeatDet': 1, + 'Vc_Obd_Cmn_B_CodeGenTempAve': 1, + 'Vc_Obd_Gpf_B_CodeGenSelIf': 1, + 'Vc_Obd_Sch_B_ObdSch': 0, + 'Vc_Oil_Lvl_B_CodeGenPHEV': 0, + 'Vc_Oil_Lvl_B_CodeGenStck': 1, + 'Vc_Oil_Lvl_B_CodeGenVEA': 1, + 'Vc_Oil_Pr_B_CodeGenPIDCtrl': 0, + 'Vc_Oil_Pr_B_CodeGenResetCtrl': 0, + 'Vc_Oil_Pr_B_CodeGenVEP': 1, + 'Vc_Oil_Pr_B_CodeGenVvtPwmBst': 0, + 'Vc_Oil_PrMon_B_CodeGen2ModOilPmp': 1, + 'Vc_Pem_Alc_B_Codegen_AcCut': 1, + 'Vc_Pem_Alc_B_Codegen_AltCut': 1, + 'Vc_Pem_Alc_B_Codegen_Controller': 1, + 'Vc_Pem_Alc_B_CodegenDpfRegen': 1, + 'Vc_Pem_Alc_B_CodegenFastCat': 1, + 'Vc_Pem_Alc_B_CodegenStart': 1, + 'Vc_Ppm_B_CodegenRemoteStart': 1, + 'Vc_Ppm_Imob_B_ImobSkipAllowed': 1, + 'Vc_Ppm_Psm_B_CodegenKERS': 1, + 'Vc_Ppm_Psm_D_CodegenSysRly': 1, + 'Vc_Ppm_Rc_B_Glow': 0, + 'Vc_Ppm_St_B_CodeGenEmsPowerPackStatus': 0, + 'Vc_Ppm_St_B_CodeGenIntIceStatus': 0, + 'Vc_Pvc_Hw_B_12VStartMotor': 1, + 'Vc_Pvc_Hw_B_AT': 1, + 'Vc_Pvc_Hw_B_Awd': 1, + 'Vc_Pvc_Hw_B_Bev': 0, + 'Vc_Pvc_Hw_B_Diesel': 0, + 'Vc_Pvc_Hw_B_DualClutchGbx': 0, + 'Vc_Pvc_Hw_B_DualErad': 0, + 'Vc_Pvc_Hw_B_EClutch': 0, + 'Vc_Pvc_Hw_B_Efad': 0, + 'Vc_Pvc_Hw_B_Erad': 0, + 'Vc_Pvc_Hw_B_Gep3Gen1': 0, + 'Vc_Pvc_Hw_B_HVSystem': 0, + 'Vc_Pvc_Hw_B_Isg': 1, + 'Vc_Pvc_Hw_B_ManualClutch': 1, + 'Vc_Pvc_Hw_B_MT': 1, + 'Vc_Pvc_Hw_B_MVSystem': 1, + 'Vc_Pvc_Hw_B_Petrol': 1, + 'Vc_Pvc_Hw_B_RangeExtender': 0, + 'Vc_Pvc_Hw_B_TqConverterGbx': 1, + 'Vc_Pvc_Hw_B_VeaGen1': 0, + 'Vc_Pvc_Hw_B_VeaGen2': 0, + 'Vc_Pvc_Hw_B_VeaGen3': 1, + 'Vc_Pvc_Sw_B_IdleCoast': 1, + 'Vc_Pvc_Sw_B_StopStart': 1, + 'Vc_Reg_Ch_B_CodegenAltCut': 1, + 'Vc_Reg_Ch_B_CodegenCostEms': 1, + 'Vc_Reg_Ch_B_CodegenCostSpm': 0, + 'Vc_Reg_Ch_B_CodeGenDID': 1, + 'Vc_Reg_Ch_B_CodegenDpfRegen': 1, + 'Vc_Reg_Ch_B_CodegenFastCat': 1, + 'Vc_Reg_Ch_B_CodegenFuelpumpBoost': 1, + 'Vc_Reg_Ch_B_CodegenInjComp': 1, + 'Vc_Sc_Dep_B_CodeGenDepPropAllowed': 1, + 'Vc_Sc_Dep_B_CodegenEngPosition': 0, + 'Vc_Sc_Dep_B_GenDepAccPedalPosition': 1, + 'Vc_Sc_Dep_B_UseEMSClutchPedalPosition': 1, + 'Vc_Sc_Feh_B_HEP7': 1, + 'Vc_Sc_Feh_B_HRE': 0, + 'Vc_Sc_In_RegenByPaddles': 1, + 'Vc_Sp_B_CruiseDownHill': 0, + 'Vc_Sp_B_DriverEvaluator': 1, + 'Vc_Sp_B_FanRequest': 0, + 'Vc_Sp_B_GLMMonitor': 0, + 'Vc_Sp_B_GradeEstimator': 0, + 'Vc_Sp_B_HEV': 0, + 'Vc_Sp_B_IntermediateGear': 1, + 'Vc_Sp_B_LTS': 1, + 'Vc_Sp_B_OpenLUEngSpeed': 0, + 'Vc_Sp_B_PredictiveUpShift': 1, + 'Vc_Sp_B_SportInit': 1, + 'Vc_Sp_B_TransMode': 1, + 'Vc_Tc_Dir_B_CodeGenElectcPrndCtrl': 0, + 'Vc_Temp_StkM_B_CodeGenBoost': 1, + 'Vc_Temp_StkM_B_CodeGenBoostT2': 0, + 'Vc_Temp_StkM_B_CodeGenClnt': 1, + 'Vc_Temp_StkM_B_CodeGenInMani': 1, + 'Vc_Temp_StkM_B_CodeGenLtClntWcacT': 0, + 'Vc_Temp_StkM_B_CodeGenMaf': 0, + 'Vc_Temp_StkM_B_CodeGenPowerPulseT': 0, + 'Vc_Temp_ThM_B_CodeGenThms': 0, + 'Vc_Tm_Af_B_CodeGenLnrAirFlowCalcn': 0, + 'Vc_Tm_Af_B_CodeGenMapAirFlowCalcn': 1, + 'Vc_Tm_Af_B_CodeGenMovCtrDenso': 1, + 'Vc_Tm_Af_B_CodeGenShttrSeqCtrl': 1, + 'Vc_Tm_Af_B_CodeGenShttrSyncCtrl': 1, + 'Vc_Tm_Efl_B_CodeGenAuxWtrPmpReqHandler': 0, + 'Vc_Tm_Efl_B_CodeGenClntFlwFb': 1, + 'Vc_Tm_Efl_B_CodeGenClntFlwRequestHandler': 0, + 'Vc_Tm_Efl_B_CodeGenClntSetpoint': 0, + 'Vc_Tm_Efl_B_CodeGenCwpHvac': 0, + 'Vc_Tm_Efl_B_CodeGenEgrPmpHandler': 0, + 'Vc_Tm_Efl_B_CodeGenEwpRly': 0, + 'Vc_Tm_Efl_B_CodeGenRadClntFlowRequest': 0, + 'Vc_Tm_Efl_B_CodeGenSpoilerShutter': 1, + 'Vc_Tm_Efl_B_CodeGenThermostatOpenRequest': 1, + 'Vc_Tm_Efl_B_CodeGenValveHandler': 0, + 'Vc_Tm_Efl_B_CodeGenWtrPmpAftRun': 0, + 'Vc_Trq_B_CodeGenMaxNoBoost': 0, + 'Vc_Trq_Req_B_CodeGenTrqDlyTCM': 0, + 'Vc_Vmc_Ajc_B_CodegenCcCancel': 1, + 'Vc_Vmc_Ajc_B_CodegenDpBase': 1, + 'Vc_Vmc_Ajc_B_CodegenDpBaseLPFilter': 0, + 'Vc_Vmc_Ajc_B_CodegenDpClutch': 1, + 'Vc_Vmc_Ajc_B_CodegenDpRegenGain': 1, + 'Vc_Vmc_Ajc_B_CodegenDpSlowFast': 1, + 'Vc_Vmc_Ajc_B_CodegenDpSlowFast12Maps': 0, + 'Vc_Vmc_Ajc_B_CodegenDpSportMode': 1, + 'Vc_Vmc_Ajc_B_CodegenDpTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenDpZeroCrossComp': 1, + 'Vc_Vmc_Ajc_B_CodegenLowTrqDetect': 1, + 'Vc_Vmc_Ajc_B_CodegenTiAccPedRate': 1, + 'Vc_Vmc_Ajc_B_CodegenTiAtmoPres': 1, + 'Vc_Vmc_Ajc_B_CodegenTiConvComp': 1, + 'Vc_Vmc_Ajc_B_CodegenTiConvLim': 1, + 'Vc_Vmc_Ajc_B_CodegenTiEGTGain': 1, + 'Vc_Vmc_Ajc_B_CodegenTiLP': 1, + 'Vc_Vmc_Ajc_B_CodegenTiOverrunGain': 0, + 'Vc_Vmc_Ajc_B_CodegenTiSlowFast': 1, + 'Vc_Vmc_Ajc_B_CodegenTiSlowFast12Maps': 0, + 'Vc_Vmc_Ajc_B_CodegenTiSportMode': 1, + 'Vc_Vmc_Ajc_B_CodegenTiTemp': 1, + 'Vc_Vmc_Ajc_B_CodegenTiTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenTiTqRsv': 1, + 'Vc_Vmc_Ajc_B_CodegenTiZeroCrossComp': 1, + 'Vc_Vmc_Ajc_B_CodegenTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenTrailerLim': 0, + 'Vc_Vmc_Crp_B_CodegenCreep': 1, + 'Vc_Vmc_Em_CodeGenStartStop': 0, + 'Vc_Vmc_Pmm_B_CodegenAT': 1, + 'Vc_Vmc_Pmm_B_CodegenPS': 0, + }, + 'GEP3_BEV': { + 'NEVER_ACTIVE': 0, + 'ALWAYS_ACTIVE': 1, + 'Vc_AcReg_B_CodegenPHEV': 0, + 'Vc_Ac_Ctrl_B_CodeGenFixDisplacementAc': 0, + 'Vc_Ac_Ctrl_B_CodeGenMecAC': 0, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOff': 1, + 'Vc_Ac_Ctrl_B_CodeGenTorqueEstOn': 1, + 'Vc_Ac_Ctrl_B_CodeGenVariableDisplacementAc': 1, + 'Vc_Ac_Ctrl_B_Codegen': 0, + 'Vc_Ac_Fan_B_Codegen': 0, + 'Vc_Ac_Ovr_B_Codegen': 0, + 'Vc_Aes_B_CodeGen2VNT': 0, + 'Vc_Aes_B_CodeGenBasCalDsl': 0, + 'Vc_Aes_B_CodeGenCNDILA': 0, + 'Vc_Aes_B_CodeGenDiesel': 0, + 'Vc_Aes_B_CodeGenDsl': 0, + 'Vc_Aes_B_CodeGenEChrgr': 0, + 'Vc_Aes_B_CodeGenEgr': 0, + 'Vc_Aes_B_CodeGenEgrCoolr': 0, + 'Vc_Aes_B_CodeGenEgrLongRoute': 0, + 'Vc_Aes_B_CodeGenGEP3': 0, + 'Vc_Aes_B_CodeGenGsl': 0, + 'Vc_Aes_B_CodeGenPredUpShift': 0, + 'Vc_Aes_B_CodeGenSC': 0, + 'Vc_Aes_B_CodeGenWCAC': 0, + 'Vc_Aes_Bc_B_CodeGenBaseMode5': 0, + 'Vc_Aes_Bc_B_CodeGenBaseModes': 0, + 'Vc_Aes_Bc_B_CodeGenBoostAvl': 0, + 'Vc_Aes_Bc_B_CodeGenBoostMaxRgn': 0, + 'Vc_Aes_Bc_B_CodeGenEgrCoolr': 0, + 'Vc_Aes_Ch_B_CodeGenCcv': 0, + 'Vc_Aes_Ch_B_CodeGenLocalThrMon': 0, + 'Vc_Aes_Ch_B_CodeGenThrIdleMax': 0, + 'Vc_Aes_Ch_B_CodeGenThrMan': 0, + 'Vc_Aes_Co_B_CodeGenDrvModIdleNvh': 0, + 'Vc_Aes_Co_B_CodeGenDrvModSignal': 0, + 'Vc_Aes_Co_B_CodeGenIntkFil': 0, + 'Vc_Aes_Co_B_CodeGenMafBasCmp': 0, + 'Vc_Aes_Co_B_CodeGenMafPlsCmp': 0, + 'Vc_Aes_Co_B_CodeGenOscr': 0, + 'Vc_Aes_Co_B_CodeGenPresAdpn': 0, + 'Vc_Aes_Ct_B_CodeGenBoostCtrl': 0, + 'Vc_Aes_Ct_B_CodeGenLoadTran': 0, + 'Vc_Aes_Ct_B_CodeGenTqTran': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst1AmbP': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst1Bst2P': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst1IntkMapP': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst2AmbP': 0, + 'Vc_Aes_DynPresM_B_CodeGenBst2IntkMapP': 0, + 'Vc_Aes_EgrM_B_CodeGenEgr': 0, + 'Vc_Aes_EgrM_B_CodeGenEgrClr': 0, + 'Vc_Aes_EgrM_B_CodeGenTotalEGRMon': 0, + 'Vc_Aes_Hw_B_CodeGenAirBypVlv': 0, + 'Vc_Aes_Hw_B_CodeGenVntGvnr': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPEgrClrMon': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPEgrSysMon': 0, + 'Vc_Aes_LPEgrM_B_CodeGenLPOverTempMon': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrng': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrngLam': 0, + 'Vc_Aes_Mo_B_CodeGenMafLrngNvm': 0, + 'Vc_Aes_Mo_B_CodeGenVirtSnsrCylAdj': 0, + 'Vc_Aes_Obd_B_CodeGenExhP': 0, + 'Vc_Aes_Obd_B_CodeGenMaf': 0, + 'Vc_Aes_Osc_B_CodeGenOscr': 0, + 'Vc_Aes_Ps_B_CodeGenPresSpThr': 0, + 'Vc_Aes_Rx_B_CodeGenDrvModSignal': 0, + 'Vc_Aes_Sc_B_CodeGenISG': 0, + 'Vc_Aes_Snsr_B_CodeGenIntkFil': 0, + 'Vc_Aes_Snsr_B_CodeGenMafBasCmp': 0, + 'Vc_Aes_Snsr_B_CodeGenMafPlsCmp': 0, + 'Vc_Aes_Snsr_B_CodeGenPresAdpn': 0, + 'Vc_Aes_Sp_B_BoostScav': 0, + 'Vc_Aes_Sp_B_CodeGenBoostAvl': 0, + 'Vc_Aes_Sp_B_CodeGenBoostOperMod': 0, + 'Vc_Aes_Sp_B_CodeGenBoostProtnT': 0, + 'Vc_Aes_Sp_B_CodeGenBoostSpMan': 0, + 'Vc_Aes_Sp_B_CodeGenCylReqMaxTq': 0, + 'Vc_Aes_Sp_B_CodeGenCylReqMin': 0, + 'Vc_Aes_Sp_B_CodeGenPresOperMod': 0, + 'Vc_Aes_Sp_B_CodeGenRvsFlowOvlp': 0, + 'Vc_Aes_Sp_B_CodeGenTargetPres': 0, + 'Vc_Aes_Sp_B_CodeGenVolmcNom': 0, + 'Vc_Aes_Srg_B_CodeGenSrgOscDetn': 0, + 'Vc_Aes_StatPresM_B_CodeGenAmbP': 0, + 'Vc_Aes_StatPresM_B_CodeGenBst1P': 0, + 'Vc_Aes_StatPresM_B_CodeGenBst2P': 0, + 'Vc_Aes_StatPresM_B_CodeGenElcmP': 0, + 'Vc_Aes_StatPresM_B_CodeGenExhaustP': 0, + 'Vc_Aes_StatPresM_B_CodeGenIntkMapP': 0, + 'Vc_Aes_SupM_B_CodeGenSprChrg': 0, + 'Vc_Aes_Tc_B_CodeGen2TMdl': 0, + 'Vc_Aes_Tc_B_CodeGenConvBoostCtl': 0, + 'Vc_Aes_Tc_B_CodeGenConvCtrl': 0, + 'Vc_Aes_Tc_B_CodeGenHPCmprByp': 0, + 'Vc_Aes_Tc_B_CodeGenModelBasedCtl': 0, + 'Vc_Aes_Tc_B_CodeGenStatFF': 0, + 'Vc_Aes_Tc_B_ExhPresFb': 0, + 'Vc_Aes_TrboM_B_CodeGen2Trbo': 0, + 'Vc_Aes_TrboM_B_CodeGenBstPeak': 0, + 'Vc_Aes_TrboM_B_CodeGenCACP': 0, + 'Vc_Aes_TrboM_B_CodeGenLPPres': 0, + 'Vc_Aes_TrboM_B_CodeGenPowerPulse': 0, + 'Vc_Aes_TrboM_B_CodeGenTrbo': 0, + 'Vc_Aes_TrboM_B_CodeGenTrboMode06': 0, + 'Vc_Aes_TrboM_B_CodeGenTrboOverSpd': 0, + 'Vc_Aes_TrboM_B_CodeGenVacVnt': 0, + 'Vc_Aes_Ve_B_CodeGenRvsFlowOvlp': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMapDsl': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMapGsl': 0, + 'Vc_Aes_Ve_B_CodeGenVolmcMdl': 0, + 'Vc_Aes_Vnt_B_CodeGenVntGvnr': 0, + 'Vc_At_Te_B_CodeGenTeScr2': 0, + 'Vc_B_CodeGen25LT': 0, + 'Vc_B_CodeGen7DCT': 1, + 'Vc_B_CodeGenAccStopAndGo': 1, + 'Vc_B_CodeGenBrakeFootOnOffPedal': 1, + 'Vc_B_CodeGenCGEA': 0, + 'Vc_B_CodeGenCMA': 1, + 'Vc_B_CodeGenConvImpTq': 1, + 'Vc_B_CodeGenDv6c': 0, + 'Vc_B_CodeGenECLUTCH': 0, + 'Vc_B_CodeGenEDC17': 0, + 'Vc_B_CodeGenEfad': 1, + 'Vc_B_CodeGenGearBoxLoss': 1, + 'Vc_B_CodeGenGtdi': 0, + 'Vc_B_CodeGenI5T': 0, + 'Vc_B_CodeGenOilTemp': 0, + 'Vc_B_CodeGenPEV': 0, + 'Vc_B_CodeGenPnG': 1, + 'Vc_B_CodeGenReverseSwitch': 0, + 'Vc_B_CodeGenSI6': 0, + 'Vc_B_CodeGenSPA': 1, + 'Vc_B_CodeGenTrafficSignSpeed': 0, + 'Vc_B_CodeGenVEA': 1, + 'Vc_B_CodeGenVED4': 0, + 'Vc_B_CodeGenVEP4': 1, + 'Vc_B_CodeGen_7DCT_Gbx': 1, + 'Vc_B_CodeGen_AW_Gbx': 0, + 'Vc_B_CodeGen_EuCD_Platform': 0, + 'Vc_B_CodeGen_SPA_Platform': 1, + 'Vc_B_CodegenDISI': 0, + 'Vc_B_CodegenEcoMode': 1, + 'Vc_B_CodegenExtAsIntervent': 1, + 'Vc_B_CodegenIdleCoast': 1, + 'Vc_B_CodegenLowRangeMode': 0, + 'Vc_B_CodegenSportMode': 1, + 'Vc_B_PistonCoolingRename': 1, + 'Vc_DIDApi_Enable': 1, + 'Vc_D_CodegenByPass': 1, + 'Vc_D_CodegenHev': 2, + 'Vc_D_CodegenHev12VStarter': 0, + 'Vc_D_CodegenPhevUH61inX1': 1, + 'Vc_Dcl_B_CodeGenOilLevel': 0, + 'Vc_Dcl_B_EMSTorque': 0, + 'Vc_Dcl_B_EuCDC1MCA': 0, + 'Vc_Dcl_B_Hybrid': 0, + 'Vc_Dcl_B_SPA': 1, + 'Vc_Dcl_B_SPMTorque': 1, + 'Vc_Dcl_B_VED': 0, + 'Vc_Dcl_B_VEP': 1, + 'Vc_Dcl_Dpf_B_CodeGenDiffPressHistogram': 0, + 'Vc_Dcl_Dpf_B_CodeGenRegenCauseHistogram': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenInjSum': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenMilage': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenOnOff': 1, + 'Vc_Dcl_Dpf_B_CodeGenRegenTime': 1, + 'Vc_Dcl_Dpf_B_CodeGenSootMass': 1, + 'Vc_Dcl_Dsl_B_CodeGenBoostAir': 0, + 'Vc_Dcl_Dsl_B_CodeGenHeatProtection': 0, + 'Vc_Dcl_Dsl_B_CodeGenInjectorSystem': 0, + 'Vc_Dcl_Dsl_B_CodeGenThermalLoading': 0, + 'Vc_Dcl_IcPnG_B_CodeGenIdleCoast': 0, + 'Vc_Dcl_IcPnG_B_CodeGenPnG': 0, + 'Vc_Dcl_Iupr_B_CATM': 0, + 'Vc_Dcl_Iupr_B_EVAP': 0, + 'Vc_Dcl_Iupr_B_MOXH': 0, + 'Vc_Dcl_Iupr_B_MOXT': 0, + 'Vc_Dcl_Iupr_B_Markow': 1, + 'Vc_Dcl_Iupr_B_StContTrq': 1, + 'Vc_Dcl_Iupr_B_StTrq': 0, + 'Vc_Dcl_Iupr_B_UOXS': 0, + 'Vc_Dcl_Iupr_B_VehSpd': 1, + 'Vc_Dcl_Pc_B_CodeGenPC': 0, + 'Vc_Dcl_Phev_B_ISG': 1, + 'Vc_Dcl_Phev_B_IceInhibitedStop': 1, + 'Vc_Dcl_Phev_B_IceRunningPercentage': 1, + 'Vc_Dcl_Phev_B_IceSystemInducedStarts': 1, + 'Vc_Dcl_Phev_B_LOS': 1, + 'Vc_Dcl_Phev_B_ModeManager': 0, + 'Vc_Dcl_Phev_B_ModeManagerSPA': 0, + 'Vc_Dcl_Phev_B_PHEV': 1, + 'Vc_Dcl_Phev_B_RunDry': 1, + 'Vc_Dcl_Phev_B_TorqueManager': 0, + 'Vc_Dcl_Phev_B_VehSpd': 1, + 'Vc_Dcl_Pt_B_CodeGemPurgingTime': 0, + 'Vc_Dcl_Pt_B_CodeGenCatTempHistogram': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelCutHist': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelMassIncrease': 0, + 'Vc_Dcl_Pt_B_CodeGenFuelMassLoss': 0, + 'Vc_Dcl_Pt_B_CodeGenLVGStartHist': 0, + 'Vc_Dcl_Pt_B_CodeGenLowCatTemp': 0, + 'Vc_Dcl_Pt_B_CodeGenMisfireHist': 0, + 'Vc_Dcl_Pt_B_KnockCtrlAdaptTime': 0, + 'Vc_Dcl_Soot_B_CodeGenDpfRegenDuration': 0, + 'Vc_Dcl_Soot_B_CodeGenDpfRegenMileage': 0, + 'Vc_Dcl_Soot_B_CodeGenEmCoMode': 0, + 'Vc_Dcl_Soot_B_CodeGenEoNoxModel': 0, + 'Vc_Dcl_Soot_B_CodeGenGlowTemp': 0, + 'Vc_Dcl_Soot_B_CodeGenLntNoxConcentration': 0, + 'Vc_Dcl_Soot_B_CodeGenPowerPulse': 0, + 'Vc_Dcl_Soot_B_CodeGenScrAdaption': 0, + 'Vc_Dcl_Soot_B_CodeGenScrAgingSeverity': 0, + 'Vc_Dcl_Soot_B_CodeGenScrAmmonia': 0, + 'Vc_Dcl_Soot_B_CodeGenScrDef': 0, + 'Vc_Dcl_Soot_B_CodeGenScrNoxConcentration': 0, + 'Vc_Dcl_Soot_B_CodeGenScrRde': 0, + 'Vc_Dcl_Soot_B_CodeGenScrTemp': 0, + 'Vc_Dcl_Soot_B_CodeGenSoxLoad': 0, + 'Vc_Dcl_Ss_B_CodeGenChangeOfMind': 0, + 'Vc_Dcl_Ss_B_CodeGenDieselStopStart': 0, + 'Vc_Dcl_Ss_B_CodeGenEgRailPressTempTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgRailPressureAtSS': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStartAmbPressSS': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStartTempTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopLoadTime': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopPosition': 0, + 'Vc_Dcl_Ss_B_CodeGenEgStopTimeSS': 0, + 'Vc_Dcl_Ss_B_CodeGenHistory': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStart': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStop': 1, + 'Vc_Dcl_Ss_B_CodeGenInhibitStopDsl': 0, + 'Vc_Dcl_Ss_B_CodeGenStartCounts': 1, + 'Vc_Dcl_Ss_B_CodeGenStopIntakePressure': 0, + 'Vc_Dcl_Ss_B_CodeGenSystemStart': 1, + 'Vc_Dcl_Ss_B_CodeGenTempIgnOn': 0, + 'Vc_Dcl_Ss_B_CodeGenTimeToDriveEngagedAutomatic': 0, + 'Vc_Dcl_Strt_B_CodeGenVEA': 1, + 'Vc_Dcl_Vu1_B_CodeGenAmbTempAmbPressHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenCanBusHEVOff': 1, + 'Vc_Dcl_Vu1_B_CodeGenCanBusOff': 1, + 'Vc_Dcl_Vu1_B_CodeGenDCLRemoteStart': 0, + 'Vc_Dcl_Vu1_B_CodeGenDrCycle': 1, + 'Vc_Dcl_Vu1_B_CodeGenEgStartTempAmbHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenEngClntTemp': 1, + 'Vc_Dcl_Vu1_B_CodeGenGPF': 0, + 'Vc_Dcl_Vu1_B_CodeGenI5Ttest': 0, + 'Vc_Dcl_Vu1_B_CodeGenIdleCoast': 1, + 'Vc_Dcl_Vu1_B_CodeGenPedalActiveTime': 1, + 'Vc_Dcl_Vu1_B_CodeGenPowertrainModeHistogram': 0, + 'Vc_Dcl_Vu1_B_CodeGenShiftProt': 0, + 'Vc_Dcl_Vu1_B_CodeGenSoakHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenTakeOffGear': 0, + 'Vc_Dcl_Vu1_B_CodeGenTempHistogram': 1, + 'Vc_Dcl_Vu1_B_CodeGenTorqueMonitoring': 1, + 'Vc_Dcl_Vu1_B_CodeGenTotFuelMass': 0, + 'Vc_Dcl_Vu1_B_CodeGenTrailerCnt': 0, + 'Vc_Dcl_Vu1_B_CodeGenTrimCnt': 0, + 'Vc_Dcl_Vu1_B_ModeManagerSPA': 1, + 'Vc_Dcl_Vu2_B_CodeGenDistance': 1, + 'Vc_Dcl_Vu2_B_CodeGenEMSTorque': 0, + 'Vc_Dcl_Vu2_B_CodeGenEnergy': 1, + 'Vc_Dcl_Vu2_B_CodeGenFuel': 1, + 'Vc_Dcl_Vu2_B_CodeGenLoadRpmHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenLoadRpmSteadyHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenModelTorque': 1, + 'Vc_Dcl_Vu2_B_CodeGenRefuel': 0, + 'Vc_Dcl_Vu2_B_CodeGenSpeedLimitVehSpeedHistogram': 0, + 'Vc_Dcl_Vu2_B_CodeGenVehAccHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehSpeedHistogram': 1, + 'Vc_Dcl_Vu2_B_CodeGenVehSpeedSteadyHistogram': 1, + 'Vc_Dcl_Vu2_B_DcyTimeWithHighOilTemp': 1, + 'Vc_Dcl_Vu2_B_EngOilTemp': 1, + 'Vc_Dcl_Vu2_B_OilDilution': 1, + 'Vc_Dcl_Vu2_B_OilLvlVsMileageSinceLastService': 1, + 'Vc_Dcl_Vu2_B_OilPressureVsTorque': 1, + 'Vc_Dcl_Vu2_B_OilTempAtStartVsDrivCycleTime': 1, + 'Vc_De_As_B_CodegenOldGain': 1, + 'Vc_De_Da_B_CodeGenEcoGrade': 0, + 'Vc_De_Da_B_CodeGenExtRng': 1, + 'Vc_De_Da_B_CodeGenPerfMeter': 0, + 'Vc_De_Da_B_CodeGenRefDrv': 1, + 'Vc_De_Da_B_Codegen': 1, + 'Vc_De_Da_B_CodegenEcoGrDenso': 1, + 'Vc_De_Da_B_CodegenEcoGrOther': 0, + 'Vc_De_Dmm_CodeGenAT': 1, + 'Vc_De_Dmm_CodeGenFSiD': 1, + 'Vc_De_Dmm_CodeGenFSiN': 1, + 'Vc_De_Dmm_CodeGenMT': 1, + 'Vc_De_Dmm_CodeGenSiD': 1, + 'Vc_De_Dmm_CodeGenSiG': 1, + 'Vc_De_Dmm_CodeGenSiN': 1, + 'Vc_De_Dmm_CodeGenSteerActive': 1, + 'Vc_De_Gsi_B_Codegen': 1, + 'Vc_De_Gsi_B_CodegenCoolshift': 0, + 'Vc_De_PnG_B_CodeGenGlideTimeModel': 0, + 'Vc_De_Scl_B_CodeGenASL': 1, + 'Vc_De_Scl_B_CodeGenNewSetSpeed': 1, + 'Vc_De_Scl_B_CodeGenOldSetSpeed': 0, + 'Vc_De_Scl_B_CodeGenTSSL': 0, + 'Vc_De_Tfr_B_CodeGenPedalTrim': 0, + 'Vc_De_Tfr_B_Codegen2Maps': 0, + 'Vc_De_Tfr_B_Codegen4Maps': 1, + 'Vc_De_Tfr_B_Codegen6Maps': 0, + 'Vc_De_Tfr_B_CodegenAccPedRcf': 1, + 'Vc_De_Tfr_B_CodegenConvComp': 1, + 'Vc_De_Tfr_B_CodegenForceMap': 1, + 'Vc_De_Tfr_B_CodegenHDC': 1, + 'Vc_De_Tfr_B_CodegenHDCTOS': 0, + 'Vc_De_Tfr_B_CodegenHighAltMaps': 1, + 'Vc_De_Tfr_B_CodegenIdleSpeedMod': 1, + 'Vc_De_Tfr_B_CodegenLowRangeMode': 0, + 'Vc_De_Tfr_B_CodegenMaxTrqAdapt': 1, + 'Vc_De_Tfr_B_CodegenNoHDCTOS': 0, + 'Vc_De_Tfr_B_CodegenPedMapMult': 0, + 'Vc_De_Tfr_B_CodegenTqMax': 0, + 'Vc_Debug_B_CodeGenCGEA': 0, + 'Vc_Debug_B_CodeGenLevel1': 1, + 'Vc_Debug_B_CodeGenLevel2': 1, + 'Vc_Debug_B_CodeGenLevel3': 1, + 'Vc_Debug_B_CodeGenLevel4': 1, + 'Vc_Debug_B_CodeGenLevel5': 0, + 'Vc_Dia_Dcl_B_CodeGenAmbTempAmbPressHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenCPSDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenCanBusOff': 0, + 'Vc_Dia_Dcl_B_CodeGenCustomConfigDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenDPFDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenDiffPressHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenEgStartTempAmbHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenHistory': 0, + 'Vc_Dia_Dcl_B_CodeGenICEDieselDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenICEPetrolDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenInhibitStart': 0, + 'Vc_Dia_Dcl_B_CodeGenInhibitStop': 0, + 'Vc_Dia_Dcl_B_CodeGenLoadRpmHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenLoadRpmSteadyHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenPedalActiveTime': 0, + 'Vc_Dia_Dcl_B_CodeGenPistonCoolingDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenPowertrainModeHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenPwrTrainCoolingSystemDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenCauseHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenInjSum': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenMilage': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenOnOff': 0, + 'Vc_Dia_Dcl_B_CodeGenRegenTime': 0, + 'Vc_Dia_Dcl_B_CodeGenScavengingDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSoakHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenSootMass': 0, + 'Vc_Dia_Dcl_B_CodeGenStartCounts': 0, + 'Vc_Dia_Dcl_B_CodeGenStopStartDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSuperChargerDataLog': 0, + 'Vc_Dia_Dcl_B_CodeGenSystemStart': 0, + 'Vc_Dia_Dcl_B_CodeGenTempHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenTotFuelMass': 0, + 'Vc_Dia_Dcl_B_CodeGenVehSpeedHistogram': 0, + 'Vc_Dia_Dcl_B_CodeGenVehSpeedSteadyHistogram': 0, + 'Vc_Dtc_Ajc_B_CodegenCcCancel': 1, + 'Vc_Dtc_Ajc_B_CodegenDpBase': 1, + 'Vc_Dtc_Ajc_B_CodegenDpBaseLPFilter': 0, + 'Vc_Dtc_Ajc_B_CodegenDpClutch': 1, + 'Vc_Dtc_Ajc_B_CodegenDpRegenGain': 1, + 'Vc_Dtc_Ajc_B_CodegenDpSportMode': 1, + 'Vc_Dtc_Ajc_B_CodegenDpTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenDpZeroCrossComp': 1, + 'Vc_Dtc_Ajc_B_CodegenLowTrqDetect': 1, + 'Vc_Dtc_Ajc_B_CodegenNewAjc': 0, + 'Vc_Dtc_Ajc_B_CodegenTiAccPedComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiAccPedRate': 1, + 'Vc_Dtc_Ajc_B_CodegenTiAtmoPres': 1, + 'Vc_Dtc_Ajc_B_CodegenTiConvComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiConvLim': 1, + 'Vc_Dtc_Ajc_B_CodegenTiEGTGain': 1, + 'Vc_Dtc_Ajc_B_CodegenTiLP': 1, + 'Vc_Dtc_Ajc_B_CodegenTiOverrunGain': 0, + 'Vc_Dtc_Ajc_B_CodegenTiSportMode': 1, + 'Vc_Dtc_Ajc_B_CodegenTiTemp': 1, + 'Vc_Dtc_Ajc_B_CodegenTiTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenTiTqRsv': 1, + 'Vc_Dtc_Ajc_B_CodegenTiZeroCrossComp': 1, + 'Vc_Dtc_Ajc_B_CodegenTosHDC': 0, + 'Vc_Dtc_Ajc_B_CodegenTrailerLim': 0, + 'Vc_Dtc_As_B_Codegen6thOrderFilt_Ndiff': 0, + 'Vc_Dtc_Atf_B_CodeGenAcCut': 0, + 'Vc_Dtc_Atf_B_CodeGenAltCut': 0, + 'Vc_Dtc_Atf_B_CodeGenCGEA': 0, + 'Vc_Dtc_Cta_B_CodegenAT': 1, + 'Vc_Dtc_Cta_B_CodegenBTL': 0, + 'Vc_Dtc_Cta_B_CodegenInertia': 1, + 'Vc_Dtc_Cta_B_CodegenMT': 1, + 'Vc_Dtc_Cta_B_CodegenShaftProt': 1, + 'Vc_Dtc_Dc_B_CodegenAT': 1, + 'Vc_Dtc_Esc_B_CodegenAT': 1, + 'Vc_Dtc_Esc_B_CodegenMT': 1, + 'Vc_Dtc_Esc_B_CodegenMonAT': 1, + 'Vc_Dtc_Esc_B_CodegenMonPS': 0, + 'Vc_Dtc_Ffl_B_CodegenFfl': 1, + 'Vc_Dtc_Ffl_B_CodegenFflInertia': 0, + 'Vc_Dtc_Isc_B_CodegenPIDBase': 1, + 'Vc_Dtc_Isc_B_CodegenTorqueReserve': 1, + 'Vc_Dtc_Rct_B_CodegenCtr': 1, + 'Vc_Dtc_Rct_B_CodegenInertiaCmp': 1, + 'Vc_Dtc_Rct_B_CodegenMT': 1, + 'Vc_Dtc_Rct_B_CodegenPS': 0, + 'Vc_Dtc_Tc_B_CodegenOilTorqueLimit': 1, + 'Vc_Dtc_Tc_B_CodegenTqRsv': 1, + 'Vc_Dtc_Tc_B_CodgenACTrqRsvReq': 1, + 'Vc_Emi_Gpf_B_CodeGenSelIf': 1, + 'Vc_ExtVar_B_CodeGenCGEA': 0, + 'Vc_ExtVar_B_CodeGenOilLevSens': 1, + 'Vc_ExtVar_B_CodeGenRegenCharge': 0, + 'Vc_ExtVar_B_CodeGenTOC': 0, + 'Vc_Ext_In_B_CanMod': 1, + 'Vc_Ext_In_B_CodeGenASLTestButton': 0, + 'Vc_Ext_In_B_CodeGenHack': 0, + 'Vc_Ext_In_B_PhevHighIdle': 1, + 'Vc_Ext_In_B_VEATestinSI6': 0, + 'Vc_Ext_Out_B_CodeGenASLUseCcLamp': 0, + 'Vc_Ext_Out_B_CodeGenAccDistCtlActv': 0, + 'Vc_Ext_Out_B_CodeGenAesVEAX0b': 1, + 'Vc_Ext_Out_B_CodegenVEA': 1, + 'Vc_Fsd_Pc_B_CodeGenAntiClogging': 0, + 'Vc_Ftiv_Mon_B_Ftiv': 0, + 'Vc_Fuel_Ctrl_B_CodeGenFuDev': 0, + 'Vc_Fuel_Ctrl_B_CodeGenHeatFu': 0, + 'Vc_Fuel_Ctrl_B_CodeGenMonVap': 0, + 'Vc_Ign_B_CodeGen4CylLogic': 0, + 'Vc_Ign_B_CodeGenPetrolEgr': 0, + 'Vc_Lam_B_CodeGenLVGAct': 0, + 'Vc_Lin_CptM_B_Alternator12V': 0, + 'Vc_Lin_CptM_B_EDWaterPump': 1, + 'Vc_Lin_CptM_B_EWaterPump': 0, + 'Vc_Lin_CptM_B_ElAC': 1, + 'Vc_Lin_CptM_B_GrillShutter': 1, + 'Vc_Lin_CptM_B_SPA': 1, + 'Vc_Lin_CptM_B_SpoilerShutter': 1, + 'Vc_Lin_CptM_B_VEP': 1, + 'Vc_Lin_CptM_B_VEP315H': 0, + 'Vc_NewDiagnosticCoreIF': 1, + 'Vc_Nvm_B_CodeGenNvmSync': 1, + 'Vc_Nvm_B_CodeGenNvmSyncDebug': 0, + 'Vc_Nvm_Codegen': 1, + 'Vc_Obd_Cmn_B_CodeGenAmbT': 1, + 'Vc_Obd_Cmn_B_CodeGenBoostT': 1, + 'Vc_Obd_Cmn_B_CodeGenBoostT2': 0, + 'Vc_Obd_Cmn_B_CodeGenCisgT': 0, + 'Vc_Obd_Cmn_B_CodeGenClntT': 1, + 'Vc_Obd_Cmn_B_CodeGenEcmInit': 1, + 'Vc_Obd_Cmn_B_CodeGenInManiT': 1, + 'Vc_Obd_Cmn_B_CodeGenInitReq': 1, + 'Vc_Obd_Cmn_B_CodeGenIntkT': 0, + 'Vc_Obd_Cmn_B_CodeGenLtClntWcacT': 0, + 'Vc_Obd_Cmn_B_CodeGenObdExe': 1, + 'Vc_Obd_Cmn_B_CodeGenOilT': 1, + 'Vc_Obd_Cmn_B_CodeGenPowerPulseT': 0, + 'Vc_Obd_Cmn_B_CodeGenPreHeatDet': 1, + 'Vc_Obd_Cmn_B_CodeGenTempAve': 1, + 'Vc_Obd_Gpf_B_CodeGenSelIf': 1, + 'Vc_Obd_Sch_B_ObdSch': 0, + 'Vc_Oil_Lvl_B_CodeGenPHEV': 0, + 'Vc_Oil_Lvl_B_CodeGenStck': 1, + 'Vc_Oil_Lvl_B_CodeGenVEA': 1, + 'Vc_Oil_PrMon_B_CodeGen2ModOilPmp': 1, + 'Vc_Oil_Pr_B_CodeGenPIDCtrl': 0, + 'Vc_Oil_Pr_B_CodeGenResetCtrl': 0, + 'Vc_Oil_Pr_B_CodeGenVEP': 1, + 'Vc_Oil_Pr_B_CodeGenVvtPwmBst': 0, + 'Vc_Pem_Alc_B_CodegenDpfRegen': 1, + 'Vc_Pem_Alc_B_CodegenFastCat': 1, + 'Vc_Pem_Alc_B_CodegenStart': 1, + 'Vc_Pem_Alc_B_Codegen_AcCut': 1, + 'Vc_Pem_Alc_B_Codegen_AltCut': 1, + 'Vc_Pem_Alc_B_Codegen_Controller': 1, + 'Vc_Ppm_B_CodegenRemoteStart': 1, + 'Vc_Ppm_Imob_B_ImobSkipAllowed': 0, + 'Vc_Ppm_Psm_B_CodegenKERS': 0, + 'Vc_Ppm_Psm_D_CodegenSysRly': 1, + 'Vc_Ppm_Rc_B_Glow': 0, + 'Vc_Ppm_St_B_CodeGenEmsPowerPackStatus': 0, + 'Vc_Ppm_St_B_CodeGenIntIceStatus': 0, + 'Vc_Pvc_Hw_B_12VStartMotor': 0, + 'Vc_Pvc_Hw_B_AT': 1, + 'Vc_Pvc_Hw_B_Awd': 0, + 'Vc_Pvc_Hw_B_Bev': 1, + 'Vc_Pvc_Hw_B_Diesel': 0, + 'Vc_Pvc_Hw_B_DualClutchGbx': 0, + 'Vc_Pvc_Hw_B_DualErad': 0, + 'Vc_Pvc_Hw_B_EClutch': 0, + 'Vc_Pvc_Hw_B_Efad': 1, + 'Vc_Pvc_Hw_B_Erad': 1, + 'Vc_Pvc_Hw_B_Gep3Gen1': 1, + 'Vc_Pvc_Hw_B_HVSystem': 1, + 'Vc_Pvc_Hw_B_Isg': 0, + 'Vc_Pvc_Hw_B_MT': 0, + 'Vc_Pvc_Hw_B_MVSystem': 0, + 'Vc_Pvc_Hw_B_ManualClutch': 0, + 'Vc_Pvc_Hw_B_Petrol': 0, + 'Vc_Pvc_Hw_B_RangeExtender': 0, + 'Vc_Pvc_Hw_B_TqConverterGbx': 0, + 'Vc_Pvc_Hw_B_VeaGen1': 0, + 'Vc_Pvc_Hw_B_VeaGen2': 0, + 'Vc_Pvc_Hw_B_VeaGen3': 0, + 'Vc_Pvc_Sw_B_IdleCoast': 0, + 'Vc_Pvc_Sw_B_StopStart': 0, + 'Vc_Reg_Ch_B_CodeGenDID': 1, + 'Vc_Reg_Ch_B_CodegenAltCut': 1, + 'Vc_Reg_Ch_B_CodegenCostEms': 1, + 'Vc_Reg_Ch_B_CodegenCostSpm': 0, + 'Vc_Reg_Ch_B_CodegenDpfRegen': 1, + 'Vc_Reg_Ch_B_CodegenFastCat': 1, + 'Vc_Reg_Ch_B_CodegenFuelpumpBoost': 1, + 'Vc_Reg_Ch_B_CodegenInjComp': 1, + 'Vc_Sc_Dep_B_CodeGenDepPropAllowed': 1, + 'Vc_Sc_Dep_B_CodegenEngPosition': 0, + 'Vc_Sc_Dep_B_GenDepAccPedalPosition': 1, + 'Vc_Sc_Dep_B_UseEMSClutchPedalPosition': 1, + 'Vc_Sc_Feh_B_HEP7': 1, + 'Vc_Sc_Feh_B_HRE': 0, + 'Vc_Sc_In_RegenByPaddles': 1, + 'Vc_Sp_B_CruiseDownHill': 0, + 'Vc_Sp_B_DriverEvaluator': 1, + 'Vc_Sp_B_FanRequest': 0, + 'Vc_Sp_B_GLMMonitor': 0, + 'Vc_Sp_B_GradeEstimator': 0, + 'Vc_Sp_B_HEV': 0, + 'Vc_Sp_B_IntermediateGear': 1, + 'Vc_Sp_B_LTS': 1, + 'Vc_Sp_B_OpenLUEngSpeed': 0, + 'Vc_Sp_B_PredictiveUpShift': 1, + 'Vc_Sp_B_SportInit': 1, + 'Vc_Sp_B_TransMode': 1, + 'Vc_Tc_Dir_B_CodeGenElectcPrndCtrl': 0, + 'Vc_Temp_StkM_B_CodeGenBoost': 1, + 'Vc_Temp_StkM_B_CodeGenBoostT2': 0, + 'Vc_Temp_StkM_B_CodeGenClnt': 1, + 'Vc_Temp_StkM_B_CodeGenInMani': 1, + 'Vc_Temp_StkM_B_CodeGenLtClntWcacT': 0, + 'Vc_Temp_StkM_B_CodeGenMaf': 0, + 'Vc_Temp_StkM_B_CodeGenPowerPulseT': 0, + 'Vc_Temp_ThM_B_CodeGenThms': 0, + 'Vc_Tm_Af_B_CodeGenLnrAirFlowCalcn': 0, + 'Vc_Tm_Af_B_CodeGenMapAirFlowCalcn': 1, + 'Vc_Tm_Af_B_CodeGenMovCtrDenso': 1, + 'Vc_Tm_Af_B_CodeGenShttrSeqCtrl': 1, + 'Vc_Tm_Af_B_CodeGenShttrSyncCtrl': 0, + 'Vc_Tm_Efl_B_CodeGenAuxWtrPmpReqHandler': 0, + 'Vc_Tm_Efl_B_CodeGenClntFlwFb': 1, + 'Vc_Tm_Efl_B_CodeGenClntFlwRequestHandler': 0, + 'Vc_Tm_Efl_B_CodeGenClntSetpoint': 0, + 'Vc_Tm_Efl_B_CodeGenCwpHvac': 0, + 'Vc_Tm_Efl_B_CodeGenEgrPmpHandler': 0, + 'Vc_Tm_Efl_B_CodeGenEwpRly': 0, + 'Vc_Tm_Efl_B_CodeGenRadClntFlowRequest': 0, + 'Vc_Tm_Efl_B_CodeGenSpoilerShutter': 1, + 'Vc_Tm_Efl_B_CodeGenThermostatOpenRequest': 0, + 'Vc_Tm_Efl_B_CodeGenValveHandler': 0, + 'Vc_Tm_Efl_B_CodeGenWtrPmpAftRun': 0, + 'Vc_Trq_B_CodeGenMaxNoBoost': 1, + 'Vc_Trq_Req_B_CodeGenTrqDlyTCM': 0, + 'Vc_Vmc_Ajc_B_CodegenCcCancel': 1, + 'Vc_Vmc_Ajc_B_CodegenDpBase': 1, + 'Vc_Vmc_Ajc_B_CodegenDpBaseLPFilter': 0, + 'Vc_Vmc_Ajc_B_CodegenDpClutch': 1, + 'Vc_Vmc_Ajc_B_CodegenDpRegenGain': 1, + 'Vc_Vmc_Ajc_B_CodegenDpSlowFast': 1, + 'Vc_Vmc_Ajc_B_CodegenDpSlowFast12Maps': 0, + 'Vc_Vmc_Ajc_B_CodegenDpSportMode': 1, + 'Vc_Vmc_Ajc_B_CodegenDpTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenDpZeroCrossComp': 1, + 'Vc_Vmc_Ajc_B_CodegenLowTrqDetect': 1, + 'Vc_Vmc_Ajc_B_CodegenTiAccPedRate': 1, + 'Vc_Vmc_Ajc_B_CodegenTiAtmoPres': 1, + 'Vc_Vmc_Ajc_B_CodegenTiConvComp': 1, + 'Vc_Vmc_Ajc_B_CodegenTiConvLim': 1, + 'Vc_Vmc_Ajc_B_CodegenTiEGTGain': 1, + 'Vc_Vmc_Ajc_B_CodegenTiLP': 1, + 'Vc_Vmc_Ajc_B_CodegenTiOverrunGain': 0, + 'Vc_Vmc_Ajc_B_CodegenTiSlowFast': 1, + 'Vc_Vmc_Ajc_B_CodegenTiSlowFast12Maps': 0, + 'Vc_Vmc_Ajc_B_CodegenTiSportMode': 1, + 'Vc_Vmc_Ajc_B_CodegenTiTemp': 1, + 'Vc_Vmc_Ajc_B_CodegenTiTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenTiTqRsv': 1, + 'Vc_Vmc_Ajc_B_CodegenTiZeroCrossComp': 1, + 'Vc_Vmc_Ajc_B_CodegenTosHDC': 0, + 'Vc_Vmc_Ajc_B_CodegenTrailerLim': 0, + 'Vc_Vmc_Crp_B_CodegenCreep': 1, + 'Vc_Vmc_Em_CodeGenStartStop': 0, + 'Vc_Vmc_Pmm_B_CodegenAT': 1, + 'Vc_Vmc_Pmm_B_CodegenPS': 0 + } +} diff --git a/tests/pybuild/test_a2l.py b/tests/pybuild/test_a2l.py new file mode 100644 index 0000000..92ddad8 --- /dev/null +++ b/tests/pybuild/test_a2l.py @@ -0,0 +1,663 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for a2l.py.""" + +from copy import deepcopy +import unittest +from unittest.mock import MagicMock +from pybuild.a2l import A2l +from pybuild.build_proj_config import BuildProjConfig + +A2L_DATA = { + "function": "rVcAesSupM", + "vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "var": { + "type": "Float32", + "cvc_type": "CVC_DISP" + }, + "a2l_data": { + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "bitmask": None, + "x_axis": None, + "y_axis": None, + }, + "array": None + }, + "cVcAesSupM_B_SupMonrHiBypFiMPerm": { + "var": { + "type": "Bool", + "cvc_type": "CVC_CAL" + }, + "a2l_data": { + "unit": "", + "description": "Switch to bypass FiM permission supercharger high boost monitor", + "max": 1, + "min": 0, + "lsb": 1, + "offset": 0 + } + }, + "tVcAesSupM_tc_SupMonrSCTarDly": { + "var": { + "type": "Float32", + "cvc_type": "CVC_CAL", + }, + "a2l_data": { + "unit": "s", + "description": "Supercharger boost pressure monitor target pressure " + "lowpass filter time constant engine speed support points", + "max": "100", + "min": "0", + "lsb": "1", + "offset": "0", + "x_axis": None + }, + "array": [6] + }, + "tVcAesSupM_tc_SupMonrSCTarDly_x": { + "var": { + "type": "Float32", + "cvc_type": "CVC_CAL" + }, + "a2l_data": { + "unit": "rpm", + "description": "Supercharger boost pressure monitor target pressure " + "lowpass filter time constant engine speed support points", + "max": "10000", + "min": "0", + "lsb": "1", + "offset": "0" + }, + "array": [6] + }, + "mVcAesSupM_m_SupChrgrStuckMaxLoadLim_y": { + "var": { + "type": "UInt16", + "cvc_type": "CVC_CAL" + }, + "a2l_data": { + "unit": "rpm", + "description": "Engine speed breakpoint data for supercharger stuck load limit", + "max": "10000", + "min": "0", + "lsb": "0.25", + "offset": "0", + }, + "array": [4] + }, + "mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x": { + "var": { + "type": "UInt16", + "cvc_type": "CVC_CAL" + }, + "a2l_data": { + "unit": "kPa", + "description": "Ambient Pressure breakpoint data for supercharger stuck load limit", + "max": "200", + "min": "0", + "lsb": "0.0039063", + "offset": "0", + }, + "array": [3] + }, + "mVcAesSupM_m_SupChrgrStuckMaxLoadLim": { + "var": { + "type": "UInt16", + "cvc_type": "CVC_CAL" + }, + "a2l_data": { + "unit": "g/rev", + "description": "Supercharger stuck load limit", + "max": "5", + "min": "0", + "lsb": "0.00024414", + "offset": "0", + "x_axis": None, + "y_axis": None + }, + "array": [3, 4] + }, + "not_a2l_var": { + "var": None, + "a2l_data": None + } + } +} + +A2L_OUTPUT = ("\n" + " /begin CHARACTERISTIC\n" + " cVcAesSupM_B_SupMonrHiBypFiMPerm /* Name */\n" + " \"Switch to bypass FiM permission supercharger high boost monitor\" /* LongIdentifier */\n" + " VALUE /* Datatype */\n" + " 0x00000000 /* address: cVcAesSupM_B_SupMonrHiBypFiMPerm */\n" + " UBYTE_COL_DIRECT /* Deposit */\n" + " 0 /* MaxDiff */\n" + " rVcAesSupM_1_0_0_ /* Conversion */\n" + " 0 /* LowerLimit */\n" + " 1 /* UpperLimit */\n" + " /end CHARACTERISTIC\n" + "\n" + " /begin CHARACTERISTIC\n" + " tVcAesSupM_tc_SupMonrSCTarDly /* Name */\n" + " \"Supercharger boost pressure monitor target pressure lowpass filter time constant engine" + " speed support points\" /* LongIdentifier */\n" + " CURVE /* Datatype */\n" + " 0x00000000 /* address: tVcAesSupM_tc_SupMonrSCTarDly */\n" + " FLOAT32_IEEE_COL_DIRECT /* Deposit */\n" + " 0 /* MaxDiff */\n" + " rVcAesSupM_1_0_0_0_s /* Conversion */\n" + " 0 /* LowerLimit */\n" + " 100 /* UpperLimit */\n" + " /begin AXIS_DESCR\n" + " COM_AXIS /* Attribute */\n" + " NO_INPUT_QUANTITY /* InputQuantity */\n" + " rVcAesSupM_1_0_0_0_rpm /* Conversion */\n" + " 6 /* MaxAxisPoints */\n" + " 0 /* LowerLimit */\n" + " 10000 /* UpperLimit */\n" + " AXIS_PTS_REF tVcAesSupM_tc_SupMonrSCTarDly_x\n" + " DEPOSIT ABSOLUTE\n" + " /end AXIS_DESCR\n" + " /end CHARACTERISTIC\n" + "\n" + " /begin CHARACTERISTIC\n" + " mVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Name */\n" + " \"Supercharger stuck load limit\" /* LongIdentifier */\n" + " MAP /* Datatype */\n" + " 0x00000000 /* address: mVcAesSupM_m_SupChrgrStuckMaxLoadLim */\n" + " UWORD_COL_DIRECT /* Deposit */\n" + " 0 /* MaxDiff */\n" + " rVcAesSupM_0_00024414_0_0_g_rev /* Conversion */\n" + " 0 /* LowerLimit */\n" + " 5 /* UpperLimit */\n" + " /begin AXIS_DESCR\n" + " COM_AXIS /* Attribute */\n" + " NO_INPUT_QUANTITY /* InputQuantity */\n" + " rVcAesSupM_0_0039063_0_0_kPa /* Conversion */\n" + " 3 /* MaxAxisPoints */\n" + " 0 /* LowerLimit */\n" + " 200 /* UpperLimit */\n" + " AXIS_PTS_REF mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x\n" + " DEPOSIT ABSOLUTE\n" + " /end AXIS_DESCR\n" + " /begin AXIS_DESCR\n" + " COM_AXIS /* Attribute */\n" + " NO_INPUT_QUANTITY /* InputQuantity */\n" + " rVcAesSupM_0_25_0_0_rpm /* Conversion */\n" + " 4 /* MaxAxisPoints */\n" + " 0 /* LowerLimit */\n" + " 10000 /* UpperLimit */\n" + " AXIS_PTS_REF mVcAesSupM_m_SupChrgrStuckMaxLoadLim_y\n" + " DEPOSIT ABSOLUTE\n" + " /end AXIS_DESCR\n" + " /end CHARACTERISTIC\n" + "\n" + " /begin AXIS_PTS\n" + " tVcAesSupM_tc_SupMonrSCTarDly_x /* Name */\n" + " \"Supercharger boost pressure monitor target pressure lowpass filter time constant engine" + " speed support points\" /* LongIdentifier */\n" + " 0x00000000\n" + " NO_INPUT_QUANTITY /* InputQuantity */\n" + " FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */\n" + " 0 /* MaxDiff */\n" + " rVcAesSupM_1_0_0_0_rpm /* Conversion */\n" + " 6 /* MaxAxisPoints */\n" + " 0 /* LowerLimit */\n" + " 10000 /* UpperLimit */\n" + " DEPOSIT ABSOLUTE\n" + " /end AXIS_PTS\n" + "\n" + " /begin AXIS_PTS\n" + " mVcAesSupM_m_SupChrgrStuckMaxLoadLim_y /* Name */\n" + " \"Engine speed breakpoint data for supercharger stuck load limit\" /* LongIdentifier */\n" + " 0x00000000\n" + " NO_INPUT_QUANTITY /* InputQuantity */\n" + " UWORD_X_INCR_DIRECT /* Deposit */\n" + " 0 /* MaxDiff */\n" + " rVcAesSupM_0_25_0_0_rpm /* Conversion */\n" + " 4 /* MaxAxisPoints */\n" + " 0 /* LowerLimit */\n" + " 10000 /* UpperLimit */\n" + " DEPOSIT ABSOLUTE\n" + " /end AXIS_PTS\n" + "\n" + " /begin AXIS_PTS\n" + " mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x /* Name */\n" + " \"Ambient Pressure breakpoint data for supercharger stuck load limit\" /* LongIdentifier */\n" + " 0x00000000\n" + " NO_INPUT_QUANTITY /* InputQuantity */\n" + " UWORD_X_INCR_DIRECT /* Deposit */\n" + " 0 /* MaxDiff */\n" + " rVcAesSupM_0_0039063_0_0_kPa /* Conversion */\n" + " 3 /* MaxAxisPoints */\n" + " 0 /* LowerLimit */\n" + " 200 /* UpperLimit */\n" + " DEPOSIT ABSOLUTE\n" + " /end AXIS_PTS\n" + "\n" + " /begin MEASUREMENT\n" + " rVcAesSupM_p_SupMonrSCTarDly /* Name */\n" + " \"Low pass filtered supercharger target pressure\" /* LongIdentifier */\n" + " FLOAT32_IEEE /* Datatype */\n" + " rVcAesSupM_1_0_0_0_kPa /* Conversion */\n" + " 1 /* Resolution */\n" + " 0 /* Accuracy */\n" + " 0 /* LowerLimit */\n" + " 300 /* UpperLimit */\n" + " READ_WRITE\n" + " ECU_ADDRESS 0x00000000\n" + " /end MEASUREMENT\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_1_0_0_0_kPa /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"kPa\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 1.0\n" + " /end COMPU_METHOD\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_1_0_0_ /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 1\n" + " /end COMPU_METHOD\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_1_0_0_0_s /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"s\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 1.0\n" + " /end COMPU_METHOD\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_1_0_0_0_rpm /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"rpm\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 1.0\n" + " /end COMPU_METHOD\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_0_25_0_0_rpm /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"rpm\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 0.25\n" + " /end COMPU_METHOD\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_0_0039063_0_0_kPa /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"kPa\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 0.0039063\n" + " /end COMPU_METHOD\n" + "\n" + " /begin COMPU_METHOD\n" + " rVcAesSupM_0_00024414_0_0_g_rev /* Name */\n" + " \"\" /* LongIdentifier */\n" + " RAT_FUNC /* ConversionType */\n" + " \"%11.3\" /* Format */\n" + " \"g/rev\" /* Unit */\n" + " COEFFS 0 1 0.0 0 0 0.00024414\n" + " /end COMPU_METHOD\n" + "\n" + " /begin FUNCTION\n" + " rVcAesSupM /* Name */\n" + " \"\" /* LongIdentifier */\n" + " /begin DEF_CHARACTERISTIC\n" + " cVcAesSupM_B_SupMonrHiBypFiMPerm /* Identifier */\n" + " tVcAesSupM_tc_SupMonrSCTarDly /* Identifier */\n" + " tVcAesSupM_tc_SupMonrSCTarDly_x /* Identifier */\n" + " mVcAesSupM_m_SupChrgrStuckMaxLoadLim_y /* Identifier */\n" + " mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x /* Identifier */\n" + " mVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Identifier */\n" + " /end DEF_CHARACTERISTIC\n" + " /begin LOC_MEASUREMENT\n" + " rVcAesSupM_p_SupMonrSCTarDly /* Identifier */\n" + " /end LOC_MEASUREMENT\n" + " /end FUNCTION\n" + "\n" + " /begin RECORD_LAYOUT\n" + " FLOAT32_IEEE_COL_DIRECT /* Name */\n" + " FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT\n" + " /end RECORD_LAYOUT\n" + "\n" + " /begin RECORD_LAYOUT\n" + " UBYTE_COL_DIRECT /* Name */\n" + " FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT\n" + " /end RECORD_LAYOUT\n" + "\n" + " /begin RECORD_LAYOUT\n" + " FLOAT32_IEEE_X_INCR_DIRECT /* Name */\n" + " AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT\n" + " /end RECORD_LAYOUT\n" + "\n" + " /begin RECORD_LAYOUT\n" + " UWORD_X_INCR_DIRECT /* Name */\n" + " AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT\n" + " /end RECORD_LAYOUT\n" + "\n" + " /begin RECORD_LAYOUT\n" + " UWORD_COL_DIRECT /* Name */\n" + " FNC_VALUES 1 UWORD COLUMN_DIR DIRECT\n" + " /end RECORD_LAYOUT\n") + + +class TestA2l(unittest.TestCase): + """Test case for testing the A2l class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.a2l = A2l(A2L_DATA, self.build_cfg) + + def test_init_a2l(self): + """Test generation of a2l string from given dict.""" + self.assertEqual(self.a2l._a2lstr, A2L_OUTPUT) + + def test_init_a2l_invalid(self): + """Test generation of a2l string from invalid dict.""" + invalid = deepcopy(A2L_DATA) + del invalid['vars']['rVcAesSupM_p_SupMonrSCTarDly']['var']['cvc_type'] + self.assertRaises(KeyError, A2l, invalid, self.build_cfg) + + def test_find_axis_data(self): + """Test parsing of all variables to identify axis points.""" + self.a2l._find_axis_data() + result = self.a2l._axis_data + expected = { + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim': ('mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x', + 'mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x'), + 'tVcAesSupM_tc_SupMonrSCTarDly': ('tVcAesSupM_tc_SupMonrSCTarDly_x', None)} + self.assertEqual(result, expected) + + def test_find_axis_ref(self): + """Test parsing of all variables to identify which are defined as axis points.""" + self.a2l._find_axis_ref() + result = self.a2l._axis_ref + expected = {} + self.assertEqual(result, expected) + + def test_get_a2d_minmax(self): + """Test getting min max limits from a2l data.""" + minlim, maxlim = self.a2l._get_a2d_minmax({'min': '0', 'max': '100'}) + self.assertEqual(minlim, '0') + self.assertEqual(maxlim, '100') + minlim, maxlim = self.a2l._get_a2d_minmax({}) + self.assertEqual(minlim, '-1e38') + self.assertEqual(maxlim, '1e38') + + def test_check_axis_ref(self): + """Test check of axis definitions.""" + self.a2l.clear_log() + self.a2l._check_axis_ref() + self.assertEqual(self.a2l.get_nbr_problems(), {'critical': 0, 'warning': 0}) + + def test_check_axis_ref_invalid(self): + """Test check of axis definitions.""" + invalid = deepcopy(A2L_DATA) + invalid['vars']['rVcAesSupM_p_SupMonrSCTarDly']['a2l_data']['x_axis'] = 'undefined_variable' + invalid['vars']['rVcAesSupM_p_SupMonrSCTarDly']['a2l_data']['y_axis'] = 'undefined_variable2' + invalid['vars']['cVcAesSupM_B_SupMonrHiBypFiMPerm']['a2l_data']['x_axis'] = 'undefined_variable' + invalid['vars']['cVcAesSupM_B_SupMonrHiBypFiMPerm']['a2l_data']['y_axis'] = 'undefined_variable2' + a2l = A2l(invalid, self.build_cfg) + a2l.clear_log() + a2l._check_axis_ref() + self.assertEqual(a2l.get_nbr_problems(), {'critical': 0, 'warning': 1}) + + def test_gen_compu_methods(self): + """Test generation of COMPU_METHOD data.""" + self.a2l._gen_compu_methods() + result = self.a2l._compu_meths + expected = { + (0.00024414, 0.0, 'g/rev'): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 0.00024414', + 'name': 'rVcAesSupM_0_00024414_0_0_g_rev', + 'vars': ['mVcAesSupM_m_SupChrgrStuckMaxLoadLim']}, + (0.0039063, 0.0, 'kPa'): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 0.0039063', + 'name': 'rVcAesSupM_0_0039063_0_0_kPa', + 'vars': ['mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x']}, + (0.25, 0.0, 'rpm'): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 0.25', + 'name': 'rVcAesSupM_0_25_0_0_rpm', + 'vars': ['mVcAesSupM_m_SupChrgrStuckMaxLoadLim_y']}, + (1, 0.0, ''): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 1', + 'name': 'rVcAesSupM_1_0_0_', + 'vars': ['cVcAesSupM_B_SupMonrHiBypFiMPerm']}, + (1.0, 0.0, 'kPa'): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 1.0', + 'name': 'rVcAesSupM_1_0_0_0_kPa', + 'vars': ['rVcAesSupM_p_SupMonrSCTarDly']}, + (1.0, 0.0, 'rpm'): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 1.0', + 'name': 'rVcAesSupM_1_0_0_0_rpm', + 'vars': ['tVcAesSupM_tc_SupMonrSCTarDly_x']}, + (1.0, 0.0, 's'): { + 'coeffs': 'COEFFS 0 1 0.0 0 0 1.0', + 'name': 'rVcAesSupM_1_0_0_0_s', + 'vars': ['tVcAesSupM_tc_SupMonrSCTarDly']}} + self.assertEqual(result, expected) + + def test_compu_key_2_name(self): + """Test generation of COMPU_METHOD name from the keys in the name.""" + result = self.a2l._compu_key_2_name((1, 0, 'km/h')) + expected = 'rVcAesSupM_1_0_km_h' + self.assertEqual(result, expected) + + def test_array_to_a2l_string(self): + """Test conversion of c-style array definitions to A2L MATRIX_DIM style.""" + result = self.a2l._array_to_a2l_string([1, 2, 3]) + expected = 'MATRIX_DIM 1 2 3' + self.assertEqual(result, expected) + + def test_get_coefs_str(self): + """Test calculation of a2l-coeffs from the lsb and offs fields.""" + result = self.a2l._get_coefs_str(2, 3) + expected = 'COEFFS 0 1 3 0 0 2' + self.assertEqual(result, expected) + + def test_calc_lsb(self): + """Test conversion of 2^-2, style lsbs to numericals.""" + result = self.a2l._calc_lsb(1) + expected = 1 + self.assertEqual(result, expected) + result = self.a2l._calc_lsb('2') + expected = 2 + self.assertEqual(result, expected) + result = self.a2l._calc_lsb('2^-2') + expected = 0.25 + self.assertEqual(result, expected) + + def test_gen_record_layouts_data(self): + """Test generation of record layouts.""" + self.a2l._gen_record_layouts_data() + result = self.a2l._rec_layouts + expected = { + 'FLOAT32_IEEE_COL_DIRECT': 'FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT', + 'FLOAT32_IEEE_X_INCR_DIRECT': 'AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT', + 'UBYTE_COL_DIRECT': 'FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT', + 'UWORD_COL_DIRECT': 'FNC_VALUES 1 UWORD COLUMN_DIR DIRECT', + 'UWORD_X_INCR_DIRECT': 'AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT'} + self.assertEqual(result, expected) + + def test_get_inpq_data(self): + """Test InputQuantity parameters. Valid data.""" + result = self.a2l._get_inpq_data('tVcAesSupM_tc_SupMonrSCTarDly_x') + expected = 'tVcAesSupM_tc_SupMonrSCTarDly_x' + self.assertEqual(result, expected) + + def test_get_inpq_data_invalid(self): + """Test InputQuantity parameters. Invalid data.""" + result = self.a2l._get_inpq_data('other_name') + expected = 'NO_INPUT_QUANTITY' + self.assertEqual(result, expected) + result = self.a2l._get_inpq_data(None) + expected = 'NO_INPUT_QUANTITY' + self.assertEqual(result, expected) + + def test_gen_a2l_measurement_blk(self): + """Test generation of a2l MEASUREMENT block. Valid data.""" + var_name = 'rVcAesSupM_p_SupMonrSCTarDly' + data = A2L_DATA['vars'][var_name] + result = self.a2l._gen_a2l_measurement_blk(var_name, data) + expected = ''' + /begin MEASUREMENT + rVcAesSupM_p_SupMonrSCTarDly /* Name */ + "Low pass filtered supercharger target pressure" /* LongIdentifier */ + FLOAT32_IEEE /* Datatype */ + rVcAesSupM_1_0_0_0_kPa /* Conversion */ + 1 /* Resolution */ + 0 /* Accuracy */ + 0 /* LowerLimit */ + 300 /* UpperLimit */ + READ_WRITE + ECU_ADDRESS 0x00000000 + /end MEASUREMENT +''' + self.assertEqual(result, expected) + + def test_gen_a2l_measurement_blk_invalid(self): + """Test generation of a2l MEASUREMENT block. Invalid data""" + var_name = 'rVcAesSupM_p_SupMonrSCTarDly' + data = {} + result = self.a2l._gen_a2l_measurement_blk(var_name, data) + expected = None + self.assertEqual(result, expected) + + def test_gen_a2l_characteristic_blk(self): + """Test generation of a2l CHARACTERISTIC block. Valid data.""" + var_name = 'cVcAesSupM_B_SupMonrHiBypFiMPerm' + data = A2L_DATA['vars'][var_name] + result = self.a2l._gen_a2l_characteristic_blk(var_name, data) + expected = ''' + /begin CHARACTERISTIC + cVcAesSupM_B_SupMonrHiBypFiMPerm /* Name */ + "Switch to bypass FiM permission supercharger high boost monitor" /* LongIdentifier */ + VALUE /* Datatype */ + 0x00000000 /* address: cVcAesSupM_B_SupMonrHiBypFiMPerm */ + UBYTE_COL_DIRECT /* Deposit */ + 0 /* MaxDiff */ + rVcAesSupM_1_0_0_ /* Conversion */ + 0 /* LowerLimit */ + 1 /* UpperLimit */ + /end CHARACTERISTIC +''' + self.assertEqual(result, expected) + + def test_gen_a2l_characteristic_blk_invalid(self): + """Test generation of a2l CHARACTERISTIC block. Invalid data.""" + var_name = 'cVcAesSupM_B_SupMonrHiBypFiMPerm' + data = {} + result = self.a2l._gen_a2l_characteristic_blk(var_name, data) + expected = None + self.assertEqual(result, expected) + + def test_gen_a2l_axis_desc_blk(self): + """Test generation of a2l AXIS_DESCR block.""" + inp_quant = None + axis_pts_ref = 'tVcAesSupM_tc_SupMonrSCTarDly_x' + result = self.a2l._gen_a2l_axis_desc_blk(inp_quant, axis_pts_ref) + expected = ''' + /begin AXIS_DESCR + COM_AXIS /* Attribute */ + NO_INPUT_QUANTITY /* InputQuantity */ + rVcAesSupM_1_0_0_0_rpm /* Conversion */ + 6 /* MaxAxisPoints */ + 0 /* LowerLimit */ + 10000 /* UpperLimit */ + AXIS_PTS_REF tVcAesSupM_tc_SupMonrSCTarDly_x + DEPOSIT ABSOLUTE + /end AXIS_DESCR''' + self.assertEqual(result, expected) + + def test_gen_a2l_compu_metod_blk(self): + """Test generation of a2l COMPU_METHOD block.""" + key = (1.0, 0.0, 'kPa') + result = self.a2l._gen_a2l_compu_metod_blk(key) + expected = ''' + /begin COMPU_METHOD + rVcAesSupM_1_0_0_0_kPa /* Name */ + "" /* LongIdentifier */ + RAT_FUNC /* ConversionType */ + "%11.3" /* Format */ + "kPa" /* Unit */ + COEFFS 0 1 0.0 0 0 1.0 + /end COMPU_METHOD +''' + self.assertEqual(result, expected) + + def test_gen_a2l_axis_pts_blk(self): + """Test generation of a2l AXIS_PTS block.""" + var = 'tVcAesSupM_tc_SupMonrSCTarDly_x' + data = A2L_DATA['vars'][var] + result = self.a2l._gen_a2l_axis_pts_blk(var, data) + expected = ('\n' + ' /begin AXIS_PTS\n' + ' tVcAesSupM_tc_SupMonrSCTarDly_x /* Name */\n' + ' "Supercharger boost pressure monitor target pressure lowpass filter time constant engine' + ' speed support points" /* LongIdentifier */\n' + ' 0x00000000\n' + ' NO_INPUT_QUANTITY /* InputQuantity */\n' + ' FLOAT32_IEEE_X_INCR_DIRECT /* Deposit */\n' + ' 0 /* MaxDiff */\n' + ' rVcAesSupM_1_0_0_0_rpm /* Conversion */\n' + ' 6 /* MaxAxisPoints */\n' + ' 0 /* LowerLimit */\n' + ' 10000 /* UpperLimit */\n' + ' DEPOSIT ABSOLUTE\n' + ' /end AXIS_PTS\n') + self.assertEqual(result, expected) + + def test_gen_a2l_rec_layout_blk(self): + """Test generation of a2l AXIS_PTS block.""" + key = 'FLOAT32_IEEE_COL_DIRECT' + result = self.a2l._gen_a2l_rec_layout_blk(key) + expected = ''' + /begin RECORD_LAYOUT + FLOAT32_IEEE_COL_DIRECT /* Name */ + FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT + /end RECORD_LAYOUT +''' + self.assertEqual(result, expected) + + def test_gen_a2l_function_blk(self): + """Test generation of a2l FUNCTION block.""" + result = self.a2l._gen_a2l_function_blk() + expected = ''' + /begin FUNCTION + rVcAesSupM /* Name */ + "" /* LongIdentifier */ + /begin DEF_CHARACTERISTIC + cVcAesSupM_B_SupMonrHiBypFiMPerm /* Identifier */ + tVcAesSupM_tc_SupMonrSCTarDly /* Identifier */ + tVcAesSupM_tc_SupMonrSCTarDly_x /* Identifier */ + mVcAesSupM_m_SupChrgrStuckMaxLoadLim_y /* Identifier */ + mVcAesSupM_m_SupChrgrStuckMaxLoadLim_x /* Identifier */ + mVcAesSupM_m_SupChrgrStuckMaxLoadLim /* Identifier */ + /end DEF_CHARACTERISTIC + /begin LOC_MEASUREMENT + rVcAesSupM_p_SupMonrSCTarDly /* Identifier */ + /end LOC_MEASUREMENT + /end FUNCTION +''' + self.assertEqual(result, expected) diff --git a/tests/pybuild/test_a2l_merge.py b/tests/pybuild/test_a2l_merge.py new file mode 100644 index 0000000..1a6c2cc --- /dev/null +++ b/tests/pybuild/test_a2l_merge.py @@ -0,0 +1,1038 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for merge_a2l.py.""" + +import unittest +from unittest.mock import mock_open, patch, MagicMock +from pathlib import Path +from pybuild.a2l_merge import A2lMerge +from .a2l_merge_data import A2L_MERGED_1, A2L_MERGED_2 + +# Fake unit config files +UCFG = { + 'VcAesSupM': { + 'inports': {}, + 'outports': {}, + "local_vars": { + "rVcAesSupM_p_SupMonrSCTarDly": { + "type": "Float32", + "unit": "kPa", + "description": "Low pass filtered supercharger target pressure", + "max": "300", + "min": "0", + "lsb": "1", + "offset": "0", + "class": "CVC_DISP", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/" + "1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1" + } + }, + "calib_consts": { + "cVcAesSupM_B_SupMonrHiCluOnSw": { + "type": "Bool", + "unit": "", + "description": "Switch to bypass SC clutch on flag supercharger high boost", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/" + "1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiCluOnSw", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1" + }, + "cVcAesSupM_B_dcl_mimic": { + "type": "Bool", + "unit": "", + "description": "Mimics hand coded a2l files", + "max": " ", + "min": " ", + "lsb": "1", + "offset": "0", + "class": "CVC_CAL", + "handle": "VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/" + "1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiCluOnSw", + "configs": [ + "Vc_Aes_SupM_B_CodeGenSprChrg"], + "width": "1" + } + } + }, +} +SRC_DIR = Path(__file__).parent + + +def chk_if_in_unit(_, label): + """Return true if label is included in the unit.""" + if label in ['rVcAesSupM_p_SupMonrSCTarDly', 'cVcAesSupM_B_SupMonrHiCluOnSw']: + return True + return False + + +class TestA2lMerge(unittest.TestCase): + """Test case for testing the A2lMerge class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.prj_cfg = MagicMock() + self.prj_cfg.get_unit_cfg_deliv_dir.return_value = 'mocked' + self.prj_cfg.get_prj_config.return_value = 'GEP3_SPA' # Just a dummy project + self.ucfg = MagicMock() + self.ucfg.check_if_in_unit_cfg.side_effect = chk_if_in_unit + self.ucfg.get_per_unit_cfg.return_value = UCFG + + def test_init(self): + """Test parsing of a2l-files.""" + a2l = A2lMerge(self.prj_cfg, self.ucfg, + [str(Path(SRC_DIR, 'cnfg_files', 'VcAesSupM.a2l'))], + [str(Path(SRC_DIR, 'cnfg_files', 'test.a2l'))]) + result = a2l._blks + expected = A2L_MERGED_1 + self.assertDictEqual(result, expected) + + def test_init_no_unit(self): + """Test parsing of a2l-files not matching any unit-name.""" + a2l = A2lMerge(self.prj_cfg, self.ucfg, + [str(Path(SRC_DIR, 'cnfg_files', 'test_mrg__kalle.a2l'))], + [str(Path(SRC_DIR, 'cnfg_files', 'test.a2l'))]) + result = a2l._blks + expected = A2L_MERGED_2 + self.assertEqual(result, expected) + + def test_init_no_file(self): + """Test using A2lMerge with invalid filename.""" + self.assertRaises(FileNotFoundError, A2lMerge, self.prj_cfg, self.ucfg, + [str(Path(SRC_DIR, 'cnfg_files', 'missing_file.a2l'))], + [str(Path(SRC_DIR, 'cnfg_files', 'test.a2l'))]) + + def test_multiple_definitions(self): + """Example from VEP4_GEN3_LP_7DCT-61""" + ucfg = { + 'test_consumer': { + 'inports': { + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVexhTar/VcVexhTar/Subsystem/VcVexhTar/input_3", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE))", + "description": "Target gear ", + "type": "Int8", + "unit": "-", + "offset": -1, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + }, + 'outports': {}, + "local_vars": {}, + "calib_consts": {} + }, + 'test_producer': { + 'outports': { + "sVcDtcAtr_D_TrgGear": { + "handle": "VcDtcAtr/VcDtcAtr/Subsystem/VcDtcAtr/sVcDtcAtr_D_TrgGear", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE))", + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_DISP", + "width": 1 + }, + }, + 'inports': {}, + "local_vars": {}, + "calib_consts": {} + }, + } + self.ucfg.get_per_unit_cfg.return_value = ucfg + + a2l = A2lMerge( + self.prj_cfg, self.ucfg, + [ + str(Path(SRC_DIR, 'cnfg_files', 'test_producer.a2l')), + str(Path(SRC_DIR, 'cnfg_files', 'test_consumer.a2l')), + ], + [] + ) + result = a2l._blks + expected = { + 'COMPU_METHOD': {'Scaling_1': ' /begin COMPU_METHOD\n' + ' Scaling_1 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%3.0" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 1 0 0 1\n' + ' /end COMPU_METHOD', + 'Scaling_0': ' /begin COMPU_METHOD\n' + ' Scaling_0 /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%3.0" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0 0 0 1\n' + ' /end COMPU_METHOD'}, + 'MEASUREMENT': {'sVcDtcAtr_D_TrgGear': ' /begin MEASUREMENT\n' + ' sVcDtcAtr_D_TrgGear\t/* Name ' + '*/\n' + ' "Target gear"\t/* ' + 'LongIdentifier */\n' + ' SBYTE\t/* Datatype */\n' + ' Scaling_0\t/* Conversion */\n' + ' 1\t/* Resolution */\n' + ' 0\t/* Accuracy */\n' + ' -1\t/* LowerLimit */\n' + ' 8\t/* UpperLimit */\n' + ' READ_WRITE\n' + ' /begin IF_DATA ' + 'ASAP1B_ADDRESS\n' + ' KP_BLOB 0x00000000\n' + ' /end IF_DATA\n' + ' /end MEASUREMENT'} + } + self.assertEqual(result, expected) + + def test_kp_blob_patch(self): + """Example from VEP4_GEN3_LP_7DCT-61""" + ucfg = { + 'test_consumer': { + 'inports': { + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVexhTar/VcVexhTar/Subsystem/VcVexhTar/input_3", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE))", + "description": "Target gear ", + "type": "Int8", + "unit": "-", + "offset": -1, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + }, + 'outports': {}, + "local_vars": {}, + "calib_consts": {} + }, + 'test_producer': { + 'outports': { + "sVcDtcAtr_D_TrgGear": { + "handle": "VcDtcAtr/VcDtcAtr/Subsystem/VcDtcAtr/sVcDtcAtr_D_TrgGear", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE))", + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_DISP", + "width": 1 + }, + }, + 'inports': {}, + "local_vars": {}, + "calib_consts": {} + }, + } + self.ucfg.get_per_unit_cfg.return_value = ucfg + self.prj_cfg.get_a2l_cfg.return_value = { + 'asap2_version': "1 51", + 'name': 'Test', + 'ip_address': "127.0.0.1", + 'ip_port': '0x0ABC', + 'allow_kp_blob': False + } + + a2l = A2lMerge( + self.prj_cfg, self.ucfg, + [ + str(Path(SRC_DIR, 'cnfg_files', 'test_producer.a2l')), + str(Path(SRC_DIR, 'cnfg_files', 'test_consumer.a2l')), + ], + [] + ) + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + a2l.merge('testfile') + expected = [ + ' /begin MEASUREMENT', + ' sVcDtcAtr_D_TrgGear\t/* Name */', + ' "Target gear"\t/* LongIdentifier */', + ' SBYTE\t/* Datatype */', + ' Scaling_0\t/* Conversion */', + ' 1\t/* Resolution */', + ' 0\t/* Accuracy */', + ' -1\t/* LowerLimit */', + ' 8\t/* UpperLimit */', + ' READ_WRITE', + ' ECU_ADDRESS 0x00000000', + ' /end MEASUREMENT', + '', + ' /begin COMPU_METHOD', + ' Scaling_0 /* Name */', + ' "" /* LongIdentifier */', + ' RAT_FUNC /* ConversionType */', + ' "%3.0" /* Format */', + ' "-" /* Unit */', + ' COEFFS 0 1 0 0 0 1', + ' /end COMPU_METHOD', + '', + ' /begin COMPU_METHOD', + ' Scaling_1 /* Name */', + ' "" /* LongIdentifier */', + ' RAT_FUNC /* ConversionType */', + ' "%3.0" /* Format */', + ' "-" /* Unit */', + ' COEFFS 0 1 1 0 0 1', + ' /end COMPU_METHOD', + '', + '', + ] + self.assertEqual(result[0], '\n'.join(expected)) + + def test_complete_patch(self): + """Example from VEP4_GEN3_LP_7DCT-61""" + ucfg = { + 'test_consumer': { + 'inports': { + "sVcDtcAtr_D_TrgGear": { + "handle": "VcVexhTar/VcVexhTar/Subsystem/VcVexhTar/input_3", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE))", + "description": "Target gear ", + "type": "Int8", + "unit": "-", + "offset": -1, + "lsb": 1, + "min": 0, + "max": 8, + "class": "CVC_EXT", + "width": 1 + }, + }, + 'outports': {}, + "local_vars": {}, + "calib_consts": {} + }, + 'test_producer': { + 'outports': { + "sVcDtcAtr_D_TrgGear": { + "handle": "VcDtcAtr/VcDtcAtr/Subsystem/VcDtcAtr/sVcDtcAtr_D_TrgGear", + "name": "sVcDtcAtr_D_TrgGear", + "configs": "((ALWAYS_ACTIVE))", + "description": "Target gear", + "type": "Int8", + "unit": "-", + "offset": 0, + "lsb": 1, + "min": -1, + "max": 8, + "class": "CVC_DISP", + "width": 1 + }, + }, + 'inports': {}, + "local_vars": {}, + "calib_consts": {} + }, + } + self.ucfg.get_per_unit_cfg.return_value = ucfg + self.prj_cfg.get_a2l_cfg.return_value = { + 'asap2_version': "1 51", + 'name': 'Test-Project', + 'ip_address': "127.0.0.1", + 'ip_port': '0x0ABC', + 'allow_kp_blob': True + } + + a2l = A2lMerge( + self.prj_cfg, self.ucfg, + [ + str(Path(SRC_DIR, 'cnfg_files', 'test_producer.a2l')), + str(Path(SRC_DIR, 'cnfg_files', 'test_consumer.a2l')), + ], + [] + ) + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + a2l.merge('testfile', True) + expected = [ + 'ASAP2_VERSION 1 51', + '/begin PROJECT Test_Project ""', + ' /begin MODULE XCP ""', + ' /begin A2ML', + ' struct Protocol_Layer {', + ' uint; /* XCP protocol layer version, current 0x100 */', + ' uint; /* T1 [ms] */', + ' uint; /* T2 [ms] */', + ' uint; /* T3 [ms] */', + ' uint; /* T4 [ms] */', + ' uint; /* T5 [ms] */', + ' uint; /* T6 [ms] */', + ' uint; /* T7 [ms] */', + ' uchar; /* MAX_CTO */', + ' uint; /* MAX_DTO */', + ' enum {', + ' "BYTE_ORDER_MSB_LAST" = 0,', + ' "BYTE_ORDER_MSB_FIRST" = 1', + ' };', + ' enum {', + ' "ADDRESS_GRANULARITY_BYTE" = 1,', + ' "ADDRESS_GRANULARITY_WORD" = 2,', + ' "ADDRESS_GRANULARITY_DWORD" = 4', + ' };', + ' taggedstruct {', + ' ("OPTIONAL_CMD" enum {', + ' "GET_COMM_MODE_INFO" = 251,', + ' "GET_ID" = 250,', + ' "SET_REQUEST" = 249,', + ' "GET_SEED" = 248,', + ' "UNLOCK" = 247,', + ' "SET_MTA" = 246,', + ' "UPLOAD" = 245,', + ' "SHORT_UPLOAD" = 244,', + ' "BUILD_CHECKSUM" = 243,', + ' "TRANSPORT_LAYER_CMD" = 242,', + ' "USER_CMD" = 241,', + ' "DOWNLOAD" = 240,', + ' "DOWNLOAD_NEXT" = 239,', + ' "DOWNLOAD_MAX" = 238,', + ' "SHORT_DOWNLOAD" = 237,', + ' "MODIFY_BITS" = 236,', + ' "SET_CAL_PAGE" = 235,', + ' "GET_CAL_PAGE" = 234,', + ' "GET_PAG_PROCESSOR_INFO" = 233,', + ' "GET_SEGMENT_INFO" = 232,', + ' "GET_PAGE_INFO" = 231,', + ' "SET_SEGMENT_MODE" = 230,', + ' "GET_SEGMENT_MODE" = 229,', + ' "COPY_CAL_PAGE" = 228,', + ' "CLEAR_DAQ_LIST" = 227,', + ' "SET_DAQ_PTR" = 226,', + ' "WRITE_DAQ" = 225,', + ' "SET_DAQ_LIST_MODE" = 224,', + ' "GET_DAQ_LIST_MODE" = 223,', + ' "START_STOP_DAQ_LIST" = 222,', + ' "START_STOP_SYNCH" = 221,', + ' "GET_DAQ_CLOCK" = 220,', + ' "READ_DAQ" = 219,', + ' "GET_DAQ_PROCESSOR_INFO" = 218,', + ' "GET_DAQ_RESOLUTION_INFO" = 217,', + ' "GET_DAQ_LIST_INFO" = 216,', + ' "GET_DAQ_EVENT_INFO" = 215,', + ' "FREE_DAQ" = 214,', + ' "ALLOC_DAQ" = 213,', + ' "ALLOC_ODT" = 212,', + ' "ALLOC_ODT_ENTRY" = 211,', + ' "PROGRAM_START" = 210,', + ' "PROGRAM_CLEAR" = 209,', + ' "PROGRAM" = 208,', + ' "PROGRAM_RESET" = 207,', + ' "GET_PGM_PROCESSOR_INFO" = 206,', + ' "GET_SECTOR_INFO" = 205,', + ' "PROGRAM_PREPARE" = 204,', + ' "PROGRAM_FORMAT" = 203,', + ' "PROGRAM_NEXT" = 202,', + ' "PROGRAM_MAX" = 201,', + ' "PROGRAM_VERIFY" = 200', + ' })*;', + ' "COMMUNICATION_MODE_SUPPORTED" taggedunion {', + ' "BLOCK" taggedstruct {', + ' "SLAVE" ;', + ' "MASTER" struct {', + ' uchar; /* MAX_BS */', + ' uchar; /* MIN_ST */', + ' };', + ' };', + ' "INTERLEAVED" uchar; /* QUEUE_SIZE */', + ' };', + ' "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256];/* Name of the Seed&Key function */', + ' };', + ' };', + '', + ' struct Daq {', + ' enum {', + ' "STATIC" = 0,', + ' "DYNAMIC" = 1', + ' };', + ' uint; /* MAX_DAQ */', + ' uint; /* MAX_EVENT_CHANNEL */', + ' uchar; /* MIN_DAQ */', + ' enum {', + ' "OPTIMISATION_TYPE_DEFAULT" = 0,', + ' "OPTIMISATION_TYPE_ODT_TYPE_16" = 1,', + ' "OPTIMISATION_TYPE_ODT_TYPE_32" = 2,', + ' "OPTIMISATION_TYPE_ODT_TYPE_64" = 3,', + ' "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4,', + ' "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5', + ' };', + ' enum {', + ' "ADDRESS_EXTENSION_FREE" = 0,', + ' "ADDRESS_EXTENSION_ODT" = 1,', + ' "ADDRESS_EXTENSION_DAQ" = 3', + ' };', + ' enum {', + ' "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0,', + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1,', + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2,', + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3', + ' };', + ' enum {', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1,', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2,', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4,', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8', + ' };', + ' uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */', + ' enum {', + ' "NO_OVERLOAD_INDICATION" = 0,', + ' "OVERLOAD_INDICATION_PID" = 1,', + ' "OVERLOAD_INDICATION_EVENT" = 2', + ' };', + ' taggedstruct {', + ' "PRESCALER_SUPPORTED" ;', + ' "RESUME_SUPPORTED" ;', + ' block "STIM" struct {', + ' enum {', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1,', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2,', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4,', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8', + ' };', + ' uchar; /* MAX_ODT_ENTRY_SIZE_STIM */', + ' taggedstruct {', + ' "BIT_STIM_SUPPORTED" ;', + ' };', + ' };', + ' block "TIMESTAMP_SUPPORTED" struct {', + ' uint; /* TIMESTAMP_TICKS */', + ' enum {', + ' "NO_TIME_STAMP" = 0,', + ' "SIZE_BYTE" = 1,', + ' "SIZE_WORD" = 2,', + ' "SIZE_DWORD" = 4', + ' };', + ' enum {', + ' "UNIT_1NS" = 0,', + ' "UNIT_10NS" = 1,', + ' "UNIT_100NS" = 2,', + ' "UNIT_1US" = 3,', + ' "UNIT_10US" = 4,', + ' "UNIT_100US" = 5,', + ' "UNIT_1MS" = 6,', + ' "UNIT_10MS" = 7,', + ' "UNIT_100MS" = 8,', + ' "UNIT_1S" = 9', + ' };', + ' taggedstruct {', + ' "TIMESTAMP_FIXED" ;', + ' };', + ' };', + ' "PID_OFF_SUPPORTED" ;', + ' (block "DAQ_LIST" struct {', + ' uint; /* DAQ_LIST_NUMBER */', + ' taggedstruct {', + ' "DAQ_LIST_TYPE" enum {', + ' "DAQ" = 1,', + ' "STIM" = 2,', + ' "DAQ_STIM" = 3', + ' };', + ' "MAX_ODT" uchar;', + ' "MAX_ODT_ENTRIES" uchar;', + ' "FIRST_PID" uchar;', + ' "EVENT_FIXED" uint;', + ' block "PREDEFINED" taggedstruct {', + ' (block "ODT" struct {', + ' uchar; /* ODT number */', + ' taggedstruct {', + ' ("ODT_ENTRY" struct {', + ' uchar; /* ODT_ENTRY number */', + ' ulong; /* address of element */', + ' uchar; /* address extension of element */', + ' uchar; /* size of element [AG] */', + ' uchar; /* BIT_OFFSET */', + ' })*;', + ' };', + ' })*;', + ' };', + ' };', + ' })*;', + ' (block "EVENT" struct {', + ' char[101]; /* EVENT_CHANNEL_NAME */', + ' char[9]; /* EVENT_CHANNEL_SHORT_NAME */', + ' uint; /* EVENT_CHANNEL_NUMBER */', + ' enum {', + ' "DAQ" = 1,', + ' "STIM" = 2,', + ' "DAQ_STIM" = 3', + ' };', + ' uchar; /* MAX_DAQ_LIST */', + ' uchar; /* TIME_CYCLE */', + ' uchar; /* TIME_UNIT */', + ' uchar; /* PRIORITY */', + ' })*;', + ' };', + ' };', + '', + ' taggedunion Daq_Event {', + ' "FIXED_EVENT_LIST" taggedstruct {', + ' ("EVENT" uint)*;', + ' };', + ' "VARIABLE" taggedstruct {', + ' block "AVAILABLE_EVENT_LIST" taggedstruct {', + ' ("EVENT" uint)*;', + ' };', + ' block "DEFAULT_EVENT_LIST" taggedstruct {', + ' ("EVENT" uint)*;', + ' };', + ' };', + ' };', + '', + ' struct Pag {', + ' uchar; /* MAX_SEGMENTS */', + ' taggedstruct {', + ' "FREEZE_SUPPORTED" ;', + ' };', + ' };', + '', + ' struct Pgm {', + ' enum {', + ' "PGM_MODE_ABSOLUTE" = 1,', + ' "PGM_MODE_FUNCTIONAL" = 2,', + ' "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3', + ' };', + ' uchar; /* MAX_SECTORS */', + ' uchar; /* MAX_CTO_PGM */', + ' taggedstruct {', + ' (block "SECTOR" struct {', + ' char[101]; /* SECTOR_NAME */', + ' uchar; /* SECTOR_NUMBER */', + ' ulong; /* Address */', + ' ulong; /* Length */', + ' uchar; /* CLEAR_SEQUENCE_NUMBER */', + ' uchar; /* PROGRAM_SEQUENCE_NUMBER */', + ' uchar; /* PROGRAM_METHOD */', + ' })*;', + ' "COMMUNICATION_MODE_SUPPORTED" taggedunion {', + ' "BLOCK" taggedstruct {', + ' "SLAVE" ;', + ' "MASTER" struct {', + ' uchar; /* MAX_BS_PGM */', + ' uchar; /* MIN_ST_PGM */', + ' };', + ' };', + ' "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */', + ' };', + ' };', + ' };', + '', + ' struct Segment {', + ' uchar; /* SEGMENT_NUMBER */', + ' uchar; /* number of pages */', + ' uchar; /* ADDRESS_EXTENSION */', + ' uchar; /* COMPRESSION_METHOD */', + ' uchar; /* ENCRYPTION_METHOD */', + ' taggedstruct {', + ' block "CHECKSUM" struct {', + ' enum {', + ' "XCP_ADD_11" = 1,', + ' "XCP_ADD_12" = 2,', + ' "XCP_ADD_14" = 3,', + ' "XCP_ADD_22" = 4,', + ' "XCP_ADD_24" = 5,', + ' "XCP_ADD_44" = 6,', + ' "XCP_CRC_16" = 7,', + ' "XCP_CRC_16_CITT" = 8,', + ' "XCP_CRC_32" = 9,', + ' "XCP_USER_DEFINED" = 255', + ' };', + ' taggedstruct {', + ' "MAX_BLOCK_SIZE" ulong;', + ' "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum.DLL */', + ' };', + ' };', + ' (block "PAGE" struct {', + ' uchar; /* PAGE_NUMBER */', + ' enum {', + ' "ECU_ACCESS_NOT_ALLOWED" = 0,', + ' "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1,', + ' "ECU_ACCESS_WITH_XCP_ONLY" = 2,', + ' "ECU_ACCESS_DONT_CARE" = 3', + ' };', + ' enum {', + ' "XCP_READ_ACCESS_NOT_ALLOWED" = 0,', + ' "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1,', + ' "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2,', + ' "XCP_READ_ACCESS_DONT_CARE" = 3', + ' };', + ' enum {', + ' "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0,', + ' "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1,', + ' "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2,', + ' "XCP_WRITE_ACCESS_DONT_CARE" = 3', + ' };', + ' taggedstruct {', + ' "INIT_SEGMENT" uchar; /* references segment that initialises this page */', + ' };', + ' })*;', + ' (block "ADDRESS_MAPPING" struct {', + ' ulong; /* source address */', + ' ulong; /* destination address */', + ' ulong; /* length */', + ' })*;', + ' "PGM_VERIFY" ulong; /* verification value for PGM */', + ' };', + ' };', + '', + ' taggedstruct Common_Parameters {', + ' block "PROTOCOL_LAYER" struct Protocol_Layer;', + ' block "SEGMENT" struct Segment;', + ' block "DAQ" struct Daq;', + ' block "PAG" struct Pag;', + ' block "PGM" struct Pgm;', + ' block "DAQ_EVENT" taggedunion Daq_Event;', + ' };', + '', + ' struct UDP_IP_Parameters {', + ' uint; /* XCP on UDP_IP version, currently 0x0100 */', + ' uint; /* PORT */', + ' taggedunion {', + ' "HOST_NAME" char[256];', + ' "ADDRESS" char[15];', + ' };', + ' };', + '', + ' block "IF_DATA" taggedunion if_data {', + ' "XCP" struct {', + ' taggedstruct Common_Parameters; /* default parameters */', + ' taggedstruct {', + ' block "XCP_ON_UDP_IP" struct {', + ' struct UDP_IP_Parameters; /* specific for UDP_IP */', + ' taggedstruct Common_Parameters; /* overruling of default */', + ' };', + ' };', + ' };', + ' };', + ' /end A2ML', + '', + ' /begin MOD_COMMON ""', + ' BYTE_ORDER MSB_LAST', + ' ALIGNMENT_BYTE 1', + ' ALIGNMENT_WORD 1', + ' ALIGNMENT_LONG 1', + ' ALIGNMENT_FLOAT32_IEEE 1', + ' ALIGNMENT_FLOAT64_IEEE 1', + ' /end MOD_COMMON', + '', + ' /begin IF_DATA XCP', + ' /begin PROTOCOL_LAYER', + ' 0x0100', + ' 0x03E8', + ' 0xC8', + ' 0x00', + ' 0x00', + ' 0x00', + ' 0x00', + ' 0x00', + ' 0x60', + ' 0x12C', + ' BYTE_ORDER_MSB_LAST', + ' ADDRESS_GRANULARITY_BYTE', + ' OPTIONAL_CMD ALLOC_ODT_ENTRY', + ' OPTIONAL_CMD ALLOC_ODT', + ' OPTIONAL_CMD ALLOC_DAQ', + ' OPTIONAL_CMD FREE_DAQ', + ' OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO', + ' OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO', + ' OPTIONAL_CMD START_STOP_SYNCH', + ' OPTIONAL_CMD GET_DAQ_CLOCK', + ' OPTIONAL_CMD START_STOP_DAQ_LIST', + ' OPTIONAL_CMD GET_DAQ_LIST_MODE', + ' OPTIONAL_CMD SET_DAQ_LIST_MODE', + ' OPTIONAL_CMD WRITE_DAQ', + ' OPTIONAL_CMD SET_DAQ_PTR', + ' OPTIONAL_CMD CLEAR_DAQ_LIST', + ' OPTIONAL_CMD SHORT_UPLOAD', + ' OPTIONAL_CMD UPLOAD', + ' OPTIONAL_CMD SET_MTA', + ' OPTIONAL_CMD GET_ID', + ' OPTIONAL_CMD GET_COMM_MODE_INFO', + ' OPTIONAL_CMD BUILD_CHECKSUM', + ' OPTIONAL_CMD SET_SEGMENT_MODE', + ' OPTIONAL_CMD GET_SEGMENT_MODE', + ' OPTIONAL_CMD SET_REQUEST', + ' OPTIONAL_CMD GET_SEED', + ' OPTIONAL_CMD UNLOCK', + ' OPTIONAL_CMD COPY_CAL_PAGE', + ' SEED_AND_KEY_EXTERNAL_FUNCTION Seed_Key.dll/* Add name of seed & key dll file here.*/', + ' /end PROTOCOL_LAYER', + '', + ' /begin DAQ', + ' DYNAMIC', + ' 0x00', + ' 0x06', + ' 0x00', + ' OPTIMISATION_TYPE_DEFAULT', + ' ADDRESS_EXTENSION_FREE', + ' IDENTIFICATION_FIELD_TYPE_ABSOLUTE', + ' GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE', + ' 0x60', + ' NO_OVERLOAD_INDICATION', + ' /begin TIMESTAMP_SUPPORTED', + ' 0x01', + ' SIZE_DWORD', + ' UNIT_100US', + ' TIMESTAMP_FIXED', + ' /end TIMESTAMP_SUPPORTED', + '', + '', + ' /end DAQ', + '', + ' /begin PAG', + ' 0x01', + ' FREEZE_SUPPORTED', + ' /end PAG', + ' /begin PGM', + ' PGM_MODE_ABSOLUTE', + ' 0x01', + ' 0x00', + ' /begin SECTOR', + ' "Sector"', + ' 0x00', + ' 0x22014', + ' 0x38', + ' 0x00', + ' 0x00', + ' 0x00', + ' /end SECTOR', + ' /end PGM', + '', + ' /begin XCP_ON_UDP_IP', + ' 0x0100', + ' 0x0ABC', + ' ADDRESS "127.0.0.1"', + ' /end XCP_ON_UDP_IP', + ' /end IF_DATA', + '', + ' /begin MOD_PAR ""', + ' /begin MEMORY_SEGMENT', + ' caldata "caldata"', + ' DATA FLASH INTERN 0x00000 0x0000 -1 -1 -1 -1 -1', + ' /begin IF_DATA XCP', + ' /begin SEGMENT', + ' 0x00', + ' 0x02', + ' 0x00', + ' 0x00', + ' 0x00', + ' /begin CHECKSUM', + ' XCP_CRC_16_CITT', + ' /end CHECKSUM', + ' /begin PAGE', + ' 0x00', + ' ECU_ACCESS_WITH_XCP_ONLY', + ' XCP_READ_ACCESS_WITH_ECU_ONLY', + ' XCP_WRITE_ACCESS_NOT_ALLOWED', + ' INIT_SEGMENT 0x00', + ' /end PAGE', + ' /begin PAGE', + ' 0x01', + ' ECU_ACCESS_WITH_XCP_ONLY', + ' XCP_READ_ACCESS_WITH_ECU_ONLY', + ' XCP_WRITE_ACCESS_WITH_ECU_ONLY', + ' INIT_SEGMENT 0x00', + ' /end PAGE', + ' /end SEGMENT', + ' /end IF_DATA', + ' /end MEMORY_SEGMENT', + ' /begin MEMORY_SEGMENT', + ' text ".text"', + ' CODE ROM INTERN 0x26030 0x72c10 -1 -1 -1 -1 -1', + ' /begin IF_DATA XCP', + ' /begin SEGMENT', + ' 0x01', + ' 0x01', + ' 0x00', + ' 0x00', + ' 0x00', + ' /begin CHECKSUM', + ' XCP_CRC_16_CITT', + ' /end CHECKSUM', + ' /begin PAGE', + ' 0x01', + ' ECU_ACCESS_WITH_XCP_ONLY', + ' XCP_READ_ACCESS_WITH_ECU_ONLY', + ' XCP_WRITE_ACCESS_WITH_ECU_ONLY', + ' INIT_SEGMENT 0x00', + ' /end PAGE', + ' /end SEGMENT', + ' /end IF_DATA', + ' /end MEMORY_SEGMENT', + ' /end MOD_PAR', + '', + ' /begin COMPU_METHOD BitSlice.CONVERSION ""', + ' RAT_FUNC "%6.2f" ""', + ' COEFFS 0 1 0 0 0 1', + ' /end COMPU_METHOD', + '', + ' /* SPM declarations start. */', + '', + ' /begin MEASUREMENT', + ' sVcDtcAtr_D_TrgGear /* Name */', + ' "Target gear" /* LongIdentifier */', + ' SBYTE /* Datatype */', + ' Scaling_0 /* Conversion */', + ' 1 /* Resolution */', + ' 0 /* Accuracy */', + ' -1 /* LowerLimit */', + ' 8 /* UpperLimit */', + ' READ_WRITE', + ' /begin IF_DATA ASAP1B_ADDRESS', + ' KP_BLOB 0x00000000', + ' /end IF_DATA', + ' /end MEASUREMENT', + '', + ' /begin COMPU_METHOD', + ' Scaling_0 /* Name */', + ' "" /* LongIdentifier */', + ' RAT_FUNC /* ConversionType */', + ' "%3.0" /* Format */', + ' "-" /* Unit */', + ' COEFFS 0 1 0 0 0 1', + ' /end COMPU_METHOD', + '', + ' /begin COMPU_METHOD', + ' Scaling_1 /* Name */', + ' "" /* LongIdentifier */', + ' RAT_FUNC /* ConversionType */', + ' "%3.0" /* Format */', + ' "-" /* Unit */', + ' COEFFS 0 1 1 0 0 1', + ' /end COMPU_METHOD', + '', + '', + '', + ' /* SPM declarations end. */', + '', + ' /begin RECORD_LAYOUT __UBYTE_Z', + ' FNC_VALUES 1 UBYTE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __UWORD_Z', + ' FNC_VALUES 1 UWORD ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __ULONG_Z', + ' FNC_VALUES 1 ULONG ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SBYTE_Z', + ' FNC_VALUES 1 SBYTE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SWORD_Z', + ' FNC_VALUES 1 SWORD ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SLONG_Z', + ' FNC_VALUES 1 SLONG ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT32_IEEE_Z', + ' FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT64_IEEE_Z', + ' FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __UBYTE_S', + ' FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __UWORD_S', + ' FNC_VALUES 1 UWORD COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __ULONG_S', + ' FNC_VALUES 1 ULONG COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SBYTE_S', + ' FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SWORD_S', + ' FNC_VALUES 1 SWORD COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SLONG_S', + ' FNC_VALUES 1 SLONG COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT32_IEEE_S', + ' FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT64_IEEE_S', + ' FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__UBYTE_S', + ' AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__UWORD_S', + ' AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__ULONG_S', + ' AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__SBYTE_S', + ' AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__SWORD_S', + ' AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__SLONG_S', + ' AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__FLOAT32_IEEE_S', + ' AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__FLOAT64_IEEE_S', + ' AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /end MODULE', + '/end PROJECT', + '' + ] + self.assertListEqual(result[0].split('\n'), expected) diff --git a/tests/pybuild/test_a2l_templates.py b/tests/pybuild/test_a2l_templates.py new file mode 100644 index 0000000..3d5bfa5 --- /dev/null +++ b/tests/pybuild/test_a2l_templates.py @@ -0,0 +1,764 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for merge_a2l.py.""" + +import unittest +from pybuild.a2l_templates import A2lProjectTemplate, A2lSilverTemplate + + +class TestA2lProjectTemplate(unittest.TestCase): + """Tests for pybuild.a2l_templates.""" + + def test_a2l_project_template(self): + """Test pybuild.a2l_templates.A2lProjectTemplate.""" + events = [] + events = [ + { + 'time_cycle': '0x01', + 'time_unit': '0x07', + 'name': 'Raster0', + 'channel_id': '0x0001' + }, + { + 'time_cycle': '0x10', + 'time_unit': '0x07', + 'name': 'Raster1', + 'channel_id': '0x0002' + }, + ] + a2l_template = A2lProjectTemplate( + 'SPM', + "1 60", + "test-project", + events, + "127.0.0.1", + "0x0AA" + ) + a2l = a2l_template.render() + expected = [ + 'ASAP2_VERSION 1 60', + '/begin PROJECT test_project ""', + ' /begin MODULE XCP ""', + ' /begin A2ML', + ' struct Protocol_Layer {', + ' uint; /* XCP protocol layer version, current 0x100 */', + ' uint; /* T1 [ms] */', + ' uint; /* T2 [ms] */', + ' uint; /* T3 [ms] */', + ' uint; /* T4 [ms] */', + ' uint; /* T5 [ms] */', + ' uint; /* T6 [ms] */', + ' uint; /* T7 [ms] */', + ' uchar; /* MAX_CTO */', + ' uint; /* MAX_DTO */', + ' enum {', + ' "BYTE_ORDER_MSB_LAST" = 0,', + ' "BYTE_ORDER_MSB_FIRST" = 1', + ' };', + ' enum {', + ' "ADDRESS_GRANULARITY_BYTE" = 1,', + ' "ADDRESS_GRANULARITY_WORD" = 2,', + ' "ADDRESS_GRANULARITY_DWORD" = 4', + ' };', + ' taggedstruct {', + ' ("OPTIONAL_CMD" enum {', + ' "GET_COMM_MODE_INFO" = 251,', + ' "GET_ID" = 250,', + ' "SET_REQUEST" = 249,', + ' "GET_SEED" = 248,', + ' "UNLOCK" = 247,', + ' "SET_MTA" = 246,', + ' "UPLOAD" = 245,', + ' "SHORT_UPLOAD" = 244,', + ' "BUILD_CHECKSUM" = 243,', + ' "TRANSPORT_LAYER_CMD" = 242,', + ' "USER_CMD" = 241,', + ' "DOWNLOAD" = 240,', + ' "DOWNLOAD_NEXT" = 239,', + ' "DOWNLOAD_MAX" = 238,', + ' "SHORT_DOWNLOAD" = 237,', + ' "MODIFY_BITS" = 236,', + ' "SET_CAL_PAGE" = 235,', + ' "GET_CAL_PAGE" = 234,', + ' "GET_PAG_PROCESSOR_INFO" = 233,', + ' "GET_SEGMENT_INFO" = 232,', + ' "GET_PAGE_INFO" = 231,', + ' "SET_SEGMENT_MODE" = 230,', + ' "GET_SEGMENT_MODE" = 229,', + ' "COPY_CAL_PAGE" = 228,', + ' "CLEAR_DAQ_LIST" = 227,', + ' "SET_DAQ_PTR" = 226,', + ' "WRITE_DAQ" = 225,', + ' "SET_DAQ_LIST_MODE" = 224,', + ' "GET_DAQ_LIST_MODE" = 223,', + ' "START_STOP_DAQ_LIST" = 222,', + ' "START_STOP_SYNCH" = 221,', + ' "GET_DAQ_CLOCK" = 220,', + ' "READ_DAQ" = 219,', + ' "GET_DAQ_PROCESSOR_INFO" = 218,', + ' "GET_DAQ_RESOLUTION_INFO" = 217,', + ' "GET_DAQ_LIST_INFO" = 216,', + ' "GET_DAQ_EVENT_INFO" = 215,', + ' "FREE_DAQ" = 214,', + ' "ALLOC_DAQ" = 213,', + ' "ALLOC_ODT" = 212,', + ' "ALLOC_ODT_ENTRY" = 211,', + ' "PROGRAM_START" = 210,', + ' "PROGRAM_CLEAR" = 209,', + ' "PROGRAM" = 208,', + ' "PROGRAM_RESET" = 207,', + ' "GET_PGM_PROCESSOR_INFO" = 206,', + ' "GET_SECTOR_INFO" = 205,', + ' "PROGRAM_PREPARE" = 204,', + ' "PROGRAM_FORMAT" = 203,', + ' "PROGRAM_NEXT" = 202,', + ' "PROGRAM_MAX" = 201,', + ' "PROGRAM_VERIFY" = 200', + ' })*;', + ' "COMMUNICATION_MODE_SUPPORTED" taggedunion {', + ' "BLOCK" taggedstruct {', + ' "SLAVE" ;', + ' "MASTER" struct {', + ' uchar; /* MAX_BS */', + ' uchar; /* MIN_ST */', + ' };', + ' };', + ' "INTERLEAVED" uchar; /* QUEUE_SIZE */', + ' };', + ' "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256];/* Name of the Seed&Key function */', + ' };', + ' };', + '', + ' struct Daq {', + ' enum {', + ' "STATIC" = 0,', + ' "DYNAMIC" = 1', + ' };', + ' uint; /* MAX_DAQ */', + ' uint; /* MAX_EVENT_CHANNEL */', + ' uchar; /* MIN_DAQ */', + ' enum {', + ' "OPTIMISATION_TYPE_DEFAULT" = 0,', + ' "OPTIMISATION_TYPE_ODT_TYPE_16" = 1,', + ' "OPTIMISATION_TYPE_ODT_TYPE_32" = 2,', + ' "OPTIMISATION_TYPE_ODT_TYPE_64" = 3,', + ' "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4,', + ' "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5', + ' };', + ' enum {', + ' "ADDRESS_EXTENSION_FREE" = 0,', + ' "ADDRESS_EXTENSION_ODT" = 1,', + ' "ADDRESS_EXTENSION_DAQ" = 3', + ' };', + ' enum {', + ' "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0,', + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1,', + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2,', + ' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3', + ' };', + ' enum {', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1,', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2,', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4,', + ' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8', + ' };', + ' uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */', + ' enum {', + ' "NO_OVERLOAD_INDICATION" = 0,', + ' "OVERLOAD_INDICATION_PID" = 1,', + ' "OVERLOAD_INDICATION_EVENT" = 2', + ' };', + ' taggedstruct {', + ' "PRESCALER_SUPPORTED" ;', + ' "RESUME_SUPPORTED" ;', + ' block "STIM" struct {', + ' enum {', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1,', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2,', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4,', + ' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8', + ' };', + ' uchar; /* MAX_ODT_ENTRY_SIZE_STIM */', + ' taggedstruct {', + ' "BIT_STIM_SUPPORTED" ;', + ' };', + ' };', + ' block "TIMESTAMP_SUPPORTED" struct {', + ' uint; /* TIMESTAMP_TICKS */', + ' enum {', + ' "NO_TIME_STAMP" = 0,', + ' "SIZE_BYTE" = 1,', + ' "SIZE_WORD" = 2,', + ' "SIZE_DWORD" = 4', + ' };', + ' enum {', + ' "UNIT_1NS" = 0,', + ' "UNIT_10NS" = 1,', + ' "UNIT_100NS" = 2,', + ' "UNIT_1US" = 3,', + ' "UNIT_10US" = 4,', + ' "UNIT_100US" = 5,', + ' "UNIT_1MS" = 6,', + ' "UNIT_10MS" = 7,', + ' "UNIT_100MS" = 8,', + ' "UNIT_1S" = 9', + ' };', + ' taggedstruct {', + ' "TIMESTAMP_FIXED" ;', + ' };', + ' };', + ' "PID_OFF_SUPPORTED" ;', + ' (block "DAQ_LIST" struct {', + ' uint; /* DAQ_LIST_NUMBER */', + ' taggedstruct {', + ' "DAQ_LIST_TYPE" enum {', + ' "DAQ" = 1,', + ' "STIM" = 2,', + ' "DAQ_STIM" = 3', + ' };', + ' "MAX_ODT" uchar;', + ' "MAX_ODT_ENTRIES" uchar;', + ' "FIRST_PID" uchar;', + ' "EVENT_FIXED" uint;', + ' block "PREDEFINED" taggedstruct {', + ' (block "ODT" struct {', + ' uchar; /* ODT number */', + ' taggedstruct {', + ' ("ODT_ENTRY" struct {', + ' uchar; /* ODT_ENTRY number */', + ' ulong; /* address of element */', + ' uchar; /* address extension of element */', + ' uchar; /* size of element [AG] */', + ' uchar; /* BIT_OFFSET */', + ' })*;', + ' };', + ' })*;', + ' };', + ' };', + ' })*;', + ' (block "EVENT" struct {', + ' char[101]; /* EVENT_CHANNEL_NAME */', + ' char[9]; /* EVENT_CHANNEL_SHORT_NAME */', + ' uint; /* EVENT_CHANNEL_NUMBER */', + ' enum {', + ' "DAQ" = 1,', + ' "STIM" = 2,', + ' "DAQ_STIM" = 3', + ' };', + ' uchar; /* MAX_DAQ_LIST */', + ' uchar; /* TIME_CYCLE */', + ' uchar; /* TIME_UNIT */', + ' uchar; /* PRIORITY */', + ' })*;', + ' };', + ' };', + '', + ' taggedunion Daq_Event {', + ' "FIXED_EVENT_LIST" taggedstruct {', + ' ("EVENT" uint)*;', + ' };', + ' "VARIABLE" taggedstruct {', + ' block "AVAILABLE_EVENT_LIST" taggedstruct {', + ' ("EVENT" uint)*;', + ' };', + ' block "DEFAULT_EVENT_LIST" taggedstruct {', + ' ("EVENT" uint)*;', + ' };', + ' };', + ' };', + '', + ' struct Pag {', + ' uchar; /* MAX_SEGMENTS */', + ' taggedstruct {', + ' "FREEZE_SUPPORTED" ;', + ' };', + ' };', + '', + ' struct Pgm {', + ' enum {', + ' "PGM_MODE_ABSOLUTE" = 1,', + ' "PGM_MODE_FUNCTIONAL" = 2,', + ' "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3', + ' };', + ' uchar; /* MAX_SECTORS */', + ' uchar; /* MAX_CTO_PGM */', + ' taggedstruct {', + ' (block "SECTOR" struct {', + ' char[101]; /* SECTOR_NAME */', + ' uchar; /* SECTOR_NUMBER */', + ' ulong; /* Address */', + ' ulong; /* Length */', + ' uchar; /* CLEAR_SEQUENCE_NUMBER */', + ' uchar; /* PROGRAM_SEQUENCE_NUMBER */', + ' uchar; /* PROGRAM_METHOD */', + ' })*;', + ' "COMMUNICATION_MODE_SUPPORTED" taggedunion {', + ' "BLOCK" taggedstruct {', + ' "SLAVE" ;', + ' "MASTER" struct {', + ' uchar; /* MAX_BS_PGM */', + ' uchar; /* MIN_ST_PGM */', + ' };', + ' };', + ' "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */', + ' };', + ' };', + ' };', + '', + ' struct Segment {', + ' uchar; /* SEGMENT_NUMBER */', + ' uchar; /* number of pages */', + ' uchar; /* ADDRESS_EXTENSION */', + ' uchar; /* COMPRESSION_METHOD */', + ' uchar; /* ENCRYPTION_METHOD */', + ' taggedstruct {', + ' block "CHECKSUM" struct {', + ' enum {', + ' "XCP_ADD_11" = 1,', + ' "XCP_ADD_12" = 2,', + ' "XCP_ADD_14" = 3,', + ' "XCP_ADD_22" = 4,', + ' "XCP_ADD_24" = 5,', + ' "XCP_ADD_44" = 6,', + ' "XCP_CRC_16" = 7,', + ' "XCP_CRC_16_CITT" = 8,', + ' "XCP_CRC_32" = 9,', + ' "XCP_USER_DEFINED" = 255', + ' };', + ' taggedstruct {', + ' "MAX_BLOCK_SIZE" ulong;', + ' "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum.DLL */', + ' };', + ' };', + ' (block "PAGE" struct {', + ' uchar; /* PAGE_NUMBER */', + ' enum {', + ' "ECU_ACCESS_NOT_ALLOWED" = 0,', + ' "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1,', + ' "ECU_ACCESS_WITH_XCP_ONLY" = 2,', + ' "ECU_ACCESS_DONT_CARE" = 3', + ' };', + ' enum {', + ' "XCP_READ_ACCESS_NOT_ALLOWED" = 0,', + ' "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1,', + ' "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2,', + ' "XCP_READ_ACCESS_DONT_CARE" = 3', + ' };', + ' enum {', + ' "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0,', + ' "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1,', + ' "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2,', + ' "XCP_WRITE_ACCESS_DONT_CARE" = 3', + ' };', + ' taggedstruct {', + ' "INIT_SEGMENT" uchar; /* references segment that initialises this page */', + ' };', + ' })*;', + ' (block "ADDRESS_MAPPING" struct {', + ' ulong; /* source address */', + ' ulong; /* destination address */', + ' ulong; /* length */', + ' })*;', + ' "PGM_VERIFY" ulong; /* verification value for PGM */', + ' };', + ' };', + '', + ' taggedstruct Common_Parameters {', + ' block "PROTOCOL_LAYER" struct Protocol_Layer;', + ' block "SEGMENT" struct Segment;', + ' block "DAQ" struct Daq;', + ' block "PAG" struct Pag;', + ' block "PGM" struct Pgm;', + ' block "DAQ_EVENT" taggedunion Daq_Event;', + ' };', + '', + ' struct UDP_IP_Parameters {', + ' uint; /* XCP on UDP_IP version, currently 0x0100 */', + ' uint; /* PORT */', + ' taggedunion {', + ' "HOST_NAME" char[256];', + ' "ADDRESS" char[15];', + ' };', + ' };', + '', + ' block "IF_DATA" taggedunion if_data {', + ' "XCP" struct {', + ' taggedstruct Common_Parameters; /* default parameters */', + ' taggedstruct {', + ' block "XCP_ON_UDP_IP" struct {', + ' struct UDP_IP_Parameters; /* specific for UDP_IP */', + ' taggedstruct Common_Parameters; /* overruling of default */', + ' };', + ' };', + ' };', + ' };', + ' /end A2ML', + '', + ' /begin MOD_COMMON ""', + ' BYTE_ORDER MSB_LAST', + ' ALIGNMENT_BYTE 1', + ' ALIGNMENT_WORD 1', + ' ALIGNMENT_LONG 1', + ' ALIGNMENT_FLOAT32_IEEE 1', + ' ALIGNMENT_FLOAT64_IEEE 1', + ' /end MOD_COMMON', + '', + ' /begin IF_DATA XCP', + ' /begin PROTOCOL_LAYER', + ' 0x0100', + ' 0x03E8', + ' 0xC8', + ' 0x00', + ' 0x00', + ' 0x00', + ' 0x00', + ' 0x00', + ' 0x60', + ' 0x12C', + ' BYTE_ORDER_MSB_LAST', + ' ADDRESS_GRANULARITY_BYTE', + ' OPTIONAL_CMD ALLOC_ODT_ENTRY', + ' OPTIONAL_CMD ALLOC_ODT', + ' OPTIONAL_CMD ALLOC_DAQ', + ' OPTIONAL_CMD FREE_DAQ', + ' OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO', + ' OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO', + ' OPTIONAL_CMD START_STOP_SYNCH', + ' OPTIONAL_CMD GET_DAQ_CLOCK', + ' OPTIONAL_CMD START_STOP_DAQ_LIST', + ' OPTIONAL_CMD GET_DAQ_LIST_MODE', + ' OPTIONAL_CMD SET_DAQ_LIST_MODE', + ' OPTIONAL_CMD WRITE_DAQ', + ' OPTIONAL_CMD SET_DAQ_PTR', + ' OPTIONAL_CMD CLEAR_DAQ_LIST', + ' OPTIONAL_CMD SHORT_UPLOAD', + ' OPTIONAL_CMD UPLOAD', + ' OPTIONAL_CMD SET_MTA', + ' OPTIONAL_CMD GET_ID', + ' OPTIONAL_CMD GET_COMM_MODE_INFO', + ' OPTIONAL_CMD BUILD_CHECKSUM', + ' OPTIONAL_CMD SET_SEGMENT_MODE', + ' OPTIONAL_CMD GET_SEGMENT_MODE', + ' OPTIONAL_CMD SET_REQUEST', + ' OPTIONAL_CMD GET_SEED', + ' OPTIONAL_CMD UNLOCK', + ' OPTIONAL_CMD COPY_CAL_PAGE', + ' SEED_AND_KEY_EXTERNAL_FUNCTION Seed_Key.dll/* Add name of seed & key dll file here.*/', + ' /end PROTOCOL_LAYER', + '', + ' /begin DAQ', + ' DYNAMIC', + ' 0x00', + ' 0x06', + ' 0x00', + ' OPTIMISATION_TYPE_DEFAULT', + ' ADDRESS_EXTENSION_FREE', + ' IDENTIFICATION_FIELD_TYPE_ABSOLUTE', + ' GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE', + ' 0x60', + ' NO_OVERLOAD_INDICATION', + ' /begin TIMESTAMP_SUPPORTED', + ' 0x01', + ' SIZE_DWORD', + ' UNIT_100US', + ' TIMESTAMP_FIXED', + ' /end TIMESTAMP_SUPPORTED', + '', + ' /begin EVENT', + ' "Raster0" /* EVENT CHANNEL NAME */', + ' "Raster0" /* EVENT CHANNEL SHORT NAME */', + ' 0x0001 /* EVENT CHANNEL NUMBER */', + ' DAQ_STIM', + ' 0xFF', + ' 0x01 /* EVENT TIME CYCLE */', + ' 0x07 /* EVENT TIME UNIT */', + ' 0x00', + ' /end EVENT', + ' /begin EVENT', + ' "Raster1" /* EVENT CHANNEL NAME */', + ' "Raster1" /* EVENT CHANNEL SHORT NAME */', + ' 0x0002 /* EVENT CHANNEL NUMBER */', + ' DAQ_STIM', + ' 0xFF', + ' 0x10 /* EVENT TIME CYCLE */', + ' 0x07 /* EVENT TIME UNIT */', + ' 0x00', + ' /end EVENT', + '', + ' /end DAQ', + '', + ' /begin PAG', + ' 0x01', + ' FREEZE_SUPPORTED', + ' /end PAG', + ' /begin PGM', + ' PGM_MODE_ABSOLUTE', + ' 0x01', + ' 0x00', + ' /begin SECTOR', + ' "Sector"', + ' 0x00', + ' 0x22014', + ' 0x38', + ' 0x00', + ' 0x00', + ' 0x00', + ' /end SECTOR', + ' /end PGM', + '', + ' /begin XCP_ON_UDP_IP', + ' 0x0100', + ' 0x0AA', + ' ADDRESS "127.0.0.1"', + ' /end XCP_ON_UDP_IP', + ' /end IF_DATA', + '', + ' /begin MOD_PAR ""', + ' /begin MEMORY_SEGMENT', + ' caldata "caldata"', + ' DATA FLASH INTERN 0x00000 0x0000 -1 -1 -1 -1 -1', + ' /begin IF_DATA XCP', + ' /begin SEGMENT', + ' 0x00', + ' 0x02', + ' 0x00', + ' 0x00', + ' 0x00', + ' /begin CHECKSUM', + ' XCP_CRC_16_CITT', + ' /end CHECKSUM', + ' /begin PAGE', + ' 0x00', + ' ECU_ACCESS_WITH_XCP_ONLY', + ' XCP_READ_ACCESS_WITH_ECU_ONLY', + ' XCP_WRITE_ACCESS_NOT_ALLOWED', + ' INIT_SEGMENT 0x00', + ' /end PAGE', + ' /begin PAGE', + ' 0x01', + ' ECU_ACCESS_WITH_XCP_ONLY', + ' XCP_READ_ACCESS_WITH_ECU_ONLY', + ' XCP_WRITE_ACCESS_WITH_ECU_ONLY', + ' INIT_SEGMENT 0x00', + ' /end PAGE', + ' /end SEGMENT', + ' /end IF_DATA', + ' /end MEMORY_SEGMENT', + ' /begin MEMORY_SEGMENT', + ' text ".text"', + ' CODE ROM INTERN 0x26030 0x72c10 -1 -1 -1 -1 -1', + ' /begin IF_DATA XCP', + ' /begin SEGMENT', + ' 0x01', + ' 0x01', + ' 0x00', + ' 0x00', + ' 0x00', + ' /begin CHECKSUM', + ' XCP_CRC_16_CITT', + ' /end CHECKSUM', + ' /begin PAGE', + ' 0x01', + ' ECU_ACCESS_WITH_XCP_ONLY', + ' XCP_READ_ACCESS_WITH_ECU_ONLY', + ' XCP_WRITE_ACCESS_WITH_ECU_ONLY', + ' INIT_SEGMENT 0x00', + ' /end PAGE', + ' /end SEGMENT', + ' /end IF_DATA', + ' /end MEMORY_SEGMENT', + ' /end MOD_PAR', + '', + ' /begin COMPU_METHOD BitSlice.CONVERSION ""', + ' RAT_FUNC "%6.2f" ""', + ' COEFFS 0 1 0 0 0 1', + ' /end COMPU_METHOD', + '', + ' /* SPM declarations start. */', + '', + 'SPM', + '', + ' /* SPM declarations end. */', + '', + ' /begin RECORD_LAYOUT __UBYTE_Z', + ' FNC_VALUES 1 UBYTE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __UWORD_Z', + ' FNC_VALUES 1 UWORD ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __ULONG_Z', + ' FNC_VALUES 1 ULONG ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SBYTE_Z', + ' FNC_VALUES 1 SBYTE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SWORD_Z', + ' FNC_VALUES 1 SWORD ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SLONG_Z', + ' FNC_VALUES 1 SLONG ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT32_IEEE_Z', + ' FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT64_IEEE_Z', + ' FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __UBYTE_S', + ' FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __UWORD_S', + ' FNC_VALUES 1 UWORD COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __ULONG_S', + ' FNC_VALUES 1 ULONG COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SBYTE_S', + ' FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SWORD_S', + ' FNC_VALUES 1 SWORD COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __SLONG_S', + ' FNC_VALUES 1 SLONG COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT32_IEEE_S', + ' FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT __FLOAT64_IEEE_S', + ' FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__UBYTE_S', + ' AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__UWORD_S', + ' AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__ULONG_S', + ' AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__SBYTE_S', + ' AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__SWORD_S', + ' AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__SLONG_S', + ' AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__FLOAT32_IEEE_S', + ' AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /begin RECORD_LAYOUT SSV__FLOAT64_IEEE_S', + ' AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT', + ' /end RECORD_LAYOUT', + '', + ' /end MODULE', + '/end PROJECT', + '' + ] + self.assertListEqual(a2l.split('\n'), expected) + + def test_a2l_silver_template(self): + """Test pybuild.a2l_templates.test_A2lSilverTemplate.""" + test_a2l = '\n'.join([ + '/begin CHARACTERISTIC', + ' char_dummy /* Name */', + ' "åäö" /* LongIdentifier */', + ' VALUE /* Type */', + ' 0x00000000 /* address: char_dummy */', + ' UBYTE_COL_DIRECT /* Deposit */', + ' 0 /* MaxDiff */', + ' Scaling_1 /* Conversion */', + ' 0 /* LowerLimit */', + ' 1 /* UpperLimit */', + '/end CHARACTERISTIC', + '', + '/begin FUNCTION', + ' DummyFunction /* Name */', + ' "" /* LongIdentifier */', + ' /begin DEF_CHARACTERISTIC', + ' char_dummy /* Identifier */', + ' /end DEF_CHARACTERISTIC', + ' /begin IN_MEASUREMENT', + ' meas_dummy /* Identifier */', + ' /end IN_MEASUREMENT', + ' /begin LOC_MEASUREMENT', + ' loc_meas_dummy /* Identifier */', + ' /end LOC_MEASUREMENT', + ' /begin OUT_MEASUREMENT', + ' out_meas_dummy /* Identifier */', + ' /end OUT_MEASUREMENT', + ' /begin SUB_FUNCTION', + ' DummySub.Instance1 /* Identifier */', + ' /end SUB_FUNCTION', + '/end FUNCTION' + ]) + silver_template = A2lSilverTemplate(test_a2l) + result = silver_template.render() + expected = '\n'.join([ + '/* QTronic Header */', + 'ASAP2_VERSION 1 6', + '/begin PROJECT SPM ""', + '/begin MODULE SPM ""', + '', + '/begin CHARACTERISTIC', + ' char_dummy /* Name */', + ' "???" /* LongIdentifier */', + ' VALUE /* Type */', + ' 0x00000000 /* address: char_dummy */', + ' UBYTE_COL_DIRECT /* Deposit */', + ' 0 /* MaxDiff */', + ' Scaling_1 /* Conversion */', + ' 0 /* LowerLimit */', + ' 1 /* UpperLimit */', + '/end CHARACTERISTIC', + '', + '/begin FUNCTION', + ' DummyFunction /* Name */', + ' "" /* LongIdentifier */', + ' /begin DEF_CHARACTERISTIC', + ' char_dummy /* Identifier */', + ' /end DEF_CHARACTERISTIC', + ' /begin IN_MEASUREMENT', + ' meas_dummy /* Identifier */', + ' /end IN_MEASUREMENT', + ' /begin LOC_MEASUREMENT', + ' loc_meas_dummy /* Identifier */', + ' /end LOC_MEASUREMENT', + ' /begin OUT_MEASUREMENT', + ' out_meas_dummy /* Identifier */', + ' /end OUT_MEASUREMENT', + ' /begin SUB_FUNCTION', + ' DummySub.Instance1 /* Identifier */', + ' /end SUB_FUNCTION', + '/end FUNCTION' + '', + '/end MODULE', + '/end PROJECT' + ]) + self.assertEqual(expected, result) diff --git a/tests/pybuild/test_build.py b/tests/pybuild/test_build.py new file mode 100644 index 0000000..8f45f65 --- /dev/null +++ b/tests/pybuild/test_build.py @@ -0,0 +1,345 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for pybuild.build module.""" + +import os +import logging +import unittest +from unittest.mock import MagicMock, patch, PropertyMock +from pathlib import Path + +from pybuild.lib import helper_functions +from pybuild.problem_logger import ProblemLogger +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.signal_interfaces import CsvSignalInterfaces +from pybuild.core import Core +from pybuild import build + +SRC_DIR = Path(__file__).parent + + +def remove(*files): + """Try to remove file.""" + for file_ in files: + try: + os.remove(file_) + except FileNotFoundError: + pass + + +def exists(*files): + """Check if file exists.""" + for file_ in files: + if not os.path.isfile(file_): + raise AssertionError(f'File {file_} does not exist.') + return True + + +class TestBuild(unittest.TestCase): + """Test case for testing the build module.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + output_folder = Path(SRC_DIR, 'output') + cnfg_files_folder = Path(SRC_DIR, 'cnfg_files') + common_src_dir = str(Path(SRC_DIR, 'common_src_files')) + prj_cnf_dir = str(cnfg_files_folder) + prj_out_dir = str(output_folder) + prj_src_dir = str(Path(SRC_DIR, 'src_files')) + projdir = cnfg_files_folder.resolve() + helper_functions.create_dir(Path(SRC_DIR, 'output')) + helper_functions.create_dir(Path(cnfg_files_folder, 'output')) + + self.build_cfg = MagicMock(spec_set=BuildProjConfig(Path(cnfg_files_folder, 'ProjectCfg.json'))) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.build_cfg.get_reports_dst_dir = MagicMock(return_value=prj_out_dir) + self.build_cfg.get_src_code_dst_dir = MagicMock(return_value=prj_out_dir) + self.build_cfg.get_unit_cfg_deliv_dir = MagicMock(return_value=prj_out_dir) + self.build_cfg.get_did_cfg_file_name = MagicMock(return_value='DIDIds_FullRange') + self.build_cfg.get_car_com_dst = MagicMock(return_value=os.path.join(prj_out_dir, 'CarCom_DIDDefs.csv')) + self.build_cfg.get_core_dummy_name = MagicMock(return_value=prj_out_dir + '/VcCoreDummy') + self.build_cfg.get_nvm_defs = MagicMock(return_value={ + 'fileName': 'vcc_nvm_struct', + "baseNvmStructs": "nvm_structs_ref_empty.json" + }) + self.build_cfg.get_common_src_dir = MagicMock(return_value=common_src_dir) + self.build_cfg.get_unit_src_dirs = MagicMock(return_value={'mocked': prj_src_dir}) + self.build_cfg.get_unit_cfg_dirs = MagicMock(return_value={'mocked': prj_cnf_dir}) + self.build_cfg.get_a2l_name = MagicMock(return_value='merged.a2l') + self.build_cfg.get_root_dir = MagicMock(return_value=projdir) + self.build_cfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include tl_basetypes.h\n' + type(self.unit_cfg).code_generators = 'target_link' + + @staticmethod + def test_setup_logging(): + """Check that init_logger is called.""" + log = logging.getLogger() + log_dst_dir = str(Path(SRC_DIR, 'output')) + problem_logger = MagicMock(spec_set=ProblemLogger) + build.setup_logging(log_dst_dir, problem_logger, debug=True, quiet=True) + problem_logger.init_logger.assert_called_once_with(log) + + def test_check_interfaces(self): + """Check that interface check is run.""" + signal_if = MagicMock(spec_set=CsvSignalInterfaces) + signal_if.check_config = MagicMock(return_value={'sigs': {'ext': {}, 'int': {}}}) + build.check_interfaces(self.build_cfg, signal_if) + self.build_cfg.get_reports_dst_dir.assert_called_once() + signal_if.check_config.called_once() + + def test_interface_report(self): + """Check that interface report is generated.""" + signal_if = MagicMock(spec_set=CsvSignalInterfaces) + signal_if.check_config = MagicMock(return_value={'sigs': {'ext': {}, 'int': {}}}) + filename = str(Path(SRC_DIR, 'output', 'SigIf.html')) + remove(filename) + build.interface_report(self.build_cfg, self.unit_cfg, signal_if) + self.build_cfg.get_reports_dst_dir.assert_called_once() + exists(filename) + + def test_generate_did_files(self): + """Check that interface report is generated.""" + output_folder = Path(SRC_DIR, 'output') + filename = str(Path(output_folder, 'VcDIDDefinition')) + cfile = filename + '.c' + hfile = filename + '.h' + csvfile = str(Path(output_folder, 'CarCom_DIDDefs.csv')) + remove(cfile, hfile, csvfile) + build.generate_did_files(self.build_cfg, self.unit_cfg) + self.build_cfg.get_src_code_dst_dir.assert_called_once() + self.build_cfg.get_did_cfg_file_name.assert_called() + self.build_cfg.get_prj_cfg_dir.assert_called() + exists(cfile, hfile, csvfile) + + def test_generate_core_dummy_denso(self): + """Check that core dummy files are generated.""" + self.build_cfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + core = MagicMock(spec_set=Core) + core.get_current_core_config = MagicMock() + filename = str(Path(SRC_DIR, 'output', 'VcCoreDummy')) + cfile = filename + '.c' + hfile = filename + '.h' + remove(cfile, hfile) + build.generate_core_dummy(self.build_cfg, core, self.unit_cfg) + core.get_current_core_config.assert_called_once() + self.build_cfg.get_core_dummy_name.assert_called_once() + self.build_cfg.get_ecu_info.assert_called_once() + exists(cfile, hfile) + + def test_generate_core_dummy_rb(self): + """Check that core dummy files are generated.""" + self.build_cfg.get_ecu_info = MagicMock(return_value=('RB', 'xx')) + core = MagicMock(spec_set=Core) + core.get_current_core_config = MagicMock() + filename = str(Path(SRC_DIR, 'output', 'VcCoreDummy')) + cfile = filename + '.c' + hfile = filename + '.h' + remove(cfile, hfile) + build.generate_core_dummy(self.build_cfg, core, self.unit_cfg) + core.get_current_core_config.assert_called_once() + self.build_cfg.get_core_dummy_name.assert_called_once() + self.build_cfg.get_ecu_info.assert_called_once() + exists(cfile, hfile) + + def test_generate_core_dummy_other(self): + """Check that core dummy files are generated.""" + self.build_cfg.get_ecu_info = MagicMock(return_value=('Other', 'yy')) + core = MagicMock(spec_set=Core) + core.get_current_core_config = MagicMock() + self.assertRaises(ValueError, build.generate_core_dummy, self.build_cfg, core, self.unit_cfg) + + def test_generate_ext_var(self): + """Check that ExtVar files are generated.""" + self.build_cfg.has_yaml_interface = False + signal_if = MagicMock(spec_set=CsvSignalInterfaces) + signal_if.get_external_io = MagicMock(return_value=( + { + 'EMS-Output': {}, + 'EMS-Input': {'DummyIn': { + 'type': 'Float32', + 'min': 0, + 'max': 100, + 'unit': 'Nm', + 'description': 'Dummy', + 'init': 0, + 'element_index': 5, + 'IOType': 'x' + }}, + 'LIN-Output': {}, + 'LIN-Input': {}, + 'CAN-Output': {}, + 'CAN-Input': {}, + 'Private CAN-Output': {}, + 'Private CAN-Input': {} + }, { + 'EMS-Output': {}, + 'EMS-Input': {'DummyInSafe': { + 'type': 'Float32', + 'min': 0, + 'max': 100, + 'unit': 'Nm', + 'description': 'Safe dummy', + 'init': 0, + 'element_index': 5, + 'IOType': 's' + }}, + 'LIN-Output': {}, + 'LIN-Input': {}, + 'CAN-Output': {}, + 'CAN-Input': {}, + 'Private CAN-Output': {}, + 'Private CAN-Input': {} + }, {}, {} + )) + filepath = str(Path(SRC_DIR, 'output')) + files = [ + filepath + '/VcExtVar.c', + filepath + '/VcExtVar.a2l', + filepath + '/VcExtVarSafe.c', + filepath + '/VcExtVarSafe.a2l', + filepath + '/VcDebug.c', + filepath + '/VcDebug.a2l', + filepath + '/VcDebugOutput.c', + filepath + '/VcDebugOutput.a2l'] + remove(*files) + with patch('pybuild.user_defined_types.UserDefinedTypes') as udt_mock: + udt_mock.return_value.common_header_files = PropertyMock(return_value=[]) + build.generate_ext_var(self.build_cfg, self.unit_cfg, signal_if, udt_mock) + signal_if.get_external_io.assert_called_once() + self.build_cfg.get_src_code_dst_dir.assert_called() + exists(*files) + self.assertFalse(os.path.isfile(f"{filepath}/VcExtVarSecure.c")) + + def test_generate_nvm_def(self): + """Check that NVM files are generated.""" + unit_cfg = MagicMock(spec_set=UnitConfigs) + type(unit_cfg).base_types_headers = '' + no_nvm_a2l = False + filepath = str(Path(SRC_DIR, 'output')) + files = [ + filepath + '/vcc_nvm_struct.c', + filepath + '/vcc_nvm_struct.h', + filepath + '/vcc_nvm_struct.a2l'] + remove(*files) + build.generate_nvm_def(self.build_cfg, unit_cfg, no_nvm_a2l) + self.build_cfg.get_src_code_dst_dir.assert_called() + unit_cfg.get_per_cfg_unit_cfg.assert_called() + exists(*files) + + @unittest.mock.patch('shutil.copy2') + def test_copy_unit_src_to_src_out(self, mock_copy): + """Check that source files are copied.""" + build.copy_unit_src_to_src_out(self.build_cfg) + self.build_cfg.get_unit_src_dirs.assert_called() + self.build_cfg.get_src_code_dst_dir.assert_called() + mock_copy.assert_called() + + @unittest.mock.patch('shutil.copy2') + def test_copy_unit_cfgs_to_output(self, mock_copy): + """Check that unit-configs are copied.""" + build.copy_unit_cfgs_to_output(self.build_cfg) + self.build_cfg.get_unit_cfg_deliv_dir.assert_called() + self.build_cfg.get_unit_cfg_dirs.assert_called() + mock_copy.assert_called() + + def test_merge_a2l_files(self): + """Check that a2l-files are merged.""" + unit_cfg = MagicMock(spec_set=UnitConfigs) + filepath = str(Path(SRC_DIR, 'output')) + remove(filepath + '/merged.a2l') + build.merge_a2l_files(self.build_cfg, unit_cfg) + self.build_cfg.get_unit_src_dirs.assert_called() + self.build_cfg.get_src_code_dst_dir.assert_called() + self.build_cfg.get_a2l_name.assert_called() + unit_cfg.get_per_unit_cfg.assert_called() + exists(filepath + '/merged.a2l') + + def test_build_no_cfg(self): + """Check that main entrypoint raises exception for missing config.""" + prj_root = str(Path(SRC_DIR, 'cnfg_files', 'NonexistentProjectCfg.json')) + with unittest.mock.patch('pybuild.build.find_all_project_configs') as mock: + mock.return_value = [prj_root] + self.assertRaises(FileNotFoundError, build.build, prj_root, quiet=True) + + @staticmethod + @unittest.mock.patch('pybuild.unit_configs.UnitConfigs.get_per_unit_cfg') + @unittest.mock.patch('pybuild.build.find_all_project_configs') + def test_build(mock_find_all_project_configs, mock_get_per_unit_cfg): + """Check that main entrypoint can be run without exceptions.""" + prj_root = str(Path(SRC_DIR, 'cnfg_files', 'ProjectCfg.json')) + output = str(Path(SRC_DIR, 'output', 'logs', 'build.log')) + remove(output) + mock_find_all_project_configs.return_value = [prj_root] + mock_get_per_unit_cfg.return_value = {'VcScBCoord': {}, 'VcScCVehMtn': {}, 'VcScFeh': {}} + build.build(prj_root, + interface=True, + core_dummy=True, + no_abort=False, + debug=True, + quiet=True) + exists(output) + + @staticmethod + @unittest.mock.patch('pybuild.unit_configs.UnitConfigs.get_per_unit_cfg') + @unittest.mock.patch('pybuild.build.find_all_project_configs') + def test_build_ec(mock_find_all_project_configs, mock_get_per_unit_cfg): + """Check that main entrypoint can be run without exceptions.""" + prj_root = str(Path(SRC_DIR, 'cnfg_files', 'ProjectCfg.json')) + output = str(Path(SRC_DIR, 'output', 'logs', 'build.log')) + remove(output) + mock_find_all_project_configs.return_value = [prj_root] + mock_get_per_unit_cfg.return_value = { + 'VcScBCoord': {'code_generator': 'embedded_coder'}, + 'VcScCVehMtn': {'code_generator': 'embedded_coder'}, + 'VcScFeh': {'code_generator': 'embedded_coder'}} + build.build(prj_root, + interface=True, + core_dummy=True, + no_abort=False, + debug=True, + quiet=True) + exists(output) + + @staticmethod + @unittest.mock.patch('pybuild.unit_configs.UnitConfigs.get_per_unit_cfg') + @unittest.mock.patch('pybuild.build.find_all_project_configs') + def test_build_mixed_ec_tl(mock_find_all_project_configs, mock_get_per_unit_cfg): + """Check that main entrypoint can be run without exceptions.""" + prj_root = str(Path(SRC_DIR, 'cnfg_files', 'ProjectCfg.json')) + output = str(Path(SRC_DIR, 'output', 'logs', 'build.log')) + remove(output) + mock_find_all_project_configs.return_value = [prj_root] + mock_get_per_unit_cfg.return_value = { + 'VcScBCoord': {'code_generator': 'embedded_coder'}, + 'VcScCVehMtn': {'code_generator': 'target_link'}, + 'VcScFeh': {}} + build.build(prj_root, + interface=True, + core_dummy=True, + no_abort=False, + debug=True, + quiet=True) + exists(output) + + @staticmethod + @unittest.mock.patch('pybuild.unit_configs.UnitConfigs.get_per_unit_cfg') + @unittest.mock.patch('pybuild.build.find_all_project_configs') + def test_build_no_abort(mock_find_all_project_configs, mock_get_per_unit_cfg): + """Check that main entrypoint can be run without exceptions with no abort set to True.""" + prj_root = str(Path(SRC_DIR, 'cnfg_files', 'ProjectCfg.json')) + output = str(Path(SRC_DIR, 'output', 'logs', 'build.log')) + remove(output) + mock_find_all_project_configs.return_value = [prj_root] + mock_get_per_unit_cfg.return_value = {'VcScBCoord': {}, 'VcScCVehMtn': {}, 'VcScFeh': {}} + build.build(prj_root, + interface=True, + core_dummy=True, + no_abort=True, + debug=True, + quiet=True) + exists(output) diff --git a/tests/pybuild/test_build_proj_configs.py b/tests/pybuild/test_build_proj_configs.py new file mode 100644 index 0000000..8c479e4 --- /dev/null +++ b/tests/pybuild/test_build_proj_configs.py @@ -0,0 +1,32 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Module for testing the reading of core id legacy config files.""" + +import unittest + +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig + +CNFG_DIR = Path(Path(__file__).parent, 'cnfg_files') + + +class TestReadCodeSw(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + @classmethod + def setUpClass(cls): + """Set-up common data structures for all tests in the test case.""" + cls.build_prj_cfg = BuildProjConfig(str(Path(CNFG_DIR, 'ProjectCfg.json'))) + + def test_get_root_dir(self): + """Check reading the build project definition files.""" + result = self.build_prj_cfg.get_root_dir() + expected = str(CNFG_DIR.resolve()) + self.assertEqual(result, expected) + + def test_get_incuded_units(self): + """Check reading the build project definition files.""" + result = self.build_prj_cfg.get_included_units() + expected = ['VcScBCoord', 'VcScCVehMtn', 'VcScFeh', 'VcConst'] + self.assertEqual(result, expected) diff --git a/tests/pybuild/test_check_interface.py b/tests/pybuild/test_check_interface.py new file mode 100644 index 0000000..536de96 --- /dev/null +++ b/tests/pybuild/test_check_interface.py @@ -0,0 +1,108 @@ +"""Tests for the check_interface module.""" + +from unittest import TestCase, mock + +from pybuild.interface.base import BaseApplication, Signal, LOGGER as bl +from pybuild.interface.application import Model +import pybuild.check_interface as checker + +checker.LOGGER.setLevel(10) +bl.setLevel(10) + + +class TestChecker(TestCase): + """Test the check_interface module.""" + + @mock.patch("pybuild.interface.application.Application.parse_definition") + def test_process_app(self, app_parser): + """Test the process_app function.""" + app = checker.process_app("test") + self.assertTrue(isinstance(app, BaseApplication)) + + @staticmethod + def test_check_models_generic(): + """Test the check_models_generic function.""" + model1 = Model(None) + model1.name = "model1" + model1._load_json = mock.MagicMock() + model2 = Model(None) + model2.name = "model2" + model2._load_json = mock.MagicMock() + + checker.check_models_generic([model1, model2], ["model1", "model2"], []) + + def test_get_active_signals(self): + """Test the get_active_signals function.""" + model = Model(None) + model.get_signal_properties = mock.MagicMock() + model.get_signal_properties.return_value = {"configs": "whatever"} + model._load_json = mock.MagicMock() + signal1 = Signal("test1", model) + signal2 = Signal("test2", model) + + feature_cfg = mock.MagicMock() + feature_cfg.check_if_active_in_config.side_effect = [True, False] + result = checker.get_active_signals([signal1, signal2], feature_cfg) + expected = [signal1] + self.assertListEqual(result, expected) + + def test_correct_type(self): + """Test the correct_type function.""" + spec1 = {"type": "Float32"} + spec2 = {"type": "Float32"} + spec3 = {"type": "Bool"} + self.assertTrue(checker.correct_type(spec1, spec2)) + self.assertFalse(checker.correct_type(spec1, spec3)) + + def test_correct_attribute(self): + """Test the correct_attribute function.""" + spec1 = {"type": "Float32", "test": 1, "another": 1} + spec2 = {"type": "Float32", "test": 1} + spec3 = {"type": "Bool", "test": 2} + self.assertTrue(checker.correct_attribute(spec1, spec2, "test")) + self.assertFalse( + checker.correct_attribute(spec1, spec3, "test", check_bool=True) + ) + self.assertFalse( + checker.correct_attribute(spec1, spec3, "test", check_bool=False) + ) + self.assertTrue( + checker.correct_attribute(spec3, spec1, "test", check_bool=False) + ) + self.assertFalse( + checker.correct_attribute(spec3, spec1, "test", check_bool=True) + ) + self.assertTrue(checker.correct_attribute(spec1, spec2, "another", default=1)) + self.assertFalse(checker.correct_attribute(spec1, spec2, "another", default=2)) + + @staticmethod + def test_check_signals(): + """Test the check_signals function.""" + owner = BaseApplication() + owner.name = "test" + owner.get_signal_properties = mock.MagicMock() + owner.get_signal_properties.side_effect = [ + {"type": "Bool", "min": 0, "max": 1000, "unit": "s", "width": 1}, + {"type": "Bool", "min": 0, "max": 1000, "unit": "s", "width": 1}, + ] + signal1 = Signal("signal1", owner) + owner._insignals = {"signal1"} + owner._outsignals = {"signal1"} + owner._signals = {"signal1": signal1} + errors = {"type": 0, "range": 0, "unit": 0, "width": 0} + checker.check_signals([signal1], [signal1], errors) + + def test_signal_match(self): + """Test the signal_match function.""" + matches = {} + signals = [Signal(f"signal{i}", None) for i in range(10)] + checker.signal_match(signals[:-1], signals[1:], matches) + expected = {signal.name: True for signal in signals[1:-1]} + expected[signals[0].name] = False + self.assertDictEqual(expected, matches) + + matches = {} + signals = [Signal(f"signal{i}", None) for i in range(10)] + checker.signal_match(signals[:-1], signals[1:-5], matches) + checker.signal_match(signals[:-1], signals[-5:], matches) + self.assertDictEqual(expected, matches) diff --git a/tests/pybuild/test_config.py b/tests/pybuild/test_config.py new file mode 100644 index 0000000..774951f --- /dev/null +++ b/tests/pybuild/test_config.py @@ -0,0 +1,153 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Test the config module.""" +import json +import os +import unittest +from unittest.mock import patch +from pathlib import Path + +from pybuild.config import ProcessHandler +from pybuild.config import CConfigParser +from pybuild.config import HeaderConfigParser +from pybuild.config import JsonConfigHandler + +SRC_DIR = Path(__file__).parent +SKIP_WHILE_DEVELOPING = False +# SKIP_WHILE_DEVELOPING = True + + +class TestConfig(unittest.TestCase): + """Test the config module.""" + + def setUp(self): + """Set up the test.""" + # Set create_new to True to update the files in reference map + # And disable the skip statement where you want tests + # self.create_new = SKIP_WHILE_DEVELOPING + # self.create_new = True + self.create_new = False + basename_patch = patch('os.path.basename', + return_value='VcVmcPmm__HEP7') + self.addCleanup(basename_patch.stop) + self.basename_patch = basename_patch.start() + cnfg_dir = str(Path(SRC_DIR, 'cnfg_files')) + self.files = { + 'c_file': os.path.join(cnfg_dir, 'VcVmcPmm.c'), + 'c_sedded': os.path.join(cnfg_dir, 'VcVmcPmm.e'), + 'aux_file': os.path.join(cnfg_dir, 'tl_aux_defines_VmcPmm__HE.h'), + 'oport_file': os.path.join(cnfg_dir, 'VcVmcPmm__HEP7_OPortMvd_LocalDefs.h'), + 'json_file': os.path.join(cnfg_dir, 'config_VcVmcPmm__HEP7.json'), + 'ref_dir': str(Path(SRC_DIR, 'reference_files'))} + + def test_create_new(self): + """Make sure this test is testing.""" + self.assertFalse(self.create_new) + self.assertFalse(SKIP_WHILE_DEVELOPING) + + @unittest.skipIf(SKIP_WHILE_DEVELOPING, 'Updating other tests') + def test_sed(self): + """Test updating VcVmcPmm.""" + c_code = CConfigParser.read_file(self.files['c_file']) + ref_e = self.files['c_sedded'] + if self.create_new: + # Hack to update correct answers + with open(ref_e, 'w') as ref_file: + for line in c_code: + ref_file.write(line + '\n') + with open(ref_e) as ref_file: + sedded_ref = [line.rstrip('\n') for line in ref_file.readlines()] + # assertListEqual is too slow to run regularly + # self.assertTrue(c_code == sedded_ref) + self.assertListEqual(c_code, sedded_ref) + + @unittest.skipIf(SKIP_WHILE_DEVELOPING, 'Updating other tests') + def test_read_aux(self): + """Test reading OPort file.""" + local_defines = HeaderConfigParser.read_file(self.files['aux_file']) + header = HeaderConfigParser() + header.parse_file_content(local_defines) + local_defs = header.get_config() + json_ref = self.files['ref_dir'] + '/config_local_defs.json' + if self.create_new: + # Hack to update correct answers + with open(json_ref, 'w') as ref_file: + ref_file.write(json.dumps(local_defs, indent=4)) + with open(json_ref) as ref_config_file: + local_defs_ref = json.load(ref_config_file) + self.assertDictEqual(local_defs, local_defs_ref) + + @unittest.skipIf(SKIP_WHILE_DEVELOPING, 'Updating other tests') + def test_read_aux_after_oport(self): + """Test reading OPort file.""" + oport_defines = HeaderConfigParser.read_file(self.files['oport_file']) + header = HeaderConfigParser() + header.parse_file_content(oport_defines) + oport_defs = header.get_config() + local_defines = HeaderConfigParser.read_file(self.files['aux_file']) + header = HeaderConfigParser() + header.set_defines(oport_defs) + header.parse_file_content(local_defines) + local_defs = header.get_config() + json_ref = self.files['ref_dir'] + '/config_combined_header.json' + if self.create_new: + # Hack to update correct answers + with open(json_ref, 'w') as ref_file: + ref_file.write(json.dumps(local_defs, indent=4)) + with open(json_ref) as ref_config_file: + local_defs_ref = json.load(ref_config_file) + self.assertDictEqual(local_defs, local_defs_ref) + + @unittest.skipIf(SKIP_WHILE_DEVELOPING, 'Updating other tests') + def test_read_oport(self): + """Test reading OPort file.""" + local_defines = HeaderConfigParser.read_file(self.files['oport_file']) + header = HeaderConfigParser() + header.parse_file_content(local_defines) + local_defs = header.get_config() + json_ref = self.files['ref_dir'] + '/config_OPort_defs.json' + if self.create_new: + # Hack to update correct answers + with open(json_ref, 'w') as ref_file: + ref_file.write(json.dumps(local_defs, indent=4)) + with open(json_ref) as ref_config_file: + local_defs_ref = json.load(ref_config_file) + self.assertDictEqual(local_defs, local_defs_ref) + + @unittest.skipIf(SKIP_WHILE_DEVELOPING, 'Updating other tests') + def test_get_files(self): + """Test that we get the correct file names. + + A current model is used, but it does not have to actually exist. + """ + model_dir = os.path.join('Models', 'SSPTM', 'VcVmcPmm__HEP7') + model_src_dir = os.path.join(model_dir, 'pybuild_src') + model_cfg_dir = os.path.join(model_dir, 'pybuild_cfg') + files = ProcessHandler.get_files(os.path.join(model_dir, 'VcVmcPmm__HEP7.mdl')) + config_dir = str(Path(SRC_DIR, 'cnfg_files')) + expected_files = ( + self.files['oport_file'].replace(config_dir, model_src_dir), + self.files['aux_file'].replace(config_dir, model_src_dir), + self.files['c_file'].replace(config_dir, model_src_dir), + self.files['json_file'].replace(config_dir, model_cfg_dir), + ) + self.assertTupleEqual(files, expected_files) + + @unittest.skipIf(SKIP_WHILE_DEVELOPING, 'Updating other tests') + def test_update_complete(self): + """Test a complete config generation for a nasty model.""" + local_defs = ProcessHandler.get_header_config(self.files['oport_file'], {}) + aux_defs = ProcessHandler.get_header_config(self.files['aux_file'], local_defs) + cparser = CConfigParser() + c_code = cparser.read_file(self.files['c_file']) + json_handler = JsonConfigHandler(cparser, aux_defs) + unit_config = json_handler.read_config(self.files['json_file']) + json_handler.update_config(unit_config, c_code, aux_defs) + json_ref = self.files['ref_dir'] + '/config_combined.json' + if self.create_new: + # Hack to update correct answers + json_handler.write_config(json_ref, unit_config) + with open(json_ref) as ref_config_file: + unit_ref_json = json.load(ref_config_file) + self.assertDictEqual(unit_config, unit_ref_json) diff --git a/tests/pybuild/test_core.py b/tests/pybuild/test_core.py new file mode 100644 index 0000000..16afc6b --- /dev/null +++ b/tests/pybuild/test_core.py @@ -0,0 +1,208 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for Core class.""" +import unittest +from unittest.mock import MagicMock +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.core import Core, HICore + +from .core_cnfg import CORE_CFG + + +def get_core_ids_proj(conf): + """Function returning a fake core config.""" + return CORE_CFG[conf] + + +class TestCore(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = str(Path(Path(__file__).parent, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + self.unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value={'core': {'VcEvAmbPCompPlausMon': {'unit': {}}}}) + self.unit_cfg.check_if_in_per_cfg_unit_cfg = MagicMock(return_value=True) + + def test_get_current_core_cfg(self): + """Check return core cfg.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG') + core = Core(self.build_cfg, self.unit_cfg) + result = core.get_current_core_config() + self.assertEqual(result, {}) + + def test_get_current_core_cfg1(self): + """Check return core cfg.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + core = Core(self.build_cfg, self.unit_cfg) + result = core.get_current_core_config() + self.assertEqual(result, CORE_CFG['CFG1']) + + def test_get_current_core_cfg1_no_warnings(self): + """Check for warnings or errors. Should be none.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + Core.clear_log() + core = Core(self.build_cfg, self.unit_cfg) + core.get_current_core_config() + self.assertEqual(Core.get_nbr_problems(), {'critical': 0, 'warning': 0}) + + def test_get_current_core_cfg2(self): + """Check return core cfg.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG2') + core = Core(self.build_cfg, self.unit_cfg) + result = core.get_current_core_config() + self.assertEqual(result, CORE_CFG['CFG2']) + + def test_get_current_core_cfg11(self): + """Check return core cfg.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG11') + core = Core(self.build_cfg, self.unit_cfg) + result = core.get_current_core_config() + self.assertEqual(result, {}) + + def test_get_current_core_cfg_empty(self): + """Check return core cfg.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG11') + self.unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value={}) + core = Core(self.build_cfg, self.unit_cfg) + result = core.get_current_core_config() + self.assertEqual(result, {}) + + +class TestHICore(unittest.TestCase): + """Test case for testing class HICore.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + project_config = MagicMock() + project_config.get_a2l_cfg.return_value = {'name': 'DUMMY'} + project_config.get_prj_cfg_dir.return_value = 'dummy' + unit_configs = MagicMock() + unit_configs.get_per_unit_cfg.return_value = {} + + self.dummy_yaml_dtcs = { + 'VcEventOne': 0x123ABC, + 'VcEventTwo': 0xABC123, + 'VcEventThree': 0xFFFFFF + } + self.hi_core = HICore(project_config, unit_configs) + self.hi_core._get_project_dtcs = MagicMock(return_value={'VcEventOne', 'VcEventTwo', 'VcEventThree'}) + self.hi_core._read_dtc_yaml_file = MagicMock(return_value=self.dummy_yaml_dtcs) + + def test_get_diagnostic_trouble_codes(self): + """Test the get_diagnostic_trouble_codes function.""" + result = self.hi_core.get_diagnostic_trouble_codes() + self.assertEqual(result, self.dummy_yaml_dtcs) + + def test_get_diagnostic_trouble_codes_missing_in_project(self): + """Test the get_diagnostic_trouble_codes function, when a DTC is in yaml but not project.""" + self.hi_core._get_project_dtcs.return_value = {'VcEventOne', 'VcEventTwo'} + result = self.hi_core.get_diagnostic_trouble_codes() + expected = { + 'VcEventOne': 0x123ABC, + 'VcEventTwo': 0xABC123 + } + self.assertEqual(result, expected) + + def test_get_diagnostic_trouble_codes_missing_in_yaml(self): + """Test the get_diagnostic_trouble_codes function, when a DTC is in project but not in yaml.""" + self.hi_core._read_dtc_yaml_file.return_value = { + 'VcEventOne': 0x123ABC, + 'VcEventTwo': 0xABC123 + } + result = self.hi_core.get_diagnostic_trouble_codes() + expected = { + 'VcEventOne': 0x123ABC, + 'VcEventTwo': 0xABC123 + } + self.assertEqual(result, expected) + + def test_get_header_content(self): + """Test get_header_content.""" + self.hi_core.diagnostic_trouble_codes = self.dummy_yaml_dtcs + result = self.hi_core.get_header_content() + expected = [ + '#ifndef VCCORESUPPLIERABSTRACTION_H\n', + '#define VCCORESUPPLIERABSTRACTION_H\n', + '\n', + '/* Core API Supplier Abstraction */\n', + '\n', + '#include "tl_basetypes.h"\n', + '#include "Rte_DUMMY.h"\n', + '\n', + '/* enum EventStatus {passed=0, failed=1, prepassed=2, prefailed=3} */\n', + '#define Dem_SetEventStatus(EventName, EventStatus)', + ' ', + 'VcCoreSupplierAbstraction_##EventName##_SetEventStatus(EventStatus)\n', + '\n#include "PREDECL_CODE_ASIL_D_START.h"\n', + 'UInt8 VcCoreSupplierAbstraction_VcEventOne_SetEventStatus(UInt8 EventStatus);\n', + 'UInt8 VcCoreSupplierAbstraction_VcEventTwo_SetEventStatus(UInt8 EventStatus);\n', + 'UInt8 VcCoreSupplierAbstraction_VcEventThree_SetEventStatus(UInt8 EventStatus);\n', + '#include "PREDECL_CODE_ASIL_D_END.h"\n', + '\n#endif /* VCCORESUPPLIERABSTRACTION_H */\n' + ] + self.assertListEqual(expected, result) + + def test_get_header_content_no_dtcs(self): + """Test get_header_content without DTCs.""" + self.hi_core.did_dict = {} + result = self.hi_core.get_header_content() + expected = [ + '#ifndef VCCORESUPPLIERABSTRACTION_H\n', + '#define VCCORESUPPLIERABSTRACTION_H\n', + '\n', + '/* Core API Supplier Abstraction */\n', + '\n', + '#include "tl_basetypes.h"\n', + '#include "Rte_DUMMY.h"\n', + '\n', + '\n#endif /* VCCORESUPPLIERABSTRACTION_H */\n' + ] + self.assertListEqual(expected, result) + + def test_get_source_content(self): + """Test get_source_content.""" + self.maxDiff = None + self.hi_core.diagnostic_trouble_codes = self.dummy_yaml_dtcs + result = self.hi_core.get_source_content() + expected = [ + '#include "VcCoreSupplierAbstraction.h"\n', + '\n', + '#include "CVC_CODE_ASIL_D_START.h"\n', + 'UInt8 VcCoreSupplierAbstraction_VcEventOne_SetEventStatus(UInt8 EventStatus)\n', + '{\n', + ' Rte_Call_Event_DTC_0x123ABC_SetEventStatus(EventStatus);\n', + ' return 0;\n', + '}\n', + '\n', + 'UInt8 VcCoreSupplierAbstraction_VcEventTwo_SetEventStatus(UInt8 EventStatus)\n', + '{\n', + ' Rte_Call_Event_DTC_0xABC123_SetEventStatus(EventStatus);\n', + ' return 0;\n', + '}\n', + '\n', + 'UInt8 VcCoreSupplierAbstraction_VcEventThree_SetEventStatus(UInt8 EventStatus)\n', + '{\n', + ' Rte_Call_Event_DTC_0xFFFFFF_SetEventStatus(EventStatus);\n', + ' return 0;\n', + '}\n', + '\n', + '#include "CVC_CODE_ASIL_D_END.h"\n' + ] + self.assertListEqual(expected, result) + + def test_get_source_file_content_no_dtcs(self): + """Test get_source_content without DTCs.""" + self.hi_core.did_dict = {} + result = self.hi_core.get_source_content() + expected = [ + '#include "VcCoreSupplierAbstraction.h"\n', + '\n' + ] + self.assertListEqual(expected, result) diff --git a/tests/pybuild/test_core_dummy.py b/tests/pybuild/test_core_dummy.py new file mode 100644 index 0000000..f6431b9 --- /dev/null +++ b/tests/pybuild/test_core_dummy.py @@ -0,0 +1,410 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for CoreDummy class.""" + +import io +import unittest +from unittest.mock import patch, mock_open, MagicMock +from pybuild.core_dummy import CoreDummy +from pybuild.unit_configs import UnitConfigs + +from .core_cnfg import CORE_CFG +from . import core_dummy_cnfg + + +class TestCoreDummyTL(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + type(self.unit_cfg).code_generators = {'target_link'} + self.core_dummy = CoreDummy(CORE_CFG['CFG1'], self.unit_cfg) + self.core_dummy.fh_h = io.StringIO() + self.core_dummy.fh_c = io.StringIO() + + def tearDown(self): + """Tear down common data structures for all tests in the test case.""" + self.core_dummy.fh_h.close() + self.core_dummy.fh_h = None + self.core_dummy.fh_c.close() + self.core_dummy.fh_c = None + + def test_gen_rb_header(self): + """Test generation of the RB start of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_rb_header('TESTFILE.h') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_HEADER_H_TL) + self.assertEqual(c_result, core_dummy_cnfg.RB_HEADER_C) + + def test_gen_rb_event_dummies(self): + """Test generation of the RB dummy event declarations.""" + self.core_dummy._gen_rb_event_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_EVENT_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_EVENT_C) + + def test_gen_rb_fid_dummies(self): + """Test generation of the RB dummy function id declarations.""" + self.core_dummy._gen_rb_fid_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_FID_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_FID_C) + + def test_gen_rb_iumpr_dummies(self): + """Test generation of the RB dummy IUMPR declarations.""" + self.core_dummy._gen_rb_iumpr_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_IUMPR_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_IUMPR_C) + + def test_gen_rb_mode06_dummies(self): + """Generate the RB dummy mode$06 declarations.""" + self.core_dummy._gen_rb_mode06_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_MODE06_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_MODE06_C) + + def test_gen_rb_rnk_dummies(self): + """Test generation of the RB dummy ranking declarations.""" + self.core_dummy._gen_rb_rnk_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_RNK_H_TL) + self.assertEqual(c_result, core_dummy_cnfg.RB_RNK_C_TL) + + def test_gen_rb_end(self): + """Test generation of the RB end of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_rb_end('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_END_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_END_C) + + def test_generate_rb_core_dummy_files(self): + """Test generation of RB dummy files.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + self.core_dummy.generate_rb_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + def test_generate_rb_core_dummy_files_empty(self): + """Test generation of RB dummy files with empty indata.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + core_dummy = CoreDummy({}, self.unit_cfg) + core_dummy.generate_rb_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + def test_gen_dg2_header(self): + """Test generation of the Denso Gen2/3 start of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_dg2_header('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_HEADER_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_HEADER_C_TL) + + def test_gen_dg2_event_dummies(self): + """Test generation of the Denso Gen2+ dummy event declarations.""" + self.core_dummy._gen_dg2_event_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_EVENT_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_EVENT_C) + + def test_gen_dg2_fid_dummies(self): + """Test generation of the Denso Gen2+ dummy function id declarations.""" + self.core_dummy._gen_dg2_fid_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_FID_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_FID_C) + + def test_gen_dg2_iumpr_dummies(self): + """Test generation of the Denso Gen2+ dummy IUMPR declarations.""" + self.core_dummy._gen_dg2_iumpr_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_IUMPR_H_TL) + self.assertEqual(c_result, core_dummy_cnfg.DG2_IUMPR_C_TL) + + def test_gen_dg2_mode06_dummies(self): + """Test generation of the Denso Gen2+ dummy mode$06 declarations.""" + self.core_dummy._gen_dg2_mode06_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_MODE06_H_TL) + self.assertEqual(c_result, core_dummy_cnfg.DG2_MODE06_C_TL) + + def test_gen_dg2_rnk_dummies(self): + """Test generation of the Denso Gen2+ dummy ranking declarations.""" + self.core_dummy._gen_dg2_rnk_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_RNK_H_TL) + self.assertEqual(c_result, core_dummy_cnfg.DG2_RNK_C_TL) + + def test_gen_dg2_end(self): + """Test generation of the Denso Gen2+ end of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_dg2_end('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_END_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_END_C) + + def test_generate_dg2_core_dummy_files(self): + """Test generation of Denso dummy files.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + self.core_dummy.generate_dg2_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + def test_generate_dg2_core_dummy_files_empty(self): + """Test generation of Denso dummy files with empty indata.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + core_dummy = CoreDummy({}, self.unit_cfg) + core_dummy.generate_dg2_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + +class TestCoreDummyMixed(TestCoreDummyTL): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include "rtwtypes.h"\n#include "tl_basetypes.h"\n' + type(self.unit_cfg).code_generators = {'target_link', 'embedded_coder'} + self.core_dummy = CoreDummy(CORE_CFG['CFG1'], self.unit_cfg) + self.core_dummy.fh_h = io.StringIO() + self.core_dummy.fh_c = io.StringIO() + + def test_gen_dg2_header(self): + """Test generation of the Denso Gen2/3 start of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_dg2_header('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_HEADER_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_HEADER_C_MIXED) + + def test_gen_rb_header(self): + """Test generation of the RB start of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_rb_header('TESTFILE.h') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_HEADER_H_MIXED) + self.assertEqual(c_result, core_dummy_cnfg.RB_HEADER_C) + + +class TestCoreDummyEC(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include "rtwtypes.h"\n' + type(self.unit_cfg).code_generators = {'embedded_coder'} + self.core_dummy = CoreDummy(CORE_CFG['CFG1'], self.unit_cfg) + self.core_dummy.fh_h = io.StringIO() + self.core_dummy.fh_c = io.StringIO() + + def tearDown(self): + """Tear down common data structures for all tests in the test case.""" + self.core_dummy.fh_h.close() + self.core_dummy.fh_h = None + self.core_dummy.fh_c.close() + self.core_dummy.fh_c = None + + def test_gen_rb_header(self): + """Test generation of the RB start of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_rb_header('TESTFILE.h') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_HEADER_H_EC) + self.assertEqual(c_result, core_dummy_cnfg.RB_HEADER_C) + + def test_gen_rb_event_dummies(self): + """Test generation of the RB dummy event declarations.""" + self.core_dummy._gen_rb_event_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_EVENT_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_EVENT_C) + + def test_gen_rb_fid_dummies(self): + """Test generation of the RB dummy function id declarations.""" + self.core_dummy._gen_rb_fid_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_FID_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_FID_C) + + def test_gen_rb_iumpr_dummies(self): + """Test generation of the RB dummy IUMPR declarations.""" + self.core_dummy._gen_rb_iumpr_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_IUMPR_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_IUMPR_C) + + def test_gen_rb_mode06_dummies(self): + """Generate the RB dummy mode$06 declarations.""" + self.core_dummy._gen_rb_mode06_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_MODE06_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_MODE06_C) + + def test_gen_rb_rnk_dummies(self): + """Test generation of the RB dummy ranking declarations.""" + self.core_dummy._gen_rb_rnk_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_RNK_H_EC) + self.assertEqual(c_result, core_dummy_cnfg.RB_RNK_C_EC) + + def test_gen_rb_end(self): + """Test generation of the RB end of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_rb_end('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.RB_END_H) + self.assertEqual(c_result, core_dummy_cnfg.RB_END_C) + + def test_generate_rb_core_dummy_files(self): + """Test generation of RB dummy files.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + self.core_dummy.generate_rb_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + def test_generate_rb_core_dummy_files_empty(self): + """Test generation of RB dummy files with empty indata.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + core_dummy = CoreDummy({}, self.unit_cfg) + core_dummy.generate_rb_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + def test_gen_dg2_header(self): + """Test generation of the Denso Gen2/3 start of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_dg2_header('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_HEADER_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_HEADER_C_EC) + + def test_gen_dg2_event_dummies(self): + """Test generation of the Denso Gen2+ dummy event declarations.""" + self.core_dummy._gen_dg2_event_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_EVENT_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_EVENT_C) + + def test_gen_dg2_fid_dummies(self): + """Test generation of the Denso Gen2+ dummy function id declarations.""" + self.core_dummy._gen_dg2_fid_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_FID_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_FID_C) + + def test_gen_dg2_iumpr_dummies(self): + """Test generation of the Denso Gen2+ dummy IUMPR declarations.""" + self.core_dummy._gen_dg2_iumpr_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_IUMPR_H_EC) + self.assertEqual(c_result, core_dummy_cnfg.DG2_IUMPR_C_EC) + + def test_gen_dg2_mode06_dummies(self): + """Test generation of the Denso Gen2+ dummy mode$06 declarations.""" + self.core_dummy._gen_dg2_mode06_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_MODE06_H_EC) + self.assertEqual(c_result, core_dummy_cnfg.DG2_MODE06_C_EC) + + def test_gen_dg2_rnk_dummies(self): + """Test generation of the Denso Gen2+ dummy ranking declarations.""" + self.core_dummy._gen_dg2_rnk_dummies() + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_RNK_H_EC) + self.assertEqual(c_result, core_dummy_cnfg.DG2_RNK_C_EC) + + def test_gen_dg2_end(self): + """Test generation of the Denso Gen2+ end of the c and h files for the dummy core + definition files. + """ + self.core_dummy._gen_dg2_end('testfile') + h_result = self.core_dummy.fh_h.getvalue() + c_result = self.core_dummy.fh_c.getvalue() + self.assertEqual(h_result, core_dummy_cnfg.DG2_END_H) + self.assertEqual(c_result, core_dummy_cnfg.DG2_END_C) + + def test_generate_dg2_core_dummy_files(self): + """Test generation of Denso dummy files.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + self.core_dummy.generate_dg2_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') + + def test_generate_dg2_core_dummy_files_empty(self): + """Test generation of Denso dummy files with empty indata.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch('builtins.open', mopen, create=True): + core_dummy = CoreDummy({}, self.unit_cfg) + core_dummy.generate_dg2_core_dummy_files('testfile') + self.assertEqual(result[0], '/* Autogenerated core id dummy file */\n\n') + self.assertEqual(result[-2], ' END OF FILE\n') diff --git a/tests/pybuild/test_create_conversion_table.py b/tests/pybuild/test_create_conversion_table.py new file mode 100644 index 0000000..6c88eb5 --- /dev/null +++ b/tests/pybuild/test_create_conversion_table.py @@ -0,0 +1,60 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +import unittest +from pybuild.create_conversion_table import get_vtab_text + + +class TestGetVtabText(unittest.TestCase): + """Unit test class for testing the get_vtab_text function.""" + + def setUp(self): + """Set up method for the test cases. Initializes a vtab dictionary + to be used in the test cases. + """ + self.vtab = { + 'name': 'VTab1', + 'disp_values': ['Value1', 'Value2', 'Value3'], + 'start_value': 10 + } + + def test_get_vtab_text(self): + """Test case for the get_vtab_text function. Checks if the function + returns the expected output when provided with a vtab dictionary + containing display values. + """ + expected_output = ( + ' /begin COMPU_VTAB\n' + ' CONV_TAB_VTab1 /* Name */\n' + ' "Conversion table" /* LongIdentifier */\n' + ' TAB_VERB /* ConversionType */\n' + ' 3 /* NumberValuePairs */\n' + ' 10 /* InVal */\n' + ' "Value1" /* OutVal */\n' + ' 11 /* InVal */\n' + ' "Value2" /* OutVal */\n' + ' 12 /* InVal */\n' + ' "Value3" /* OutVal */\n' + ' /end COMPU_VTAB\n\n' + ) + + result = get_vtab_text(self.vtab) + self.assertEqual(result, expected_output) + + def test_get_vtab_text_empty_disp_values(self): + """Test case for the get_vtab_text function. Checks if the function + returns the expected output when provided with a vtab dictionary + with an empty list of display values. + """ + self.vtab['disp_values'] = [] + expected_output = ( + ' /begin COMPU_VTAB\n' + ' CONV_TAB_VTab1 /* Name */\n' + ' "Conversion table" /* LongIdentifier */\n' + ' TAB_VERB /* ConversionType */\n' + ' 0 /* NumberValuePairs */\n' + ' /end COMPU_VTAB\n\n' + ) + + result = get_vtab_text(self.vtab) + self.assertEqual(result, expected_output) diff --git a/tests/pybuild/test_dids.py b/tests/pybuild/test_dids.py new file mode 100644 index 0000000..ab02242 --- /dev/null +++ b/tests/pybuild/test_dids.py @@ -0,0 +1,968 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for Dids.""" +from copy import deepcopy +import unittest +from unittest.mock import MagicMock +from unittest.mock import patch +from unittest.mock import mock_open +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.dids import DIDs, HIDIDs + + +class TestDIDsTL(unittest.TestCase): + """Test case for testing the DIDs class.""" + + unit_cfg_res = { + 'VcFnc1': { + 'dids': { + "rVcNoxSensMgr_Z_UsCorO2P": { + "name": "rVcNoxSensMgr_Z_UsCorO2P", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "Float32", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0.45", + "max": "0.61", + "class": "CVC_DISP" + }, + "dummy_f32did": { + "name": "dummy_f32did", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "Float32", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0.45", + "max": "0.61", + "class": "CVC_DISP" + } + } + }, + 'VcFnc2': { + 'dids': { + "did2": { + "name": "did2", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "UInt32", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "32000", + "class": "CVC_DISP" + }, + "dummy_uintdid": { + "name": "dummy_uintdid", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "Int8", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "32000", + "class": "CVC_DISP" + } + } + } + } + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(config_set=BuildProjConfig) + prj_cnf_dir = str(Path(Path(__file__).parent, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_did_cfg_file_name = MagicMock(return_value='DIDIds_FullRange') + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + + self._unit_cfg = MagicMock() + type(self._unit_cfg).code_generators = {'target_link'} + type(self._unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + self._unit_cfg.get_per_unit_cfg = MagicMock(return_value=self.unit_cfg_res) + + self.dids = DIDs(self.build_cfg, self._unit_cfg) + + def test_get_did_config(self): + """Test parsing of did config files.""" + result = self.dids.get_did_config() + expected_result = { + 'Float32': { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 58112, + 'rVcNoxSensMgr_Z_UsCorO2P': 58113}, + 'end_did': 58879, + 'start_did': 58112 + }, + 'UInt32': { + 'dids': {'rVcDepTre_D_CompositeDID1': 58368, + 'did2': 58369}, + 'end_did': 58623, + 'start_did': 58368 + } + } + self.assertEqual(result, expected_result) + + def test_check_dids(self): + """Test validity check.""" + pass_dids = { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 58112}, + 'end_did': 58879, + 'start_did': 58112 + } + self.assertIsNone(DIDs._check_dids(pass_dids)) + + fail_low_dids = { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 48112}, + 'end_did': 58879, + 'start_did': 58112 + } + self.assertRaisesRegex(ValueError, ' has a too low did ', DIDs._check_dids, fail_low_dids) + + fail_high_dids = { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 68112}, + 'end_did': 58879, + 'start_did': 58112 + } + self.assertRaisesRegex(ValueError, ' has a too high did ', DIDs._check_dids, fail_high_dids) + + def test_gen_did_def_files(self): + """Test generation of DID def files.""" + expected_result = [ + '#include "VcDidDefinitions.h"\n\n', + '#include "CVC_CODE_START.h"\n\n', + '/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n', + 'const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n', + '\t{0xE301, &rVcNoxSensMgr_Z_UsCorO2P} /* ' + 'VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/1_NoxSensUsMgrRecv/' + '12_NoxSensUsCorrectionFactors/UnitDelay8 ' + '*/ \n', + '};\n\n', + 'const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n', + '\t{0xE401, &did2, UInt32_} /* ' + 'VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/1_NoxSensUsMgrRecv/' + '12_NoxSensUsCorrectionFactors/UnitDelay8 ' + '*/ \n', + '};\n\n', + '/* *** DIDs not in the definition file! ****\n', + 'Did for Float32 signal "dummy_f32did" not defined\n', + 'Did for UInt32 signal "dummy_uintdid" not defined\n', + '*/\n', + '\n#include "CVC_CODE_END.h"\n', + '\n' + '/*----------------------------------------------------------------------------*\\\n' + ' END OF FILE\n' + '\\*----------------------------------------------------------------------------*/', + '#ifndef VCDIDDEFINITIONS_H\n', + '#define VCDIDDEFINITIONS_H\n\n', + '#include "tl_basetypes.h"\n', + 'enum Datatypes {UInt8_, Int8_, UInt16_, Int16_, UInt32_, Int32_, Float32_, Bool_};\n\n', + '#define DID_DATASTRUCT_LEN_FLOAT32 1\n', + '#define DID_DATASTRUCT_LEN_UINT32 1\n\n', + 'struct DID_Mapping_UInt32 {\n' + '\tUInt16 DID;\n' + '\tvoid* data;\n' + '\tenum Datatypes type;\n' + '};\n' + '\n', + 'struct DID_Mapping_Float32 {\n\tUInt16 DID;\n\tFloat32* data;\n};\n\n', + '#include "PREDECL_START.h"\n', + 'extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n', + 'extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n', + '/* Floats */\n', + 'extern Float32 rVcNoxSensMgr_Z_UsCorO2P; /* Did id: 0xE301 */\n', + '/* Integers & Bools */\n', + 'extern UInt32 did2; /* Did id: 0xE401 */\n', + '#include "PREDECL_END.h"\n', + '\n#endif /* VCDIDDEFINITIONS_H */\n' + ] + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + mopen.return_value.name = 'C:/foo/VcDidDefinitions.h' + with patch('builtins.open', mopen, create=True): + self.dids.gen_did_def_files('VcDidDefinitions') + self.assertEqual(result, expected_result) + + def test_gen_did_def_files_no_dids(self): + """Test generation of DID def files.""" + expected_result = [ + '#include "VcDidDefinitions.h"\n\n', + '#include "CVC_CODE_START.h"\n\n', + '/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n', + 'const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n', + '\t{0x0000, 0L} /* Dummy entry */ \n', + '};\n\n', + 'const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n', + '\t{0x0000, 0L, UInt32_} /* Dummy entry */ \n', + '};\n\n', + '\n#include "CVC_CODE_END.h"\n', + '\n' + '/*----------------------------------------------------------------------------*\\\n' + ' END OF FILE\n' + '\\*----------------------------------------------------------------------------*/', + '#ifndef VCDIDDEFINITIONS_H\n', + '#define VCDIDDEFINITIONS_H\n\n', + '#include "tl_basetypes.h"\n', + 'enum Datatypes {UInt8_, Int8_, UInt16_, Int16_, UInt32_, Int32_, Float32_, Bool_};\n\n', + '#define DID_DATASTRUCT_LEN_FLOAT32 0\n', + '#define DID_DATASTRUCT_LEN_UINT32 0\n\n', + 'struct DID_Mapping_UInt32 {\n' + '\tUInt16 DID;\n' + '\tvoid* data;\n' + '\tenum Datatypes type;\n' + '};\n' + '\n', + 'struct DID_Mapping_Float32 {\n\tUInt16 DID;\n\tFloat32* data;\n};\n\n', + '#include "PREDECL_START.h"\n', + 'extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n', + 'extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n', + '/* Floats */\n', + '/* Integers & Bools */\n', + '#include "PREDECL_END.h"\n', + '\n#endif /* VCDIDDEFINITIONS_H */\n' + ] + result = [] + unit_cfg = self._unit_cfg + unit_cfg.get_per_unit_cfg = MagicMock(return_value={}) + + self.dids = DIDs(self.build_cfg, unit_cfg) + mopen = mock_open() + mopen.return_value.write = result.append + mopen.return_value.name = 'C:/foo/VcDidDefinitions.h' + with patch('builtins.open', mopen, create=True): + self.dids.gen_did_def_files('VcDidDefinitions') + self.assertEqual(result, expected_result) + + +class TestDIDsEC(unittest.TestCase): + """Test case for testing the DIDs class.""" + + unit_cfg_res = { + 'VcFnc1': { + 'code_generator': 'embedded_coder', + 'dids': { + "rVcNoxSensMgr_Z_UsCorO2P": { + "name": "rVcNoxSensMgr_Z_UsCorO2P", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "real32_T", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0.45", + "max": "0.61", + "class": "CVC_DISP" + }, + "dummy_f32did": { + "name": "dummy_f32did", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "real32_T", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0.45", + "max": "0.61", + "class": "CVC_DISP" + } + } + }, + 'VcFnc2': { + 'code_generator': 'embedded_coder', + 'dids': { + "did2": { + "name": "did2", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "int_T", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "32000", + "class": "CVC_DISP" + }, + "dummy_uintdid": { + "name": "dummy_uintdid", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "uint32_T", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "32000", + "class": "CVC_DISP" + } + } + } + } + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(config_set=BuildProjConfig) + prj_cnf_dir = str(Path(Path(__file__).parent, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_did_cfg_file_name = MagicMock(return_value='DIDIds_FullRange') + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + + self._unit_cfg = MagicMock() + type(self._unit_cfg).code_generators = {'embedded_coder'} + type(self._unit_cfg).base_types_headers = '#include "rtwtypes.h"\n' + self._unit_cfg.get_per_unit_cfg = MagicMock(return_value=self.unit_cfg_res) + + self.dids = DIDs(self.build_cfg, self._unit_cfg) + + def test_get_did_config(self): + """Test parsing of did config files.""" + result = self.dids.get_did_config() + expected_result = { + 'Float32': { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 58112, + 'rVcNoxSensMgr_Z_UsCorO2P': 58113}, + 'end_did': 58879, + 'start_did': 58112 + }, + 'UInt32': { + 'dids': {'rVcDepTre_D_CompositeDID1': 58368, + 'did2': 58369}, + 'end_did': 58623, + 'start_did': 58368 + } + } + self.assertEqual(result, expected_result) + + def test_check_dids(self): + """Test validity check.""" + pass_dids = { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 58112}, + 'end_did': 58879, + 'start_did': 58112 + } + self.assertIsNone(DIDs._check_dids(pass_dids)) + + fail_low_dids = { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 48112}, + 'end_did': 58879, + 'start_did': 58112 + } + self.assertRaisesRegex(ValueError, ' has a too low did ', DIDs._check_dids, fail_low_dids) + + fail_high_dids = { + 'dids': {'rVcDepTre_Tq_WhlMotSysTqEstForDID': 68112}, + 'end_did': 58879, + 'start_did': 58112 + } + self.assertRaisesRegex(ValueError, ' has a too high did ', DIDs._check_dids, fail_high_dids) + + def test_gen_did_def_files(self): + """Test generation of DID def files.""" + expected_result = [ + '#include "VcDidDefinitions.h"\n\n', + '#include "CVC_CODE_START.h"\n\n', + '/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n', + 'const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n', + '\t{0xE301, &rVcNoxSensMgr_Z_UsCorO2P} /* ' + 'VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/1_NoxSensUsMgrRecv/' + '12_NoxSensUsCorrectionFactors/UnitDelay8 ' + '*/ \n', + '};\n\n', + 'const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n', + '\t{0xE401, &did2, int_T_} /* ' + 'VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/1_NoxSensUsMgrRecv/' + '12_NoxSensUsCorrectionFactors/UnitDelay8 ' + '*/ \n', + '};\n\n', + '/* *** DIDs not in the definition file! ****\n', + 'Did for Float32 signal "dummy_f32did" not defined\n', + 'Did for UInt32 signal "dummy_uintdid" not defined\n', + '*/\n', + '\n#include "CVC_CODE_END.h"\n', + '\n' + '/*----------------------------------------------------------------------------*\\\n' + ' END OF FILE\n' + '\\*----------------------------------------------------------------------------*/', + '#ifndef VCDIDDEFINITIONS_H\n', + '#define VCDIDDEFINITIONS_H\n\n', + '#include "rtwtypes.h"\n', + 'enum Datatypes {uint8_T_, int8_T_, uint16_T_, int16_T_, uint32_T_, int32_T_, real32_T_, boolean_T_};\n\n', + '#define DID_DATASTRUCT_LEN_FLOAT32 1\n', + '#define DID_DATASTRUCT_LEN_UINT32 1\n\n', + 'struct DID_Mapping_UInt32 {\n' + '\tuint16_T DID;\n' + '\tvoid* data;\n' + '\tenum Datatypes type;\n' + '};\n' + '\n', + 'struct DID_Mapping_Float32 {\n\tuint16_T DID;\n\treal32_T* data;\n};\n\n', + '#include "PREDECL_START.h"\n', + 'extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n', + 'extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n', + '/* Floats */\n', + 'extern real32_T rVcNoxSensMgr_Z_UsCorO2P; /* Did id: 0xE301 */\n', + '/* Integers & Bools */\n', + 'extern int_T did2; /* Did id: 0xE401 */\n', + '#include "PREDECL_END.h"\n', + '\n#endif /* VCDIDDEFINITIONS_H */\n' + ] + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + mopen.return_value.name = 'C:/foo/VcDidDefinitions.h' + with patch('builtins.open', mopen, create=True): + self.dids.gen_did_def_files('VcDidDefinitions') + self.assertEqual(result, expected_result) + + def test_gen_did_def_files_no_dids(self): + """Test generation of DID def files.""" + expected_result = [ + '#include "VcDidDefinitions.h"\n\n', + '#include "CVC_CODE_START.h"\n\n', + '/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n', + 'const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n', + '\t{0x0000, 0L} /* Dummy entry */ \n', + '};\n\n', + 'const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n', + '\t{0x0000, 0L, uint32_T_} /* Dummy entry */ \n', + '};\n\n', + '\n#include "CVC_CODE_END.h"\n', + '\n' + '/*----------------------------------------------------------------------------*\\\n' + ' END OF FILE\n' + '\\*----------------------------------------------------------------------------*/', + '#ifndef VCDIDDEFINITIONS_H\n', + '#define VCDIDDEFINITIONS_H\n\n', + '#include "rtwtypes.h"\n', + 'enum Datatypes {uint8_T_, int8_T_, uint16_T_, int16_T_, uint32_T_, int32_T_, real32_T_, boolean_T_};\n\n', + '#define DID_DATASTRUCT_LEN_FLOAT32 0\n', + '#define DID_DATASTRUCT_LEN_UINT32 0\n\n', + 'struct DID_Mapping_UInt32 {\n' + '\tuint16_T DID;\n' + '\tvoid* data;\n' + '\tenum Datatypes type;\n' + '};\n' + '\n', + 'struct DID_Mapping_Float32 {\n\tuint16_T DID;\n\treal32_T* data;\n};\n\n', + '#include "PREDECL_START.h"\n', + 'extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n', + 'extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n', + '/* Floats */\n', + '/* Integers & Bools */\n', + '#include "PREDECL_END.h"\n', + '\n#endif /* VCDIDDEFINITIONS_H */\n' + ] + result = [] + unit_cfg = self._unit_cfg + unit_cfg.get_per_unit_cfg = MagicMock(return_value={}) + + self.dids = DIDs(self.build_cfg, unit_cfg) + mopen = mock_open() + mopen.return_value.write = result.append + mopen.return_value.name = 'C:/foo/VcDidDefinitions.h' + with patch('builtins.open', mopen, create=True): + self.dids.gen_did_def_files('VcDidDefinitions') + self.assertEqual(result, expected_result) + + +class TestDIDsMixed(TestDIDsTL): + """Test case for testing the DIDs class.""" + + unit_cfg_res = { + 'VcFnc1': { + 'code_generator': 'target_link', + 'dids': { + "rVcNoxSensMgr_Z_UsCorO2P": { + "name": "rVcNoxSensMgr_Z_UsCorO2P", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "Float32", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0.45", + "max": "0.61", + "class": "CVC_DISP" + }, + "dummy_f32did": { + "name": "dummy_f32did", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "Float32", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0.45", + "max": "0.61", + "class": "CVC_DISP" + } + } + }, + 'VcFnc2': { + 'code_generator': 'embedded_coder', + 'dids': { + "did2": { + "name": "did2", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "int_T", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "32000", + "class": "CVC_DISP" + }, + "dummy_uintdid": { + "name": "dummy_uintdid", + "description": "Stored O2 pressure correction value for upstream sensor", + "handle": "VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/" + "1_NoxSensUsMgrRecv/12_NoxSensUsCorrectionFactors/UnitDelay8", + "configs": [ + "all"], + "type": "uint32_T", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "0", + "max": "32000", + "class": "CVC_DISP" + } + } + } + } + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(config_set=BuildProjConfig) + prj_cnf_dir = str(Path(Path(__file__).parent, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_did_cfg_file_name = MagicMock(return_value='DIDIds_FullRange') + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + + self._unit_cfg = MagicMock() + type(self._unit_cfg).code_generators = {'target_link', 'embedded_coder'} + type(self._unit_cfg).base_types_headers = '#include "rtwtypes.h"\n#include "tl_basetypes.h"\n' + self._unit_cfg.get_per_unit_cfg = MagicMock(return_value=self.unit_cfg_res) + + self.dids = DIDs(self.build_cfg, self._unit_cfg) + + def test_gen_did_def_files(self): + """Test generation of DID def files.""" + expected_result = [ + '#include "VcDidDefinitions.h"\n\n', + '#include "CVC_CODE_START.h"\n\n', + '/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n', + 'const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n', + '\t{0xE301, &rVcNoxSensMgr_Z_UsCorO2P} /* ' + 'VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/1_NoxSensUsMgrRecv/' + '12_NoxSensUsCorrectionFactors/UnitDelay8 ' + '*/ \n', + '};\n\n', + 'const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n', + '\t{0xE401, &did2, int_T_} /* ' + 'VcNoxSensMgr/VcNoxSensMgr/Subsystem/VcNoxSensMgr/NoxSensManager/1_NoxSensUsMgrRecv/' + '12_NoxSensUsCorrectionFactors/UnitDelay8 ' + '*/ \n', + '};\n\n', + '/* *** DIDs not in the definition file! ****\n', + 'Did for Float32 signal "dummy_f32did" not defined\n', + 'Did for UInt32 signal "dummy_uintdid" not defined\n', + '*/\n', + '\n#include "CVC_CODE_END.h"\n', + '\n' + '/*----------------------------------------------------------------------------*\\\n' + ' END OF FILE\n' + '\\*----------------------------------------------------------------------------*/', + '#ifndef VCDIDDEFINITIONS_H\n', + '#define VCDIDDEFINITIONS_H\n\n', + '#include "rtwtypes.h"\n#include "tl_basetypes.h"\n', + 'enum Datatypes {UInt8_, Int8_, UInt16_, Int16_, UInt32_, Int32_, Float32_, Bool_};\n\n', + '#define DID_DATASTRUCT_LEN_FLOAT32 1\n', + '#define DID_DATASTRUCT_LEN_UINT32 1\n\n', + 'struct DID_Mapping_UInt32 {\n' + '\tUInt16 DID;\n' + '\tvoid* data;\n' + '\tenum Datatypes type;\n' + '};\n' + '\n', + 'struct DID_Mapping_Float32 {\n\tUInt16 DID;\n\tFloat32* data;\n};\n\n', + '#include "PREDECL_START.h"\n', + 'extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n', + 'extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n', + '/* Floats */\n', + 'extern Float32 rVcNoxSensMgr_Z_UsCorO2P; /* Did id: 0xE301 */\n', + '/* Integers & Bools */\n', + 'extern int_T did2; /* Did id: 0xE401 */\n', + '#include "PREDECL_END.h"\n', + '\n#endif /* VCDIDDEFINITIONS_H */\n' + ] + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + mopen.return_value.name = 'C:/foo/VcDidDefinitions.h' + with patch('builtins.open', mopen, create=True): + self.dids.gen_did_def_files('VcDidDefinitions') + self.assertEqual(result, expected_result) + + def test_gen_did_def_files_no_dids(self): + """Test generation of DID def files.""" + expected_result = [ + '#include "VcDidDefinitions.h"\n\n', + '#include "CVC_CODE_START.h"\n\n', + '/* The table shall be sorted in ascending Did is order!\n' + ' If not the search algorithm does not work */\n', + 'const struct DID_Mapping_Float32 DID_data_struct_Float32[] = {\n', + '\t{0x0000, 0L} /* Dummy entry */ \n', + '};\n\n', + 'const struct DID_Mapping_UInt32 DID_data_struct_UInt32[] = {\n', + '\t{0x0000, 0L, UInt32_} /* Dummy entry */ \n', + '};\n\n', + '\n#include "CVC_CODE_END.h"\n', + '\n' + '/*----------------------------------------------------------------------------*\\\n' + ' END OF FILE\n' + '\\*----------------------------------------------------------------------------*/', + '#ifndef VCDIDDEFINITIONS_H\n', + '#define VCDIDDEFINITIONS_H\n\n', + '#include "rtwtypes.h"\n#include "tl_basetypes.h"\n', + 'enum Datatypes {UInt8_, Int8_, UInt16_, Int16_, UInt32_, Int32_, Float32_, Bool_};\n\n', + '#define DID_DATASTRUCT_LEN_FLOAT32 0\n', + '#define DID_DATASTRUCT_LEN_UINT32 0\n\n', + 'struct DID_Mapping_UInt32 {\n' + '\tUInt16 DID;\n' + '\tvoid* data;\n' + '\tenum Datatypes type;\n' + '};\n' + '\n', + 'struct DID_Mapping_Float32 {\n\tUInt16 DID;\n\tFloat32* data;\n};\n\n', + '#include "PREDECL_START.h"\n', + 'extern const struct DID_Mapping_UInt32 DID_data_struct_UInt32[];\n', + 'extern const struct DID_Mapping_Float32 DID_data_struct_Float32[];\n', + '/* Floats */\n', + '/* Integers & Bools */\n', + '#include "PREDECL_END.h"\n', + '\n#endif /* VCDIDDEFINITIONS_H */\n' + ] + result = [] + unit_cfg = self._unit_cfg + unit_cfg.get_per_unit_cfg = MagicMock(return_value={}) + + self.dids = DIDs(self.build_cfg, unit_cfg) + mopen = mock_open() + mopen.return_value.write = result.append + mopen.return_value.name = 'C:/foo/VcDidDefinitions.h' + with patch('builtins.open', mopen, create=True): + self.dids.gen_did_def_files('VcDidDefinitions') + self.assertEqual(result, expected_result) + + +class TestHIDIDs(unittest.TestCase): + """Test case for testing HIDIDs class.""" + + def setUp(self): + build_cfg = MagicMock() + build_cfg.get_a2l_cfg.return_value = {'name': 'DUMMY'} + + unit_cfg = MagicMock() + + self.dummy_project_dids = { + 'dummy_did_one': { + 'handle': 'VcDummy/VcDummy/Subsystem/VcDummy/VcDummy/1_VcDummy/Rel', + 'name': 'dummy_did_one', + 'configs': '((ALWAYS_ACTIVE))', + 'description': 'Dummy DID', + 'type': 'Bool', + 'unit': '', + 'offset': '', + 'lsb': '', + 'min': '-', + 'max': '-', + 'class': 'ASIL_D/CVC_DISP_ASIL_D' + }, + 'dummy_did_two': { + 'handle': 'VcDummyTwo/VcDummyTwo/Subsystem/VcDummyTwo/VcDummyTwo/1_VcDummyTwo/Rel', + 'name': 'dummy_did_two', + 'configs': '((ALWAYS_ACTIVE))', + 'description': 'Dummy DID number 2', + 'type': 'UInt8', + 'unit': '', + 'offset': '', + 'lsb': '', + 'min': '-', + 'max': '-', + 'class': 'ASIL_D/CVC_DISP_ASIL_D' + } + } + self.dummy_dids = { + 'dummy_did_one': { + 'id': 'DA00', + 'data_type': 'Dcm_NegativeResponseCodeType', + 'function_type': 'condition_check' + }, + 'dummy_did_two': { + 'id': 'DA01', + 'data_type': 'uint8', + 'function_type': 'read_data_max', + 'nr_of_bytes': 1 + } + } + self.dummy_did_dict = { + 'dummy_did_one': { + 'id': 'DA00', + 'data_type': 'Dcm_NegativeResponseCodeType', + 'function_type': 'condition_check', + 'handle': 'VcDummy/VcDummy/Subsystem/VcDummy/VcDummy/1_VcDummy/Rel', + 'name': 'dummy_did_one', + 'configs': '((ALWAYS_ACTIVE))', + 'description': 'Dummy DID', + 'type': 'Bool', + 'unit': '', + 'offset': '', + 'lsb': '', + 'min': '-', + 'max': '-', + 'class': 'ASIL_D/CVC_DISP_ASIL_D' + }, + 'dummy_did_two': { + 'id': 'DA01', + 'data_type': 'uint8', + 'function_type': 'read_data_max', + 'nr_of_bytes': 1, + 'handle': 'VcDummyTwo/VcDummyTwo/Subsystem/VcDummyTwo/VcDummyTwo/1_VcDummyTwo/Rel', + 'name': 'dummy_did_two', + 'configs': '((ALWAYS_ACTIVE))', + 'description': 'Dummy DID number 2', + 'type': 'UInt8', + 'unit': '', + 'offset': '', + 'lsb': '', + 'min': '-', + 'max': '-', + 'class': 'ASIL_D/CVC_DISP_ASIL_D' + } + } + compose_did_data_return = deepcopy(self.dummy_did_dict) + compose_did_data_return['dummy_did_one'].update({ + 'function': 'DID_DA00_Runnable_ConditionCheckRead(Dcm_NegativeResponseCodeType *ErrorCode)' + }) + compose_did_data_return['dummy_did_two'].update({ + 'function': 'DID_DA01_Runnable_MAX_ReadData(uint8 *Data)' + }) + with patch.object(HIDIDs, '_compose_did_data', return_value=compose_did_data_return): + self.hi_dids = HIDIDs(build_cfg, unit_cfg) + + def test_verify_did_config_dict_good(self): + """Test HIDIDs._verify_did_config_dict, proper DID configuration file.""" + result = self.hi_dids._verify_did_config_dict(self.dummy_dids) + self.assertDictEqual(result, self.dummy_dids) + + def test_verify_did_config_dict_bad(self): + """Test HIDIDs._verify_did_config_dict, improper DID configuration file.""" + dummy_dids = { + 'dummy_did_one': { + 'id': 'DA00', + 'data_type': 'uint8', + 'function_type': 'read_data', + 'unknown': 'dummy' + }, + 'dummy_did_two': { + 'id': 'DA01', + 'data_type': 'uint8' + }, + 'dummy_did_three': { + 'id': 'DA02', + 'data_type': 'uint8', + 'function_type': 'dummy', + } + } + expected = { + 'dummy_did_one': { + 'id': 'DA00', + 'data_type': 'uint8', + 'function_type': 'read_data' + }, + 'dummy_did_two': { + 'id': 'DA01', + 'data_type': 'uint8', + 'function_type': "" + }, + 'dummy_did_three': { + 'id': 'DA02', + 'data_type': 'uint8', + 'function_type': '', + } + } + result = self.hi_dids._verify_did_config_dict(dummy_dids) + self.assertDictEqual(result, expected) + + def test_compose_did_function(self): + """Test HIDIDs.compose_did_function.""" + expected = { + 'dummy_did_one': 'DID_DA00_Runnable_ConditionCheckRead(Dcm_NegativeResponseCodeType *ErrorCode)', + 'dummy_did_two': 'DID_DA01_Runnable_MAX_ReadData(uint8 *Data)' + } + for did, data in self.dummy_dids.items(): + result = self.hi_dids.compose_did_function(data) + self.assertEqual(result, expected[did]) + + def test_compose_did_function_with_missing_key(self): + """Test HIDIDs.compose_did_function with missing key.""" + bad_did = { + 'id': 'DA00', + 'data_type': 'uint8', + 'function_type': '' + } + result = self.hi_dids.compose_did_function(bad_did) + self.assertEqual(result, 'DID_DA00_Missing(uint8 *Data)') + + def test_verify_dids_pass(self): + """Test HIDIDs.verify_dids, all as expected.""" + result = self.hi_dids.verify_dids(self.dummy_project_dids, self.dummy_dids) + self.assertDictEqual(result, self.dummy_did_dict) + + def test_verify_dids_undefined(self): + """Test HIDIDs.verify_dids, DID without definition in project.""" + dummy_dids = { + 'dummy_did_three': { + 'id': 'DA02', + 'data_type': 'Dcm_NegativeResponseCodeType', + 'function_type': 'condition_check' + } + } + result = self.hi_dids.verify_dids(self.dummy_project_dids, dummy_dids) + self.assertDictEqual(result, {}) + + def test_verify_dids_same_id(self): + """Test HIDIDs.verify_dids, DIDs with equal IDs, which would generate the same function calls (overwrite).""" + dummy_dids = { + 'dummy_did_one': { + 'id': 'DA00', + 'data_type': 'Dcm_NegativeResponseCodeType', + 'function_type': 'condition_check' + }, + 'dummy_did_two': { + 'id': 'DA00', + 'data_type': 'Dcm_NegativeResponseCodeType', + 'function_type': 'condition_check' + } + } + expected = { + 'dummy_did_one': self.dummy_did_dict['dummy_did_one'] + } + result = self.hi_dids.verify_dids(self.dummy_project_dids, dummy_dids) + self.assertDictEqual(result, expected) + + def test_verify_dids_no_project_dids(self): + """Test HIDIDs.verify_dids, no project DIDs.""" + result = self.hi_dids.verify_dids({}, self.dummy_dids) + self.assertDictEqual(result, {}) + + def test_get_header_file_content(self): + """Test HIDIDs.get_header_file_content.""" + result = self.hi_dids.get_header_file_content() + expected = [ + '#ifndef VCDIDAPI_H\n', + '#define VCDIDAPI_H\n', + '\n', + '#include "tl_basetypes.h"\n', + '#include "Rte_DUMMY.h"\n', + '\n', + '#include "PREDECL_DISP_ASIL_D_START.h"\n', + 'extern CVC_DISP_ASIL_D Bool dummy_did_one;\n', + 'extern CVC_DISP_ASIL_D UInt8 dummy_did_two;\n', + '#include "PREDECL_DISP_ASIL_D_END.h"\n', + '\n#include "PREDECL_CODE_ASIL_D_START.h"\n', + 'void DID_DA00_Runnable_ConditionCheckRead(Dcm_NegativeResponseCodeType *ErrorCode);\n', + 'void DID_DA01_Runnable_MAX_ReadData(uint8 *Data);\n', + '#include "PREDECL_CODE_ASIL_D_END.h"\n', + '\n#endif /* VCDIDAPI_H */\n' + ] + self.assertListEqual(expected, result) + + def test_get_header_file_content_no_dids(self): + """Test HIDIDs.get_header_file_content without DIDs.""" + self.hi_dids.did_dict = {} + result = self.hi_dids.get_header_file_content() + expected = [ + '#ifndef VCDIDAPI_H\n', + '#define VCDIDAPI_H\n', + '\n', + '#include "tl_basetypes.h"\n', + '#include "Rte_DUMMY.h"\n', + '\n', + '\n#endif /* VCDIDAPI_H */\n' + ] + self.assertListEqual(expected, result) + + def test_get_source_file_content(self): + """Test HIDIDs.get_source_file_content.""" + result = self.hi_dids.get_source_file_content() + expected = [ + '#include "VcDIDAPI.h"\n', + '\n', + '#include "CVC_CODE_ASIL_D_START.h"\n', + 'void DID_DA00_Runnable_ConditionCheckRead(Dcm_NegativeResponseCodeType *ErrorCode)\n', + '{\n', + ' memcpy(ErrorCode, &dummy_did_one, sizeof(Dcm_NegativeResponseCodeType));\n', + '}\n', + 'void DID_DA01_Runnable_MAX_ReadData(uint8 *Data)\n', + '{\n', + ' memcpy(Data, &dummy_did_two, 1);\n', + '}\n', + '#include "CVC_CODE_ASIL_D_END.h"\n' + ] + self.assertListEqual(expected, result) + + def test_get_source_file_content_no_dids(self): + """Test HIDIDs.get_source_file_content without DIDs.""" + self.hi_dids.did_dict = {} + result = self.hi_dids.get_source_file_content() + expected = [ + '#include "VcDIDAPI.h"\n', + '\n' + ] + self.assertListEqual(expected, result) diff --git a/tests/pybuild/test_dummy_spm.py b/tests/pybuild/test_dummy_spm.py new file mode 100644 index 0000000..c5e7997 --- /dev/null +++ b/tests/pybuild/test_dummy_spm.py @@ -0,0 +1,162 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for DummySpm class.""" + +import unittest +import os + +from unittest.mock import patch, mock_open, MagicMock +from pybuild.dummy_spm import DummySpm +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from pybuild.unit_configs import UnitConfigs +from pybuild.user_defined_types import UserDefinedTypes + + +UNDEFINED_OUTPORTS = [ + { + "handle": "yVcAcCtrl_handle", + "name": "yVcAcCtrl_B_AirCondCluReq", + "configs": ["all"], + "description": "yVcAcCtrl_description", + "type": "Bool", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + }, + { + "handle": "sVcEac_handle", + "name": "sVcEac_n_ElacCmprReq", + "configs": [["Vc_Ac_Ctrl_B_CodeGenMecAC"], ["Vc_Ac_Ctrl_B_CodeGenX"]], + "description": "sVcEac_description", + "type": "Float32", + "unit": "rpm", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 12750, + "class": "CVC_EXT", + "width": 1 + } +] + + +class TestDummySpm(unittest.TestCase): + """Test case for testing the DummySpm class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.build_cfg.get_src_code_dst_dir = MagicMock(return_value=os.path.join('pybuild', 'test', 'output')) + self.build_cfg.get_enum_def_dir = MagicMock(return_value=None) + self.build_cfg.get_root_dir = MagicMock(return_value='.') + self.build_cfg.get_use_volatile_globals = MagicMock(return_value=False) + self.feature_config = MagicMock(spec_set=FeatureConfigs) + self.feature_config.get_preprocessor_macro = MagicMock(return_value='') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + self.user_defined_types = UserDefinedTypes(self.build_cfg, self.unit_cfg) + self.out_var = DummySpm( + UNDEFINED_OUTPORTS, + self.build_cfg, + self.feature_config, + self.unit_cfg, + self.user_defined_types, + 'VcDummy_spm' + ) + + def test_restruct_data(self): + """Check restructuring of variable dict.""" + result = self.out_var._restruct_input_data(UNDEFINED_OUTPORTS) + expected = { + 'QM': [ + { + "handle": "sVcEac_handle", + "name": "sVcEac_n_ElacCmprReq", + "configs": [["Vc_Ac_Ctrl_B_CodeGenMecAC"], ["Vc_Ac_Ctrl_B_CodeGenX"]], + "description": "sVcEac_description", + "type": "Float32", + "cvc_type": "CVC_DISP", + "unit": "rpm", + "offset": 0, + "lsb": 1, + "min": 0, + "max": 12750, + "class": "CVC_EXT", + "width": 1 + }, + { + "handle": "yVcAcCtrl_handle", + "name": "yVcAcCtrl_B_AirCondCluReq", + "configs": ["all"], + "description": "yVcAcCtrl_description", + "type": "Bool", + "cvc_type": "CVC_DISP", + "unit": "", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1 + } + ] + } + self.maxDiff = None + self.assertDictEqual(result, expected) + + def test_restruct_data_empty(self): + """Check restructuring of empty variable dict.""" + out_var = DummySpm([], self.build_cfg, None, self.unit_cfg, self.user_defined_types, 'VcDummy_spm') + result = out_var._restruct_input_data([]) + expected = {} + self.assertEqual(result, expected) + + def test_generate_code_files(self): + """Check generated h-/c-file.""" + result = [] # Will contain content from VcDummy_spm.c and VcDummy_spm.h + mopen = mock_open() + mopen.return_value.write = result.append + dst_src_dir = self.build_cfg.get_src_code_dst_dir() + with patch('builtins.open', mopen, create=True): + self.out_var.generate_code_files(dst_src_dir) + + current_directory = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(current_directory, 'reference_files', 'VcDummy_spm.h'), 'r') as h_fh: + expected = h_fh.readlines() + with open(os.path.join(current_directory, 'reference_files', 'VcDummy_spm.c'), 'r') as c_fh: + expected += c_fh.readlines() + + self.assertCountEqual(result, expected) + + def test_generate_code_files_with_enum(self): + """Check generated h-/c-file, with enums.""" + self.user_defined_types.common_header_files = ['tl_enumerations.h'] + out_var = DummySpm( + UNDEFINED_OUTPORTS, + self.build_cfg, + self.feature_config, + self.unit_cfg, + self.user_defined_types, + 'VcDummy_spm' + ) + result = [] # Will contain content from VcDummy_spm.c and VcDummy_spm.h + mopen = mock_open() + mopen.return_value.write = result.append + dst_src_dir = self.build_cfg.get_src_code_dst_dir() + with patch('builtins.open', mopen, create=True): + out_var.generate_code_files(dst_src_dir) + + current_directory = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(current_directory, 'reference_files', 'VcDummy_spm_with_enum.h'), 'r') as h_fh: + expected = h_fh.readlines() + with open(os.path.join(current_directory, 'reference_files', 'VcDummy_spm.c'), 'r') as c_fh: + expected += c_fh.readlines() + + self.assertCountEqual(result, expected) diff --git a/tests/pybuild/test_environmentcheck.py b/tests/pybuild/test_environmentcheck.py new file mode 100644 index 0000000..3bc9ddd --- /dev/null +++ b/tests/pybuild/test_environmentcheck.py @@ -0,0 +1,59 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Tests for pybuild environment check module. + +Run from project: py -3 -m pytest ./pybuild/test/test_environmentcheck.py +""" + + +import unittest +from unittest.mock import patch + +from pybuild import environmentcheck + + +class TestpybuildEnvironmentCheck(unittest.TestCase): + """Unit tests for environmentcheck module.""" + + @patch('sys.version_info', (3, 5)) + def test_check_python_string_too_low_version_major_only(self): + """Test for version 3.5, requiring a version higher than or equal to 3.6.""" + with self.assertRaises(RuntimeError): + environmentcheck.check_python_string('3.6') + + @patch('sys.version_info', (3, 5)) + def test_check_python_string_too_low_version_major_minor(self): + """Test for version 3.5, requiring exactly version 3.6.""" + with self.assertRaises(RuntimeError): + environmentcheck.check_python_string('3.6', '3.6') + + @staticmethod + @patch('sys.version_info', (3, 8)) + def test_check_python_string_higher_version_major_only(): + """Test for version 3.8, requiring a version higher than or equal to 3.6.""" + environmentcheck.check_python_string('3.6') + + @staticmethod + @patch('sys.version_info', (3, 7)) + def test_check_python_string_version_between_limits_major_only(): + """Test for version 3.7, requiring a version higher than or equal to 3.6 and lower or equal to 3.8.""" + environmentcheck.check_python_string('3.6', '3.8') + + @patch('sys.version_info', (3, 8)) + def test_check_python_string_too_high_version_major_minor_identical(self): + """Test for version 3.8, requiring exactly version 3.6.""" + with self.assertRaises(RuntimeError): + environmentcheck.check_python_string('3.6', '3.6') + + @patch('sys.version_info', (3, 8)) + def test_check_python_string_too_high_version_major_minor(self): + """Test for version 3.8, requiring a version between 3.6 to 3.7.""" + with self.assertRaises(RuntimeError): + environmentcheck.check_python_string('3.6', '3.7') + + @staticmethod + @patch('sys.version_info', (3, 6)) + def test_check_python_string_version_upper_lower_identical(): + """Test for version 3.6, requiring exactly version 3.6.""" + environmentcheck.check_python_string('3.6', '3.6') diff --git a/tests/pybuild/test_ext_dbg.py b/tests/pybuild/test_ext_dbg.py new file mode 100644 index 0000000..ed38128 --- /dev/null +++ b/tests/pybuild/test_ext_dbg.py @@ -0,0 +1,57 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for ExtDbg class.""" + +import unittest +from unittest.mock import MagicMock +from pybuild.ext_dbg import ExtDbg +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from .io_cnfg import DBG_CNFG_DICT + + +class TestExtDbg(unittest.TestCase): + """Test case for testing the ExtDbg class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + self.build_cfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.ext_dbg = ExtDbg(DBG_CNFG_DICT['VED4_GENIII'], self.build_cfg, self.unit_cfg) + + def test_restruct_data(self): + """Check restructuring of variable dict.""" + result = self.ext_dbg._restruct_data() + expected = { + 'inputs': { + '1': { + 'sVcAc_D_EngRunReqClim': { + 'IOType': 'd', + 'description': 'Engine running request (inhibit stop) from climate', + 'element_index': 5, + 'init': 0, + 'max': 3, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + } + }, + 'outputs': { + '1': { + 'sVcAc_D_AirCondCmpsrStats': { + 'IOType': 'd', + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + } + } + } + self.assertDictEqual(result, expected) diff --git a/tests/pybuild/test_ext_var.py b/tests/pybuild/test_ext_var.py new file mode 100644 index 0000000..63c9624 --- /dev/null +++ b/tests/pybuild/test_ext_var.py @@ -0,0 +1,205 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for ExtVarCsv class.""" + +import unittest +from pathlib import Path +from unittest.mock import patch, mock_open, MagicMock +from pybuild.ext_var import ExtVarCsv +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.user_defined_types import UserDefinedTypes + +from .io_cnfg import DBG_CNFG_DICT, EC_CNFG_DICT + + +class TestExtVarCsv(unittest.TestCase): + """Test case for testing the ExtVarCsv class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.build_cfg.get_enum_def_dir = MagicMock(return_value=None) + self.build_cfg.get_root_dir = MagicMock(return_value='.') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + self.user_defined_types = UserDefinedTypes(self.build_cfg, self.unit_cfg) + self.ext_var = ExtVarCsv(DBG_CNFG_DICT['VED4_GENIII'], self.build_cfg, self.unit_cfg, self.user_defined_types) + + def test_restruct_data(self): + """Check restructuring of variable dict.""" + self.ext_var._restruct_input_data() + result = self.ext_var._ext_vars + expected = { + '1': { + 'sVcAc_D_EngRunReqClim': { + 'IOType': 'd', + 'description': 'Engine running request (inhibit stop) from climate', + 'element_index': 5, + 'init': 0, + 'max': 3, + 'min': 0, + 'type': 'UInt8', + 'unit': '-' + } + } + } + self.assertDictEqual(result[0], expected) + + def test_restruct_data_empty(self): + """Check restructuring of empty variable dict.""" + ext_var = ExtVarCsv({}, self.build_cfg, self.unit_cfg, self.user_defined_types) + ext_var._restruct_input_data() + result = ext_var._ext_vars + expected = ({}, {}) + self.assertEqual(result, expected) + + def test_a2l_dict(self): + """Check generation of a2l-dict.""" + result = self.ext_var._a2l_dict() + expected = { + 'function': 'VcExtVar', + 'vars': { + 'sVcAc_D_EngRunReqClim': { + 'a2l_data': { + 'bitmask': None, + 'description': 'Engine running request (inhibit stop) from climate', + 'lsb': '2^0', + 'max': 3, + 'min': 0, + 'offset': '0', + 'unit': '-', + 'x_axis': None, + 'y_axis': None + }, + 'array': [], + 'function': ['VcEc'], + 'var': { + 'cvc_type': 'CVC_DISP', + 'type': 'UInt8', + 'var': 'sVcAc_D_EngRunReqClim' + } + } + } + } + self.assertDictEqual(result, expected) + + def test_a2l_dict_empty(self): + """Check restructuring of empty variable dict.""" + ext_var = ExtVarCsv({}, self.build_cfg, self.unit_cfg, self.user_defined_types) + result = ext_var._a2l_dict() + expected = {'vars': {}, 'function': 'VcExtVar'} + self.assertEqual(result, expected) + + def test_generate_c_file(self): + """Check generated c-file.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch.object(Path, 'open', mopen, create=True): + self.ext_var._restruct_input_data() + self.ext_var._generate_c_file(Path("outfile")) + expected = [ + '#include "outfile.h"\n', + '#include "CVC_DISP_START.h"\n\n', + '/* Variables of size 1 bytes */\n\n', + 'CVC_DISP UInt8 sVcAc_D_EngRunReqClim = 0;\n', + '\n', + '\n#include "CVC_DISP_END.h"\n'] + self.assertEqual(result, expected) + + def test_generate_h_file(self): + """Check generated h-file.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch.object(Path, 'open', mopen, create=True): + self.ext_var._restruct_input_data() + self.ext_var._generate_h_file(Path("outfile")) + expected = ( + '#ifndef OUTFILE_H\n' + '#define OUTFILE_H\n' + '#define CVC_DISP\n' + '#include "tl_basetypes.h"\n' + '\n' + '#include "PREDECL_DISP_START.h"\n' + '/* VCC Inports */\n' + '/* Variables of size 1 bytes */\n' + '\n' + 'extern CVC_DISP UInt8 sVcAc_D_EngRunReqClim;\n' + '\n' + '/* VCC Outports */\n' + '/* Variables of size 1 bytes */\n' + '\n' + 'extern CVC_DISP UInt8 sVcAc_D_AirCondCmpsrStats;\n' + '\n' + '#include "PREDECL_DISP_END.h"\n' + '#endif\n') + self.assertEqual(''.join(result).splitlines(), expected.splitlines()) + + +class TestExtVarCsvEC(unittest.TestCase): + """Test case for testing the ExtVarCsv class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_ecu_info = MagicMock(return_value=('CSP', '')) + self.build_cfg.get_enum_def_dir = MagicMock(return_value=None) + self.build_cfg.get_root_dir = MagicMock(return_value='.') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(self.unit_cfg).base_types_headers = '#include "rtwtypes.h"\n' + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value={ + 'VcScBCoord': {'code_generator': 'embedded_coder'}, + 'VcScCVehMtn': {'code_generator': 'embedded_coder'}, + 'VcScFeh': {'code_generator': 'embedded_coder'}}) + self.user_defined_types = UserDefinedTypes(self.build_cfg, self.unit_cfg) + self.ext_var = ExtVarCsv(EC_CNFG_DICT['ADAS'], self.build_cfg, self.unit_cfg, self.user_defined_types) + + def test_generate_c_file(self): + """Check generated c-file.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch.object(Path, 'open', mopen, create=True): + self.ext_var._restruct_input_data() + self.ext_var._generate_c_file(Path("outfile")) + expected = [ + '#include "outfile.h"\n', + '#include "CVC_DISP_START.h"\n\n', + '/* Variables of size 4 bytes */\n\n', + 'CVC_DISP ulong_T sVcAc_D_EngRunReqClim = 0;\n', + '\n', + '\n#include "CVC_DISP_END.h"\n'] + self.assertEqual(result, expected) + + def test_generate_h_file(self): + """Check generated h-file.""" + result = [] + mopen = mock_open() + mopen.return_value.write = result.append + with patch.object(Path, 'open', mopen, create=True): + self.ext_var._restruct_input_data() + self.ext_var._generate_h_file(Path("outfile")) + expected = ( + '#ifndef OUTFILE_H\n' + '#define OUTFILE_H\n' + '#define CVC_DISP\n' + '#include "rtwtypes.h"\n' + '\n' + '#include "PREDECL_DISP_START.h"\n' + '/* VCC Inports */\n' + '/* Variables of size 4 bytes */\n' + '\n' + 'extern CVC_DISP ulong_T sVcAc_D_EngRunReqClim;\n' + '\n' + '/* VCC Outports */\n' + '/* Variables of size 4 bytes */\n' + '\n' + 'extern CVC_DISP real32_T sVcAc_D_AirCondCmpsrStats;\n' + '\n' + '#include "PREDECL_DISP_END.h"\n' + '#endif\n') + self.assertEqual(''.join(result).splitlines(), expected.splitlines()) diff --git a/tests/pybuild/test_feature_configs.py b/tests/pybuild/test_feature_configs.py new file mode 100644 index 0000000..adb00aa --- /dev/null +++ b/tests/pybuild/test_feature_configs.py @@ -0,0 +1,156 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for FeatureConfigs.""" +import re +import unittest + +from unittest.mock import MagicMock, patch +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from .sw_cnfg import SW_DICT + +SRC_DIR = Path(__file__).parent + + +def overwrite_read_config(f_cfg, wanted_config): + """Overwrite the read config function in FeatureConfigs. + + Args: + f_cfg (FeatureConfigs): The FeatureConfigs object. + wanted_config (dict): The wanted config. + """ + f_cfg._set_config(wanted_config) + + +class TestFeatureConfigs(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = str(Path(SRC_DIR, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_did_cfg_file_name = MagicMock(return_value='DIDIds_FullRange') + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + patcher_read_config_sw = patch( + 'tests.pybuild.test_feature_configs.FeatureConfigs._parse_all_code_sw_configs', + MagicMock()) + self.mock_read_config_sw = patcher_read_config_sw.start() + self.addCleanup(patcher_read_config_sw.stop) + + @staticmethod + def check_header_file(f_cfg): + """Helper function for reading config definition c-header file + """ + header_file = Path(SRC_DIR, 'output', 'cnfg_def.h') + f_cfg.gen_unit_cfg_header_file(str(header_file)) + res_dict = {} + with header_file.open(encoding="utf-8") as f_ptr: + for define in re.finditer(r'#define\s+(\w+)\s+([\w\.]+)', f_ptr.read()): + res_dict[define.group(1)] = float(define.group(2)) + return res_dict + + def test_gen_unit_cfg_header_file_cfg1(self): + """Test that the c-header file is correctly generated for CFG1 + """ + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG1']) + res_dict = self.check_header_file(f_cfg) + self.assertEqual(res_dict, SW_DICT['CFG1']) + + def test_gen_unit_cfg_header_file_cfg2(self): + """Test that the c-header file is correctly generated for CFG2 + """ + self.build_cfg.get_prj_config = MagicMock(return_value='CFG2') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG2']) + res_dict = self.check_header_file(f_cfg) + self.assertEqual(res_dict, SW_DICT['CFG2']) + + def test_check_if_active_in_config_cfg1(self): + """Check active in cfg1 + """ + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG1']) + config_def = [['Vc_AcReg_B_CodegenPHEV == 1']] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ['Vc_AcReg_B_CodegenPHEV'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + + def test_check_if_active_in_config_cfg2(self): + """Check active in cfg1 + """ + self.build_cfg.get_prj_config = MagicMock(return_value='CFG2') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG2']) + config_def = 'Vc_AcReg_B_CodegenPHEV == 1' + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = ['Vc_AcReg_B_CodegenPHEV'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + result = f_cfg.check_if_active_in_config(['all']) + self.assertEqual(result, True) + + def test_get_if_macro_string(self): + """Test generation if macro string.""" + self.build_cfg.get_prj_config = MagicMock(return_value='CFG2') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG2']) + config_def = [['CS1', 'CS2'], ['CS3']] + result = f_cfg.get_preprocessor_macro(config_def) + expected = "#if ( CS1 && CS2 ) || ( CS3 )" + self.assertEqual(result, expected) + + config_def = [['all']] + result = f_cfg.get_preprocessor_macro(config_def) + expected = "" + self.assertEqual(result, expected) + + config_def = ['all'] + result = f_cfg.get_preprocessor_macro(config_def) + expected = "" + self.assertEqual(result, expected) + + config_def = 'all' + result = f_cfg.get_preprocessor_macro(config_def) + expected = "" + self.assertEqual(result, expected) + + config_def = ['CS1', 'CS2'] + f_cfg.clear_log() + result = f_cfg.get_preprocessor_macro(config_def) + expected = "#if ( CS1 && CS2 )" + self.assertEqual(result, expected) + + warnings_count = len(f_cfg.get_problems()['warning']) + self.assertEqual(warnings_count, 1) + + def test_check_if_active_in_config_empty(self): + """Check empty active config + """ + self.build_cfg.get_prj_config = MagicMock(return_value='CFG2') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG2']) + config_def = [] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + + def test_check_invalid_in_config_cfg1(self): + """Check active in cfg1 + """ + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + f_cfg = FeatureConfigs(self.build_cfg) + overwrite_read_config(f_cfg, SW_DICT['CFG1']) + config_def = [['Vc_AcReg_B_Invalid == 1']] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ['Vc_AcReg_B_Invalid'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) diff --git a/tests/pybuild/test_gen_allsysteminfo.py b/tests/pybuild/test_gen_allsysteminfo.py new file mode 100644 index 0000000..895910e --- /dev/null +++ b/tests/pybuild/test_gen_allsysteminfo.py @@ -0,0 +1,110 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for GenAllSystemInfo.""" +import json +from pathlib import Path +from unittest import TestCase +from unittest.mock import MagicMock +from numpy import ndarray +from pybuild.signal_interfaces import CsvSignalInterfaces +from pybuild.unit_configs import UnitConfigs +from pybuild.gen_allsysteminfo import GenAllSystemInfo + +CNFG_DIR = Path(Path(__file__).parent, 'cnfg_files') + + +class TestGenAllSystemInfo(TestCase): + """Test case for testing GenAllSystemInfo class.""" + + def setUp(self): + """Set up data structure for all tests.""" + self.mock_signal_if = MagicMock(spec_set=CsvSignalInterfaces) + self.mock_signal_if.check_config.return_value = { + "sigs": { + "ext": { + "missing": { + "VcDummySignal1": {}, + "VcDummySignal2": {} + }, + "unused": { + "VcDummySignal3": {} + }, + "inconsistent_defs": { + "VcDummySignal4": {} + } + }, + "int": { + "VcDummyUnit1": { + "missing": { + "VcDummySignal5": {} + }, + "unused": { + "VcDummySignal6": {} + }, + "multiple_defs": {}, + "inconsistent_defs": {} + }, + "VcDummyUnit2": { + "missing": {}, + "unused": { + "VcDummySignal7": {}, + "VcDummySignal8": {} + } + } + } + } + } + + self.mock_unit_cfg = MagicMock(spec_set=UnitConfigs) + + json_string = "" + with Path(CNFG_DIR, 'Mock-unit_configs-get_per_unit_cfg.json').open(encoding="utf-8") as unit_cfg_file: + json_string = unit_cfg_file.read() + + self.mock_unit_cfg.get_per_unit_cfg.return_value = json.loads(json_string) + + self.gen_allsysteminfo = GenAllSystemInfo(self.mock_signal_if, self.mock_unit_cfg) + + def test_gen_allsysteminfo_init_args(self): + """Check that constructor arguments are validated.""" + # Call with reversed arguments + self.assertRaises(TypeError, GenAllSystemInfo, self.mock_unit_cfg, self.mock_signal_if) + + def test_get_signals_without_sources(self): + """Check that signal interfaces is parsed and filtered correctly.""" + result = self.gen_allsysteminfo.get_signals_without_source() + expected = { + "VcDummySignal1": {"VarStatus": "Not Used", "SignalType": "missing"}, + "VcDummySignal2": {"VarStatus": "Not Used", "SignalType": "missing"}, + "VcDummySignal3": {"VarStatus": "Not Used", "SignalType": "unused"}, + "VcDummySignal5": {"VarStatus": "Not Used", "SignalType": "missing"}, + "VcDummySignal6": {"VarStatus": "Not Used", "SignalType": "unused"}, + "VcDummySignal7": {"VarStatus": "Not Used", "SignalType": "unused"}, + "VcDummySignal8": {"VarStatus": "Not Used", "SignalType": "unused"}, + } + + self.assertDictEqual(result, expected) + + def test_get_core_ids(self): + """Check that unit configs are parsed and filtered correctly.""" + with Path(CNFG_DIR, 'Mock-gen_allsysteminfo-_get_core_ids.json').open(encoding="utf-8") as core_id_json: + expected = json.loads(core_id_json.read()) + + result = self.gen_allsysteminfo.get_core_ids() + # Convert arrays to lists + for unit_data in result.values(): + for core_id, core_id_data in unit_data.items(): + for identifier, id_data in core_id_data.items(): + for tl_field, tl_data in id_data.items(): + if isinstance(tl_data, ndarray): + unit_data[core_id][identifier][tl_field] = list(tl_data) + self.assertDictEqual(expected, result) + + def test_get_dids(self): + """Check that unit configs are parsed and filtered correctly.""" + with Path(CNFG_DIR, 'Mock-gen_allsysteminfo-_get_dids.json').open(encoding="utf-8") as did_json: + expected = json.loads(did_json.read()) + + result = self.gen_allsysteminfo.get_dids() + self.assertDictEqual(expected, result) diff --git a/tests/pybuild/test_gen_label_split.py b/tests/pybuild/test_gen_label_split.py new file mode 100644 index 0000000..3fb96c8 --- /dev/null +++ b/tests/pybuild/test_gen_label_split.py @@ -0,0 +1,331 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for run_gen_label_split.py.""" + +from pathlib import Path +from unittest import TestCase +from unittest.mock import MagicMock, patch +from pybuild.build_proj_config import BuildProjConfig +from pybuild.gen_label_split import LabelSplit + +CNFG_DIR = Path(Path(__file__).parent, 'cnfg_files') +REF_DIR = Path(Path(__file__).parent, 'reference_files') + + +class TestGenLabelSplit(TestCase): + """Test functions defined in gen_label_split.py + + get_symbols_and_groups not tested, mostly calls other already tested functions. + generate_label_split_xml_file not tested, basically only generates a file. + """ + + def setUp(self): + build_prj_cfg = BuildProjConfig(str(Path(CNFG_DIR, 'LabelsplitCfg.json'))) + project = "GEP3_BEV" + json_file = Path(CNFG_DIR, "label_split_cfg.json") + cmt_source_folder = Path('') + self.label_split = LabelSplit(project, build_prj_cfg, json_file, cmt_source_folder) + + def test_read_json(self): + expected_symbol_group = { + 'HYBRID': 4, + 'HEP': 4, + 'VEP': 3, + 'GEP': 3, + 'VED': 2, + 'CSP': 4 + } + test_symbol_group = self.label_split.labelsplit_cfg.get("SGP_SYMBOL_GROUPS") + self.assertEqual(test_symbol_group, expected_symbol_group) + + def test_get_project_a2l_symbols(self): + test_file_path = Path(CNFG_DIR, 'test.a2l') + symbols = self.label_split.get_project_a2l_symbols(test_file_path) + expected_symbols = [ + 'cVcAesTrboM_B_EngProtnTrboPPeakUseAbsolutP', + 'cVcAesTrboM_B_IsObdExeSpm', + 'cVcAesTrboM_B_PpLkExhFiMPerm', + 'mVcAesTrboM_rt_TrboMonrTgtLim_c', + 'mVcAesTrboM_rt_TrboMonrTgtLim_r', + 'tVcAesTrboM_n_EngSpdMinLim_x', + 'tVcAesTrboM_t_TrboMonrLoBoostTiDly_x', + ] + self.assertListEqual(symbols, expected_symbols) + + def test_get_sgp_symbols(self): + test_file_path = Path(REF_DIR, 'SS1', 'test_model', 'VcTestModel_sgp.xml') + symbols = self.label_split.get_sgp_symbols(test_file_path) + expected_symbols = { + 'Calibrationlabel': [ + (2, 'Symbolgroupdiesel'), + (3, 'Symbolgrouppetrol'), + (4, 'Symbolgrouphybrid'), + (5, 'Subsystem') + ], + 'mVcTestModel_fac_BoostMaxTCmp': [ + (3, 'EC_ACS_TURBO'), + (4, 'EC_ACS_TURBO'), + (5, 'NotApplicable') + ], + 'tVcTestModel_n_PreIgnitionRpm': [ + (2, 'DD_DCL'), + (3, 'DD_DCL'), + (4, 'DD_DCL'), + (5, 'NotApplicable') + ], + 'cVcTestModel_n_PreIgnitionTrigger': [ + (2, 'DD_DCL'), + (3, 'DD_DCL'), + (4, 'DD_DCL'), + (5, 'NotApplicable') + ], + 'cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db': [ + (2, 'PVC_DEP'), + (3, 'PVC_DEP'), + (4, 'PVC_DEP') + ] + } + self.assertDictEqual(symbols, expected_symbols) + + def test_get_sgp_symbol_group(self): + no_diesel_group = [(3, 'SG_P'), (4, 'SG_H')] + no_petrol_group = [(2, 'SG_D'), (4, 'SG_H')] + no_hybrid_group = [(2, 'SG_D'), (3, 'SG_P')] + all_groups = [(2, 'SG_D'), (3, 'SG_P'), (4, 'SG_H')] + expected_group = { + 'GEP3_SPA': 'SG_P', + 'VED4_GEN3': 'SG_D', + 'VEP4_GEN2_HYBRID': 'SG_H', + 'VEP4_GEN3': 'SG_P' + } + + for project in ['GEP3_SPA', 'VED4_GEN3', 'VEP4_GEN2_HYBRID', 'VEP4_GEN3']: + self.label_split.project = project + symbol_group = self.label_split.get_sgp_symbol_group(all_groups) + self.assertEqual(symbol_group, expected_group[project]) + + self.label_split.project = 'VED4_GEN3' + no_diesel_test = self.label_split.get_sgp_symbol_group(no_diesel_group) + self.assertEqual(no_diesel_test, '') + self.label_split.project = 'GEP3_SPA' + no_petrol_test = self.label_split.get_sgp_symbol_group(no_petrol_group) + self.assertEqual(no_petrol_test, '') + self.label_split.project = 'VEP4_GEN2_HYBRID' + no_hybrid_test = self.label_split.get_sgp_symbol_group(no_hybrid_group) + self.assertEqual(no_hybrid_test, '') + + @patch('pybuild.gen_label_split.LabelSplit.get_sgp_symbol_group', autospec=True) + def test_get_interface_symbols_and_groups(self, sg_mock): + sg_mock.return_value = 'SG_P' + interface_dict = { + 'CAN-Input': { + 'sInsig_1': {'In_Data_1': 'SomeInData1'}, + 'sInsig_2': {'In_Data_2': 'SomeInData2'} + }, + 'EMS-Output': { + 'yOutsig_1': {'Out_Data_1': 'SomeOutData1'}, + 'yOutsig_2': {'Out_Data_2': 'SomeOutData2'} + } + } + in_symbol_sgp_dict = { + 'cInsig_2_sw': [(2, 'SG_D'), (3, 'SG_P'), (4, 'SG_H')], + 'cInsig_2_db': [(2, 'SG_D'), (3, 'SG_P'), (4, 'SG_H')] + } + out_symbol_sgp_dict = { + 'cOutsig_1_sw': [(2, 'SG_D'), (3, 'SG_P'), (4, 'SG_H')], + 'cOutsig_1_db': [(2, 'SG_D'), (3, 'SG_P'), (4, 'SG_H')] + } + self.label_split.project = 'VED4_GEN3' + symbols_and_groups = self.label_split.get_interface_symbols_and_groups( + interface_dict, + in_symbol_sgp_dict, + out_symbol_sgp_dict + ) + expected = [ + ('cInsig_2_db', 'SG_P'), + ('cInsig_2_sw', 'SG_P'), + ('cOutsig_1_db', 'SG_P'), + ('cOutsig_1_sw', 'SG_P') + ] + self.assertListEqual(symbols_and_groups, expected) + + @patch('pybuild.gen_label_split.LabelSplit.get_interface_symbols_and_groups', autospec=True) + @patch('pybuild.gen_label_split.LabelSplit.get_sgp_symbols', autospec=True) + def test_get_debug_symbols_and_groups(self, sgp_symbols_mock, interface_symbols_and_groups_mock): + # This function calls other (already tested functions), however, it has an important check in the end tp test. + self.label_split.signal_interface = MagicMock() + self.label_split.signal_interface.get_io_config.return_value = ({}, {}, {}) + + # Return value of "get_sgp_symbols" does not matter, it is fed to "get_interface_symbols_and_groups" + sgp_symbols_mock.return_value = {} + interface_symbols_and_groups_mock.return_value = [('cInsig_1_db', 'SG_P'), ('cInsig_1_sw', '')] + + # Since "get_interface_symbols_and_groups" is called twice, expected contains duplicates + expected = [('cInsig_1_db', 'SG_P'), ('cInsig_1_db', 'SG_P')] + + self.label_split.project = 'VED4_GEN3' + symbols_and_groups = self.label_split.get_debug_symbols_and_groups() + self.assertListEqual(symbols_and_groups, expected) + + @patch('glob.glob', autospec=True) + def test_check_unit_par_file(self, glob_mock): + # Cannot test VcDcl*Mdl due to glob overriding + test_model_path = Path(REF_DIR, 'SS1', 'test_model', 'VcTestModel_par.m') + test_model_1_path = Path(REF_DIR, 'SS1', 'test_model1', 'VcTestModel1_par.m') + + # With SgpDefault + glob_mock.return_value = [test_model_path] + has_sgp_default, default_symbol_group = self.label_split.check_unit_par_file('VcTestModel') + self.assertTrue(has_sgp_default) + self.assertEqual(default_symbol_group, 'SG_P') + + # Without SgpDefault + glob_mock.return_value = [test_model_1_path] + has_sgp_default, default_symbol_group = self.label_split.check_unit_par_file('VcTestModel1') + self.assertFalse(has_sgp_default) + self.assertEqual(default_symbol_group, '') + + # Found several + glob_mock.return_value = [test_model_path, test_model_1_path] + has_sgp_default, default_symbol_group = self.label_split.check_unit_par_file('VcTestModel') + self.assertTrue(has_sgp_default) + self.assertEqual(default_symbol_group, 'SG_P') + + # Found none + glob_mock.return_value = [] + has_sgp_default, default_symbol_group = self.label_split.check_unit_par_file('VcTestModel') + self.assertFalse(has_sgp_default) + self.assertEqual(default_symbol_group, '') + + @patch('glob.glob', autospec=True) + def test_get_unit_sgp_file(self, glob_mock): + # Cannot test VcDcl*Mdl due to glob overriding + test_sgp_path = Path(REF_DIR, 'SS1', 'test_model', 'VcTestModel_sgp.xml') + test_none_existent_sgp_path = Path('no_sgp_file_here.xml') + + # Found one + glob_mock.return_value = [test_sgp_path] + sgp_file = self.label_split.get_unit_sgp_file('VcTestModel') + self.assertTrue(sgp_file.is_file()) + + # Found several + glob_mock.return_value = [test_sgp_path, test_none_existent_sgp_path] + sgp_file = self.label_split.get_unit_sgp_file('VcTestModel') + self.assertTrue(sgp_file.is_file()) + + # Found none + glob_mock.return_value = [] + sgp_file = self.label_split.get_unit_sgp_file('VcTestModel') + self.assertFalse(sgp_file.is_file()) + + @patch('pybuild.gen_label_split.LabelSplit.get_unit_sgp_file', autospec=True) + @patch('pybuild.gen_label_split.LabelSplit.check_unit_par_file', autospec=True) + def test_get_unit_symbols_and_groups(self, unit_par_file_mock, sgp_file_mock): + sgp_file_mock.return_value = Path(REF_DIR, 'SS1', 'test_model', 'VcTestModel_sgp.xml') + unit_calibration_symbols = [ + 'mVcTestModel_fac_BoostMaxTCmp', # Not for diesel + 'tVcTestModel_n_PreIgnitionRpm', + 'cVcTestModel_n_PreIgnitionTrigger', + 'cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', + 'cVcTestModel_in_config_and_a2l', # Also in project a2l, depends on SgpDefault + 'cVcTestModel_only_in_config' + ] + project_a2l_symbols = [ + 'mVcTestModel_fac_BoostMaxTCmp', + 'tVcTestModel_n_PreIgnitionRpm', + 'cVcTestModel_n_PreIgnitionTrigger', + 'cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', + 'cVcTestModel_in_config_and_a2l', + 'cVcTestModel3_only_in_a2l' + ] + + # VED with SgpDefault + unit_par_file_mock.return_value = (True, 'SG_P') + expected = [ + ('mVcTestModel_fac_BoostMaxTCmp', ''), + ('tVcTestModel_n_PreIgnitionRpm', 'DD_DCL'), + ('cVcTestModel_n_PreIgnitionTrigger', 'DD_DCL'), + ('cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', 'PVC_DEP'), + ('cVcTestModel_in_config_and_a2l', 'SG_P') + ] + self.label_split.project = 'VED4_GEN3' + self.label_split.project_a2l_symbols = project_a2l_symbols + + unit_symbols_and_groups = self.label_split.get_unit_symbols_and_groups( + 'VcTestModel', + unit_calibration_symbols + ) + self.assertListEqual(unit_symbols_and_groups, expected) + + # VED without SgpDefault + unit_par_file_mock.return_value = (False, '') + expected = [ + ('mVcTestModel_fac_BoostMaxTCmp', ''), + ('tVcTestModel_n_PreIgnitionRpm', 'DD_DCL'), + ('cVcTestModel_n_PreIgnitionTrigger', 'DD_DCL'), + ('cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', 'PVC_DEP') + ] + unit_symbols_and_groups = self.label_split.get_unit_symbols_and_groups( + 'VcTestModel', + unit_calibration_symbols + ) + self.assertListEqual(unit_symbols_and_groups, expected) + + # GEP with SgpDefault + unit_par_file_mock.return_value = (True, 'SG_P') + expected = [ + ('mVcTestModel_fac_BoostMaxTCmp', 'EC_ACS_TURBO'), + ('tVcTestModel_n_PreIgnitionRpm', 'DD_DCL'), + ('cVcTestModel_n_PreIgnitionTrigger', 'DD_DCL'), + ('cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', 'PVC_DEP'), + ('cVcTestModel_in_config_and_a2l', 'SG_P') + ] + self.label_split.project = 'GEP3_SPA' + unit_symbols_and_groups = self.label_split.get_unit_symbols_and_groups( + 'VcTestModel', + unit_calibration_symbols + ) + self.assertListEqual(unit_symbols_and_groups, expected) + + # GEP without SgpDefault + unit_par_file_mock.return_value = (False, '') + expected = [ + ('mVcTestModel_fac_BoostMaxTCmp', 'EC_ACS_TURBO'), + ('tVcTestModel_n_PreIgnitionRpm', 'DD_DCL'), + ('cVcTestModel_n_PreIgnitionTrigger', 'DD_DCL'), + ('cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', 'PVC_DEP') + ] + unit_symbols_and_groups = self.label_split.get_unit_symbols_and_groups( + 'VcTestModel', + unit_calibration_symbols + ) + self.assertListEqual(unit_symbols_and_groups, expected) + + def test_get_calibration_constants(self): + self.label_split.unit_cfg = MagicMock() + self.label_split.unit_cfg.get_per_cfg_unit_cfg.return_value = { + 'calib_consts': { + 'mVcTestModel_fac_BoostMaxTCmp': {'VcTestModel': {'class': 'ASIL_A/CVC_CAL_ASIL_A'}}, + 'tVcTestModel_n_PreIgnitionRpm': {'VcTestModel': {'class': 'ASIL_B/CVC_CAL_ASIL_B'}}, + 'cVcTestModel_n_PreIgnitionTrigger': {'VcTestModel': {'class': 'CVC_CAL_MERGEABLE'}}, + 'cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db': {'VcTestModel': {'class': 'CVC_CAL'}}, + 'cVcTestModel_in_config_and_a2l': {'VcTestModel': {'class': 'ASIL_A/CVC_CAL_ASIL_A'}}, + 'cVcTestModel_only_in_config': {'VcTestModel': {'class': 'CVC_CAL'}}, + 'sVcTestModel_D_SomeSkippedConst': {'VcTestModel': {'class': 'CVC_CONST'}}, + 'sVcModel_D_SecurityTwo': {'VcSecurityModel': {}} + } + } + + expected_calibration_symbols = { + 'VcTestModel': [ + 'mVcTestModel_fac_BoostMaxTCmp', + 'tVcTestModel_n_PreIgnitionRpm', + 'cVcTestModel_n_PreIgnitionTrigger', + 'cVcTestModel_B_WhlMotSysLimnIndcnReLeOk_db', + 'cVcTestModel_in_config_and_a2l', + 'cVcTestModel_only_in_config' + ] + } + calibration_symbols = self.label_split.get_calibration_constants() + self.assertDictEqual(calibration_symbols, expected_calibration_symbols) diff --git a/tests/pybuild/test_handcode_replacer.py b/tests/pybuild/test_handcode_replacer.py new file mode 100644 index 0000000..47776c1 --- /dev/null +++ b/tests/pybuild/test_handcode_replacer.py @@ -0,0 +1,85 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for pybuild.handcode_replacer module.""" + +import unittest +from pybuild import handcode_replacer + + +class TestPragmaRegexStart(unittest.TestCase): + """Unit tests for pybuild.handcode_replacer regexes.""" + + def setUp(self): + self.pragma_replacer = handcode_replacer.PragmaReplacer() + + def tearDown(self): + self.assertTrue(self.pragma_replacer.cvc_started) + self.assertIsNotNone(self.pragma_replacer.cvc) + + def test_cvc(self): + """Test the line found in original_line below""" + original_line = '#pragma section CVC\n' + resulting_line = self.pragma_replacer.replace_line(original_line) + expected_line = '#include "CVC_CODE_START.h"\n' + self.assertEqual(resulting_line, expected_line) + + def test_cal(self): + """Test the line found in original_line below""" + original_line = '#pragma section CVCCAL\n' + resulting_line = self.pragma_replacer.replace_line(original_line) + expected_line = '#include "CVC_CAL_START.h"\n' + self.assertEqual(resulting_line, expected_line) + + def test_disp(self): + """Test the line found in original_line below""" + original_line = '#pragma section CVCDISP\n' + resulting_line = self.pragma_replacer.replace_line(original_line) + expected_line = '#include "CVC_DISP_START.h"\n' + self.assertEqual(resulting_line, expected_line) + + def test_nvm(self): + """Test the line found in original_line below""" + original_line = '#pragma section CVCNVM\n' + resulting_line = self.pragma_replacer.replace_line(original_line) + expected_line = '#include "CVC_NVM_START.h"\n' + self.assertEqual(resulting_line, expected_line) + + def test_nvm_persistent(self): + """Test the line found in original_line below""" + original_line = '#pragma section CVCNVM_P\n' + resulting_line = self.pragma_replacer.replace_line(original_line) + expected_line = '#include "CVC_NVM_P_START.h"\n' + self.assertEqual(resulting_line, expected_line) + + +class TestPragmaRegexStop(unittest.TestCase): + """Unit tests for setting the stop lines.""" + def setUp(self): + self.pragma_replacer = handcode_replacer.PragmaReplacer() + self.pragma_replacer.cvc_started = True + + def tearDown(self): + self.assertFalse(self.pragma_replacer.cvc_started) + self.assertIsNone(self.pragma_replacer.cvc) + + def test_cvc(self): + """Test the line found in original_line below""" + self.pragma_replacer.cvc = 'CODE' + original_line = '#pragma section\n' + resulting_line = self.pragma_replacer.replace_line(original_line) + expected_line = '#include "CVC_CODE_END.h"\n' + self.assertEqual(resulting_line, expected_line) + + +class TestCodeSwitchReplacer(unittest.TestCase): + """Unit tests for setting the stop lines.""" + def setUp(self): + self.codesw_replacer = handcode_replacer.CodeSwitchReplacer() + + def test_cvc(self): + """Test the line found in original_line below""" + original_line = '#include "SPM_Codeswitch_Setup.h"\n' + resulting_line = self.codesw_replacer.replace_line(original_line) + expected_line = '#include "VcCodeSwDefines.h"\n' + self.assertEqual(resulting_line, expected_line) diff --git a/tests/pybuild/test_memory_section.py b/tests/pybuild/test_memory_section.py new file mode 100644 index 0000000..d418238 --- /dev/null +++ b/tests/pybuild/test_memory_section.py @@ -0,0 +1,374 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for memory_section module.""" + +from pathlib import Path +from unittest import mock, TestCase +from pybuild.build_proj_config import BuildProjConfig +from pybuild.memory_section import MemorySection +from pybuild.lib import helper_functions +from .test_build import remove + +SRC_DIR = Path(__file__).parent + + +class TestMemorySection(TestCase): + """Test class for testing the memory_section module.""" + + def setUp(self): + """Set up.""" + self.src_code_dir = Path(SRC_DIR, 'mem_out') + helper_functions.create_dir(self.src_code_dir) + + cnfg_files_folder = Path(SRC_DIR, 'cnfg_files') + build_cfg = mock.MagicMock(spec_set=BuildProjConfig(Path(cnfg_files_folder, 'ProjectCfg.json'))) + build_cfg.get_a2l_cfg = mock.MagicMock(return_value={'name': 'MOCK_HI'}) + build_cfg.get_ecu_info = mock.MagicMock(return_value=('HI', 'dummy')) + build_cfg.get_swc_name = mock.MagicMock(return_value='MOCK_HI_SC') + build_cfg.get_src_code_dst_dir = mock.MagicMock(return_value=self.src_code_dir) + build_cfg.get_use_volatile_globals = mock.MagicMock(return_value=False) + self.memory_section = MemorySection(build_cfg) + + def test_generate_cvc_header_cal(self): + """Test MemorySection.generate_cvc_header() with CAL type file.""" + test_file_name = 'CVC_CAL_DUMMY.h' + expected_start = [ + '#ifndef CVC_CAL_DUMMY_H\n', + '#define CVC_CAL_DUMMY_H\n\n', + '#undef CVC_CAL\n', + '#undef CVC_CAL_ASIL_A\n', + '#undef CVC_CAL_ASIL_B\n', + '#undef CVC_CAL_ASIL_C\n', + '#undef CVC_CAL_ASIL_D\n', + '#undef CVC_CAL_MERGEABLE_ASIL_A\n', + '#undef CVC_CAL_MERGEABLE_ASIL_B\n', + '#undef CVC_CAL_MERGEABLE_ASIL_C\n', + '#undef CVC_CAL_MERGEABLE_ASIL_D\n', + '#define CVC_CAL \n', + '#define CVC_CAL_ASIL_A \n', + '#define CVC_CAL_ASIL_B \n', + '#define CVC_CAL_ASIL_C \n', + '#define CVC_CAL_ASIL_D \n', + '#define CVC_CAL_MERGEABLE_ASIL_A \n', + '#define CVC_CAL_MERGEABLE_ASIL_B \n', + '#define CVC_CAL_MERGEABLE_ASIL_C \n', + '#define CVC_CAL_MERGEABLE_ASIL_D \n', + '#pragma section ".XcpCalibrationSection"\n', + '\n#endif /* CVC_CAL_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef CVC_CAL_DUMMY_H\n', + '#define CVC_CAL_DUMMY_H\n\n', + '#undef CVC_CAL\n', + '#undef CVC_CAL_ASIL_A\n', + '#undef CVC_CAL_ASIL_B\n', + '#undef CVC_CAL_ASIL_C\n', + '#undef CVC_CAL_ASIL_D\n', + '#undef CVC_CAL_MERGEABLE_ASIL_A\n', + '#undef CVC_CAL_MERGEABLE_ASIL_B\n', + '#undef CVC_CAL_MERGEABLE_ASIL_C\n', + '#undef CVC_CAL_MERGEABLE_ASIL_D\n', + '#pragma section\n', + '\n#endif /* CVC_CAL_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_cvc_header_disp(self): + """Test MemorySection.generate_cvc_header() with DISP type file.""" + test_file_name = 'CVC_DISP_DUMMY.h' + expected_start = [ + '#ifndef CVC_DISP_DUMMY_H\n', + '#define CVC_DISP_DUMMY_H\n\n', + '#undef CVC_DISP\n', + '#undef CVC_DISP_ASIL_A\n', + '#undef CVC_DISP_ASIL_B\n', + '#undef CVC_DISP_ASIL_C\n', + '#undef CVC_DISP_ASIL_D\n', + '#define CVC_DISP \n', + '#define CVC_DISP_ASIL_A \n', + '#define CVC_DISP_ASIL_B \n', + '#define CVC_DISP_ASIL_C \n', + '#define CVC_DISP_ASIL_D \n', + '#define MOCK_HI_START_SEC_VAR_INIT_UNSPECIFIED\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_DISP_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef CVC_DISP_DUMMY_H\n', + '#define CVC_DISP_DUMMY_H\n\n', + '#undef CVC_DISP\n', + '#undef CVC_DISP_ASIL_A\n', + '#undef CVC_DISP_ASIL_B\n', + '#undef CVC_DISP_ASIL_C\n', + '#undef CVC_DISP_ASIL_D\n', + '#define MOCK_HI_STOP_SEC_VAR_INIT_UNSPECIFIED\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_DISP_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_cvc_header_cal_with_volatile_globals(self): + """Test MemorySection.generate_cvc_header() with CAL type file and volatile globals.""" + self.memory_section.use_volatile_globals = True + test_file_name = 'CVC_CAL_DUMMY.h' + expected_start = [ + '#ifndef CVC_CAL_DUMMY_H\n', + '#define CVC_CAL_DUMMY_H\n\n', + '#undef CVC_CAL\n', + '#undef CVC_CAL_ASIL_A\n', + '#undef CVC_CAL_ASIL_B\n', + '#undef CVC_CAL_ASIL_C\n', + '#undef CVC_CAL_ASIL_D\n', + '#undef CVC_CAL_MERGEABLE_ASIL_A\n', + '#undef CVC_CAL_MERGEABLE_ASIL_B\n', + '#undef CVC_CAL_MERGEABLE_ASIL_C\n', + '#undef CVC_CAL_MERGEABLE_ASIL_D\n', + '#define CVC_CAL volatile\n', + '#define CVC_CAL_ASIL_A volatile\n', + '#define CVC_CAL_ASIL_B volatile\n', + '#define CVC_CAL_ASIL_C volatile\n', + '#define CVC_CAL_ASIL_D volatile\n', + '#define CVC_CAL_MERGEABLE_ASIL_A volatile\n', + '#define CVC_CAL_MERGEABLE_ASIL_B volatile\n', + '#define CVC_CAL_MERGEABLE_ASIL_C volatile\n', + '#define CVC_CAL_MERGEABLE_ASIL_D volatile\n', + '#pragma section ".XcpCalibrationSection"\n', + '\n#endif /* CVC_CAL_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef CVC_CAL_DUMMY_H\n', + '#define CVC_CAL_DUMMY_H\n\n', + '#undef CVC_CAL\n', + '#undef CVC_CAL_ASIL_A\n', + '#undef CVC_CAL_ASIL_B\n', + '#undef CVC_CAL_ASIL_C\n', + '#undef CVC_CAL_ASIL_D\n', + '#undef CVC_CAL_MERGEABLE_ASIL_A\n', + '#undef CVC_CAL_MERGEABLE_ASIL_B\n', + '#undef CVC_CAL_MERGEABLE_ASIL_C\n', + '#undef CVC_CAL_MERGEABLE_ASIL_D\n', + '#pragma section\n', + '\n#endif /* CVC_CAL_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_cvc_header_disp_with_volatile_globals(self): + """Test MemorySection.generate_cvc_header() with DISP type file and volatile globals.""" + self.memory_section.use_volatile_globals = True + test_file_name = 'CVC_DISP_DUMMY.h' + expected_start = [ + '#ifndef CVC_DISP_DUMMY_H\n', + '#define CVC_DISP_DUMMY_H\n\n', + '#undef CVC_DISP\n', + '#undef CVC_DISP_ASIL_A\n', + '#undef CVC_DISP_ASIL_B\n', + '#undef CVC_DISP_ASIL_C\n', + '#undef CVC_DISP_ASIL_D\n', + '#define CVC_DISP volatile\n', + '#define CVC_DISP_ASIL_A volatile\n', + '#define CVC_DISP_ASIL_B volatile\n', + '#define CVC_DISP_ASIL_C volatile\n', + '#define CVC_DISP_ASIL_D volatile\n', + '#define MOCK_HI_START_SEC_VAR_INIT_UNSPECIFIED\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_DISP_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef CVC_DISP_DUMMY_H\n', + '#define CVC_DISP_DUMMY_H\n\n', + '#undef CVC_DISP\n', + '#undef CVC_DISP_ASIL_A\n', + '#undef CVC_DISP_ASIL_B\n', + '#undef CVC_DISP_ASIL_C\n', + '#undef CVC_DISP_ASIL_D\n', + '#define MOCK_HI_STOP_SEC_VAR_INIT_UNSPECIFIED\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_DISP_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_cvc_header_code(self): + """Test MemorySection.generate_cvc_header() with CODE type file.""" + test_file_name = 'CVC_CODE_DUMMY.h' + expected_start = [ + '#ifndef CVC_CODE_DUMMY_H\n', + '#define CVC_CODE_DUMMY_H\n\n', + '#define MOCK_HI_START_SEC_CODE\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_CODE_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef CVC_CODE_DUMMY_H\n', + '#define CVC_CODE_DUMMY_H\n\n', + '#define MOCK_HI_STOP_SEC_CODE\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_CODE_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_cvc_header_const(self): + """Test MemorySection.generate_cvc_header() with CONST type file.""" + test_file_name = 'CVC_CONST_DUMMY.h' + expected_start = [ + '#ifndef CVC_CONST_DUMMY_H\n', + '#define CVC_CONST_DUMMY_H\n\n', + '#define MOCK_HI_START_SEC_CONST_UNSPECIFIED\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_CONST_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef CVC_CONST_DUMMY_H\n', + '#define CVC_CONST_DUMMY_H\n\n', + '#define MOCK_HI_STOP_SEC_CONST_UNSPECIFIED\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* CVC_CONST_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_cvc_header_pre_declare(self): + """Test MemorySection.generate_cvc_header() with PREDECL type file.""" + test_file_name = 'PREDECL_DUMMY.h' + expected_start = [ + '#ifndef PREDECL_DUMMY_H\n', + '#define PREDECL_DUMMY_H\n\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* PREDECL_DUMMY_H */\n' + ] + expected_stop = [ + '#ifndef PREDECL_DUMMY_H\n', + '#define PREDECL_DUMMY_H\n\n', + '#include "MOCK_HI_MemMap.h"\n', + '\n#endif /* PREDECL_DUMMY_H */\n' + ] + result_start = self.memory_section.generate_cvc_header('START', test_file_name) + result_stop = self.memory_section.generate_cvc_header('END', test_file_name) + self.assertListEqual(expected_start, result_start) + self.assertListEqual(expected_stop, result_stop) + + def test_generate_required_header_files(self): + """Test MemorySection.generate_required_header_files()""" + expected_file_names = [ + 'CVC_CAL_START.h', + 'CVC_CAL_ASIL_A_START.h', + 'CVC_CAL_ASIL_B_START.h', + 'CVC_CAL_ASIL_C_START.h', + 'CVC_CAL_ASIL_D_START.h', + 'CVC_CAL_END.h', + 'CVC_CAL_ASIL_A_END.h', + 'CVC_CAL_ASIL_B_END.h', + 'CVC_CAL_ASIL_C_END.h', + 'CVC_CAL_ASIL_D_END.h', + 'CVC_DISP_START.h', + 'CVC_DISP_ASIL_A_START.h', + 'CVC_DISP_ASIL_B_START.h', + 'CVC_DISP_ASIL_C_START.h', + 'CVC_DISP_ASIL_D_START.h', + 'CVC_DISP_END.h', + 'CVC_DISP_ASIL_A_END.h', + 'CVC_DISP_ASIL_B_END.h', + 'CVC_DISP_ASIL_C_END.h', + 'CVC_DISP_ASIL_D_END.h', + 'CVC_CODE_START.h', + 'CVC_CODE_ASIL_A_START.h', + 'CVC_CODE_ASIL_B_START.h', + 'CVC_CODE_ASIL_C_START.h', + 'CVC_CODE_ASIL_D_START.h', + 'CVC_CODE_END.h', + 'CVC_CODE_ASIL_A_END.h', + 'CVC_CODE_ASIL_B_END.h', + 'CVC_CODE_ASIL_C_END.h', + 'CVC_CODE_ASIL_D_END.h', + 'CVC_CONST_START.h', + 'CVC_CONST_ASIL_A_START.h', + 'CVC_CONST_ASIL_B_START.h', + 'CVC_CONST_ASIL_C_START.h', + 'CVC_CONST_ASIL_D_START.h', + 'CVC_CONST_END.h', + 'CVC_CONST_ASIL_A_END.h', + 'CVC_CONST_ASIL_B_END.h', + 'CVC_CONST_ASIL_C_END.h', + 'CVC_CONST_ASIL_D_END.h', + 'CVC_NVM_START.h', + 'CVC_NVM_END.h', + 'CVC_NVM_P_START.h', + 'CVC_NVM_P_END.h', + 'PREDECL_START.h', + 'PREDECL_END.h', + 'PREDECL_CAL_START.h', + 'PREDECL_CAL_ASIL_A_START.h', + 'PREDECL_CAL_ASIL_B_START.h', + 'PREDECL_CAL_ASIL_C_START.h', + 'PREDECL_CAL_ASIL_D_START.h', + 'PREDECL_CAL_END.h', + 'PREDECL_CAL_ASIL_A_END.h', + 'PREDECL_CAL_ASIL_B_END.h', + 'PREDECL_CAL_ASIL_C_END.h', + 'PREDECL_CAL_ASIL_D_END.h', + 'PREDECL_CAL_EXT_START.h', + 'PREDECL_CAL_EXT_END.h', + 'PREDECL_CAL_MERG_START.h', + 'PREDECL_CAL_MERG_END.h', + 'PREDECL_DISP_START.h', + 'PREDECL_CONST_EXT_START.h', + 'PREDECL_CONST_EXT_END.h', + 'PREDECL_CONST_MERG_END.h', + 'PREDECL_CONST_MERG_START.h', + 'PREDECL_DISP_ASIL_A_START.h', + 'PREDECL_DISP_ASIL_B_START.h', + 'PREDECL_DISP_ASIL_C_START.h', + 'PREDECL_DISP_ASIL_D_START.h', + 'PREDECL_DISP_END.h', + 'PREDECL_DISP_ASIL_A_END.h', + 'PREDECL_DISP_ASIL_B_END.h', + 'PREDECL_DISP_ASIL_C_END.h', + 'PREDECL_DISP_ASIL_D_END.h', + 'PREDECL_CODE_START.h', + 'PREDECL_CODE_ASIL_A_START.h', + 'PREDECL_CODE_ASIL_B_START.h', + 'PREDECL_CODE_ASIL_C_START.h', + 'PREDECL_CODE_ASIL_D_START.h', + 'PREDECL_CODE_END.h', + 'PREDECL_CODE_ASIL_A_END.h', + 'PREDECL_CODE_ASIL_B_END.h', + 'PREDECL_CODE_ASIL_C_END.h', + 'PREDECL_CODE_ASIL_D_END.h', + 'PREDECL_CONST_START.h', + 'PREDECL_CONST_ASIL_A_START.h', + 'PREDECL_CONST_ASIL_B_START.h', + 'PREDECL_CONST_ASIL_C_START.h', + 'PREDECL_CONST_ASIL_D_START.h', + 'PREDECL_CONST_END.h', + 'PREDECL_CONST_ASIL_A_END.h', + 'PREDECL_CONST_ASIL_B_END.h', + 'PREDECL_CONST_ASIL_C_END.h', + 'PREDECL_CONST_ASIL_D_END.h', + 'PREDECL_NVM_START.h', + 'PREDECL_NVM_END.h', + 'PREDECL_NVM_P_START.h', + 'PREDECL_NVM_P_END.h' + ] + expected_file_paths = [Path(self.src_code_dir, f) for f in expected_file_names] + self.memory_section.generate_required_header_files() + generated_files = list(self.src_code_dir.glob('*')) + self.assertCountEqual(generated_files, expected_file_paths) + remove(*generated_files) + self.src_code_dir.rmdir() diff --git a/tests/pybuild/test_nvm_def.py b/tests/pybuild/test_nvm_def.py new file mode 100644 index 0000000..a01f4e1 --- /dev/null +++ b/tests/pybuild/test_nvm_def.py @@ -0,0 +1,855 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +# -*- coding: utf-8 -*- +""" +module for testing the reading of core id legacy config files +""" +import json +import logging +import os +import unittest +from unittest.mock import MagicMock, mock_open, patch, call +from pathlib import Path + +from pybuild.lib import helper_functions +from pybuild.nvm_def import NVMDef +from pybuild.unit_configs import UnitConfigs + +SRC_DIR = Path(__file__).parent + + +class TestNVMDef(unittest.TestCase): + """ + Test case for testing the TestNVMDef class + """ + + @classmethod + def setUpClass(cls): + """Set-up common data structures for all tests in the test case + """ + cls.create_new = False + cls.unit_cfg = MagicMock(spec_set=UnitConfigs) + type(cls.unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + cls.nvm_vars_test = { + 'sVcAcCtrl_t_CmprRunTiNVM': { + 'VcAcCtrl': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcAcCtrl/VcAcCtrl/Subsystem/VcAcCtrl/CoolingManager/' + '3_SystemInfo/36_CompressorRunTime/sVcAcCtrl_t_CmprRunTiNVM/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAcCtrl_t_CmprRunTiNVM', + 'offset': 0, + 'type': 'UInt32', + 'unit': '-', + 'width': 1}}, + 'sVcAesHw_X_VntAdpnOffs': { + 'VcAesVnt': { + 'class': 'CVC_DISP_NVM', + 'configs': ['Vc_Aes_Vnt_B_CodeGenVntGvnr ' + '== 0'], + 'description': 'Enter a nice ' + 'description of your ' + 'variable here', + 'handle': 'VcAesVnt/VcAesVnt/Subsystem/VcAesVnt/VcAesVnt/1_Vnt/11_VntGvnr/' + '111_VntGvnrExe/1111_VntGvnrFct/11112_VntAdpn/sVcAesHw_X_VntAdpnOffs/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAesHw_X_VntAdpnOffs', + 'offset': 0, + 'type': 'Float32', + 'unit': '-', + 'width': 1 + } + }, + 'sVcAesMo_Ar_ArrayTest': { + 'VcAesMoAdp': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice ' + 'description of your ' + 'variable here', + 'handle': 'VcAesMoAdp/VcAesMoAdp/Subsystem/VcAesMoAdp/VcAesMoAdp/' + '2_ThrArAdpn/sVcAesMo_Ar_NvmThrAdpn/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAesMo_Ar_NvmThrAdpn', + 'offset': 0, + 'type': 'Float32', + 'unit': '-', + 'width': [4, 2] + } + }, + 'sVcAesMo_Ar_NvmThrAdpn': { + 'VcAesMoAdp': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice ' + 'description of your ' + 'variable here', + 'handle': 'VcAesMoAdp/VcAesMoAdp/Subsystem/VcAesMoAdp/VcAesMoAdp/' + '2_ThrArAdpn/sVcAesMo_Ar_NvmThrAdpn/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAesMo_Ar_NvmThrAdpn', + 'offset': 0, + 'type': 'Float32', + 'unit': '-', + 'width': 1 + } + }, + 'sVcAesMo_rt_NvmMafLrngLd1Ne1': { + 'VcAesMfl': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice ' + 'description of ' + 'your variable ' + 'here', + 'handle': 'VcAesMfl/VcAesMfl/Subsystem/VcAesMfl/VcAesMfl/4_Nvm/41_Ld1Ne1/' + 'sVcAesMo_rt_NvmMafLrngLd1Ne1/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAesMo_rt_NvmMafLrngLd1Ne1', + 'offset': 0, + 'type': 'Bool', + 'unit': '-', + 'width': 1 + } + }, + 'sVcAcCtrl_t_Test1': { + 'VcAcCtrl': { + 'class': 'CVC_DISP_NVM_P', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcAcCtrl/VcAcCtrl/Subsystem/VcAcCtrl/CoolingManager/3_SystemInfo/' + '36_CompressorRunTime/sVcAcCtrl_t_CmprRunTiNVM/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAcCtrl_t_Test1', + 'offset': 0, + 'type': 'UInt32', + 'unit': '-', + 'width': 1 + }, + 'VcAcCtrl2': { + 'class': 'CVC_DISP_NVM_P', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcAcCtrl/VcAcCtrl/Subsystem/VcAcCtrl/CoolingManager/3_SystemInfo/' + '36_CompressorRunTime/sVcAcCtrl_t_CmprRunTiNVM/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAcCtrl_t_Test1', + 'offset': 0, + 'type': 'UInt32', + 'unit': '-', + 'width': 1 + } + } + } + + cls.nvm_configs_single = { + "fileName": "vcc_nvm_struct_single", + "baseNvmStructs": "nvm_structs_ref_single_signal.json" + } + cls.nvm_configs = { + "fileName": "vcc_nvm_struct", + "baseNvmStructs": "nvm_structs_ref_empty.json" + } + cls.nvm_configs_small = { + "fileName": "vcc_nvm_structs__small", + "baseNvmStructs": "nvm_structs_ref_small.json" + } + cls.nvm_configs_empty_small = { + "fileName": "vcc_nvm_structs_empty_small", + "baseNvmStructs": "nvm_structs_ref_empty_small.json" + } + cls.nvm_configs_signal_overwritten = { + "fileName": "vcc_nvm_structs_ref_used_positions", + "baseNvmStructs": "nvm_structs_ref_used_positions.json" + } + cls.nvm_configs_critical = { + "fileName": "vcc_nvm_structs_critical", + "baseNvmStructs": "nvm_structs_ref_critical.json" + } + cls.nvm_configs_critical_remove = { + "fileName": "vcc_nvm_struct_critical_remove", + "baseNvmStructs": "nvm_structs_ref_critical.json" + } + cls.nvm_configs_critical_duplicate = { + "fileName": "vcc_nvm_struct_critical_duplicate", + "baseNvmStructs": "nvm_structs_ref_critical_duplicate.json" + } + cls.nvm_configs_wrong_type = { + "fileName": "vcc_nvm_structs_ref_used_positions", + "baseNvmStructs": "nvm_structs_ref_wrong_type.json" + } + cls.nvm_configs_dcl = { + "fileName": "vcc_nvm_structs_ref_dcl", + "baseNvmStructs": "nvm_structs_ref_dcl.json" + } + + def setUp(self): + """Set-up common data structures for all tests in the test case + """ + helper_functions.create_dir(Path(SRC_DIR, 'output')) + helper_functions.create_dir(Path(SRC_DIR, 'cnfg_files', 'output')) + self.proj_cnfg = MagicMock() + projdir = Path(SRC_DIR, 'cnfg_files').resolve() + self.proj_cnfg.get_root_dir = MagicMock(return_value=projdir) + self.proj_cnfg.get_src_code_dst_dir = MagicMock(return_value=str(Path(SRC_DIR, 'output'))) + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs) + self.proj_cnfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.proj_cnfg.get_swc_name = MagicMock(return_value='DummySwc') + self.nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, self.nvm_vars_test) + + self.small_nvm_struct = { + "sVcDummy_t_DummyNvm": { + "class": "CVC_DISP_NVM", + "configs": [ + "all" + ], + "description": "Enter a nice description of your variable here", + "handle": "VcDummy/VcDummy/Subsystem/VcDummy/Dummy/1_Nvm/Dummy", + "lsb": 1, + "max": "nan", + "min": "nan", + "name": "sVcDummy_t_DummyNvm", + "offset": 0, + "type": "UInt32", + "unit": "-", + "width": 1, + "area": "NVM_LIST_32", + "struct_off": 0 + } + } + + def test_create_new(self): + """Test to verify that we do not overwrite the reference files.""" + self.assertFalse(self.create_new) + + def test_get_signals_in_nvm_structs(self): + """Test getting nvm definition dictionary""" + project_config = MagicMock() + projdir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'cnfg_files')) + project_config.get_root_dir = MagicMock(return_value=projdir) + project_config.get_nvm_defs = MagicMock(return_value=self.nvm_configs_small) + nvm_def = NVMDef(project_config, self.unit_cfg, self.nvm_vars_test) + nvm_structs_signals = nvm_def._get_signals_in_nvm_structs() + expected_signals_path = os.path.join(os.path.dirname(__file__), + 'cnfg_files', + 'expected_signals_in_nvm_structs.json') + if self.create_new: + with open(expected_signals_path, 'w') as expected_signals_file: + json.dump(nvm_structs_signals, expected_signals_file) + with open(expected_signals_path, 'r') as expected_signals_file: + expected_signals = json.load(expected_signals_file) + self.assertDictEqual(nvm_structs_signals, expected_signals) + + def test_gen_h_file(self): + """test for generating the h-file for NVM definitions + """ + no_nvm_a2l = False + self.nvm_def.generate_nvm_config_files(no_nvm_a2l) + h_file_name = Path(SRC_DIR, 'output', self.nvm_configs['fileName'] + '.h') + with h_file_name.open() as hfptr: + h_file = hfptr.read() + with Path(SRC_DIR, 'reference_files', 'vcc_nvm_struct_ref.h').open() as hfptr_ref: + h_ref_file = hfptr_ref.read() + self.maxDiff = None + self.assertEqual(h_ref_file, h_file) + + def test_gen_c_file(self): + """test for generating the c-file for NVM definitions + """ + no_nvm_a2l = False + self.nvm_def.generate_nvm_config_files(no_nvm_a2l) + c_file_name = Path(SRC_DIR, 'output', self.nvm_configs['fileName'] + '.c') + with c_file_name.open() as cfptr: + c_file = cfptr.read() + with Path(SRC_DIR, 'reference_files', 'vcc_nvm_struct_ref.c').open() as cfptr_ref: + c_ref_file = cfptr_ref.read() + self.assertEqual(c_ref_file, c_file) + + def test_gen_a2l_file(self): + """test for generating the a2l-file for NVM definitions + """ + no_nvm_a2l = False + self.nvm_def.generate_nvm_config_files(no_nvm_a2l) + a_file_name = Path(SRC_DIR, 'output', self.nvm_configs['fileName'] + '.a2l') + with a_file_name.open() as fptr: + a2l_file = fptr.read() + ref_file = Path(SRC_DIR, 'reference_files', 'vcc_nvm_struct_ref.a2l') + if self.create_new: + with ref_file.open(mode='w') as fptr_ref: + fptr_ref.write(a2l_file) + with ref_file.open() as fptr_ref: + a2l_ref_file = fptr_ref.read() + self.maxDiff = None + self.assertEqual(a2l_ref_file, a2l_file) + + @patch('builtins.open', new_callable=mock_open()) + def test_generate_nvm_config_a2l_patch(self, mock_open_file): + """Test nvm_def.NVMDef._generate_nvm_config_a2l with use_prefix=True.""" + expected = ( + '\n' + ' /begin MEASUREMENT\n' + ' sVcDummy_t_DummyNvm /* Name */\n' + ' "Enter a nice description of your variable here" /* LongIdentifier */\n' + ' ULONG /* Datatype */\n' + ' VcNvm_1_0_0_None /* Conversion */\n' + ' 1 /* Resolution */\n' + ' 0 /* Accuracy */\n' + ' nan /* LowerLimit */\n' + ' nan /* UpperLimit */\n'' READ_WRITE\n' + ' SYMBOL_LINK "dummyswc_nvm_list_32" 0\n' + ' /end MEASUREMENT\n' + '\n' + ' /begin COMPU_METHOD\n' + ' VcNvm_1_0_0_None /* Name */\n' + ' "" /* LongIdentifier */\n' + ' RAT_FUNC /* ConversionType */\n' + ' "%11.3" /* Format */\n' + ' "-" /* Unit */\n' + ' COEFFS 0 1 0.0 0 0 1\n' + ' /end COMPU_METHOD\n' + '\n' + ' /begin FUNCTION\n' + ' VcNvm /* Name */\n' + ' "" /* LongIdentifier */\n' + ' /begin LOC_MEASUREMENT\n' + ' sVcDummy_t_DummyNvm /* Identifier */\n' + ' /end LOC_MEASUREMENT\n' + ' /end FUNCTION\n' + '\n' + ' /begin RECORD_LAYOUT\n' + ' ULONG_COL_DIRECT /* Name */\n' + ' FNC_VALUES 1 ULONG COLUMN_DIR DIRECT\n' + ' /end RECORD_LAYOUT\n' + ) + self.nvm_def._nvm_signals = self.small_nvm_struct + self.nvm_def._generate_nvm_config_a2l(True) + mock_open_file().__enter__().write.assert_called_once_with(expected) + + @patch('builtins.open', new_callable=mock_open()) + def test_generate_nvm_config_headers_patch(self, mock_open_file): + """Test nvm_def.NVMDef._generate_nvm_config_headers with use_prefix=True.""" + expected = [ + call( + '/*\n * vcc_nvm_struct.h - struct for NVM signals\n */\n\n' + '#ifndef VCC_NVM_STRUCT_H\n' + '#define VCC_NVM_STRUCT_H\n\n' + '#include "tl_basetypes.h"\n' + ), + call('#include "CVC_NVM_START.h"\n'), + call('struct DummySwc_NVM_LIST_8 {\n'), + call(' UInt8 unused[56];\n'), + call('}; /* 0 bytes used of 56 */\n'), + call('#include "CVC_NVM_END.h"\n\n'), + call('#include "CVC_NVM_START.h"\n'), + call('struct DummySwc_NVM_LIST_16 {\n'), + call(' UInt16 unused[240];\n'), + call('}; /* 0 bytes used of 480 */\n'), + call('#include "CVC_NVM_END.h"\n\n'), + call('#include "CVC_NVM_START.h"\n'), + call('struct DummySwc_NVM_LIST_32 {\n'), + call(' UInt32 unused[975];\n'), + call('}; /* 0 bytes used of 3900 */\n'), + call('#include "CVC_NVM_END.h"\n\n'), + call('#include "CVC_NVM_P_START.h"\n'), + call('struct DummySwc_NVM_LIST_8_PER {\n'), + call(' UInt8 unused[56];\n'), + call('}; /* 0 bytes used of 56 */\n'), + call('#include "CVC_NVM_P_END.h"\n\n'), + call('#include "CVC_NVM_P_START.h"\n'), + call('struct DummySwc_NVM_LIST_16_PER {\n'), + call(' UInt16 unused[240];\n'), + call('}; /* 0 bytes used of 480 */\n'), + call('#include "CVC_NVM_P_END.h"\n\n'), + call('#include "CVC_NVM_P_START.h"\n'), + call('struct DummySwc_NVM_LIST_32_PER {\n'), + call(' UInt32 unused[190];\n'), + call('}; /* 0 bytes used of 760 */\n'), + call('#include "CVC_NVM_P_END.h"\n\n'), + call('#include "PREDECL_START.h"\n'), + call('extern struct DummySwc_NVM_LIST_8 dummyswc_nvm_list_8;\n'), + call('extern struct DummySwc_NVM_LIST_16 dummyswc_nvm_list_16;\n'), + call('extern struct DummySwc_NVM_LIST_32 dummyswc_nvm_list_32;\n'), + call('extern struct DummySwc_NVM_LIST_8_PER dummyswc_nvm_list_8_per;\n'), + call('extern struct DummySwc_NVM_LIST_16_PER dummyswc_nvm_list_16_per;\n'), + call('extern struct DummySwc_NVM_LIST_32_PER dummyswc_nvm_list_32_per;\n'), + call('#include "PREDECL_END.h"\n\n'), + call('\n'), + call('\n#endif /* VCC_NVM_STRUCT_H */\n') + ] + self.nvm_def._nvm_signals = self.small_nvm_struct + self.nvm_def._generate_nvm_config_headers(True) + mock_open_file().__enter__().write.assert_has_calls(expected) + + @patch('builtins.open', new_callable=mock_open()) + def test_generate_nvm_config_source_patch(self, mock_open_file): + """Test nvm_def.NVMDef._generate_nvm_config_source with use_prefix=True.""" + expected = [ + call('#include "vcc_nvm_struct.h"\n\n'), + call('#include "CVC_NVM_START.h"\n'), + call('struct DummySwc_NVM_LIST_8 dummyswc_nvm_list_8;\n'), + call('#include "CVC_NVM_END.h"\n\n'), + call('#include "CVC_NVM_START.h"\n'), + call('struct DummySwc_NVM_LIST_16 dummyswc_nvm_list_16;\n'), + call('#include "CVC_NVM_END.h"\n\n'), + call('#include "CVC_NVM_START.h"\n'), + call('struct DummySwc_NVM_LIST_32 dummyswc_nvm_list_32;\n'), + call('#include "CVC_NVM_END.h"\n\n'), + call('#include "CVC_NVM_P_START.h"\n'), + call('struct DummySwc_NVM_LIST_8_PER dummyswc_nvm_list_8_per;\n'), + call('#include "CVC_NVM_P_END.h"\n\n'), + call('#include "CVC_NVM_P_START.h"\n'), + call('struct DummySwc_NVM_LIST_16_PER dummyswc_nvm_list_16_per;\n'), + call('#include "CVC_NVM_P_END.h"\n\n'), + call('#include "CVC_NVM_P_START.h"\n'), + call('struct DummySwc_NVM_LIST_32_PER dummyswc_nvm_list_32_per;\n'), + call('#include "CVC_NVM_P_END.h"\n\n') + ] + self.nvm_def._nvm_signals = self.small_nvm_struct + self.nvm_def._generate_nvm_config_source(True) + mock_open_file().__enter__().write.assert_has_calls(expected) + + def test_gen_h_file_fail(self): + """test for generating the h-file for NVM definitions + """ + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_empty_small) + NVMDef.init_logger(logging.getLogger()) + self.nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, self.nvm_vars_test) + with self.assertLogs(level='WARNING') as log: + no_nvm_a2l = False + self.nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.assertEqual(['CRITICAL:root:NVM area NVM_LIST_32 overrun!'], log.output) + + def test_gen_h_file_signal_is_overwritten(self): + """test that the NVM definitions is overwritten if signal is named position_* + """ + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_signal_overwritten) + self.nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, self.nvm_vars_test) + nvm_list_32_pos = self.nvm_def._get_nvm_areas_index('NVM_LIST_32') + dummy_signal = {'name': 'dummy', 'type': 'Int32', 'x_size': 1, 'y_size': 1} + # find_empty_index should find next empty index to be 2 since that's + # the position for the first signal named Position_* + index_before_generation = self.nvm_def._find_empty_index(nvm_list_32_pos, dummy_signal) + self.assertEqual(index_before_generation, 2) + # Generate the files + no_nvm_a2l = False + self.nvm_def.generate_nvm_config_files(no_nvm_a2l) + # find_empty_index should find next empty index to be -1 which means no more empty position + index_after_generation = self.nvm_def._find_empty_index(nvm_list_32_pos, dummy_signal) + self.assertNotEqual(index_after_generation, index_before_generation) + self.assertEqual(index_after_generation, -1) + + h_file_name = Path(SRC_DIR, 'output', self.nvm_configs_signal_overwritten['fileName'] + '.h') + with h_file_name.open() as hfptr: + h_file = hfptr.read() + with Path(SRC_DIR, 'reference_files', 'vcc_nvm_structs_ref_used_positions.h').open() as hfptr_ref: + h_ref_file = hfptr_ref.read() + self.maxDiff = None + self.assertEqual(h_ref_file, h_file) + + def test_add_signal_with_nondefault_type_c(self): + """Test that we can add different types of signals to critical area - c-file + """ + self.proj_cnfg.get_ecu_info = MagicMock(return_value=('Bosch', '')) + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_critical) + nvm_vars_test = { + 'sVcTest_t_UInt32': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt32', + 'lsb': 2, + 'name': 'sVcTest_t_UInt32', + 'offset': 1, + 'type': 'UInt32', + 'unit': 's', + 'width': 1 + } + }, + 'sVcTest_t_Int16': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_Int16', + 'lsb': 1, + 'name': 'sVcTest_t_UInt16', + 'offset': 0, + 'type': 'Int16', + 'unit': '-', + 'width': 1 + } + }, + 'sVcTest_t_UInt8': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt8', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcTest_t_UInt8', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + 'width': 1 + } + }, + } + NVMDef.init_logger(logging.getLogger()) + nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + no_nvm_a2l = False + nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.maxDiff = None + + c_file_name = Path(SRC_DIR, 'output', 'vcc_nvm_structs_critical.c') + with c_file_name.open() as cfptr: + c_file = cfptr.read() + with Path(SRC_DIR, 'reference_files', 'vcc_nvm_structs_critical.c').open() as cfptr_ref: + c_ref_file = cfptr_ref.read() + self.assertEqual(c_ref_file, c_file) + + def test_add_signal_with_nondefault_type_h(self): + """Test that we can add different types of signals to critical area - h-file + """ + self.proj_cnfg.get_ecu_info = MagicMock(return_value=('Bosch', '')) + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_critical) + nvm_vars_test = { + 'sVcTest_t_UInt32': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt32', + 'lsb': 2, + 'name': 'sVcTest_t_UInt32', + 'offset': 1, + 'type': 'UInt32', + 'unit': 's', + 'width': 1 + } + }, + 'sVcTest_t_Int16': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_Int16', + 'lsb': 1, + 'name': 'sVcTest_t_UInt16', + 'offset': 0, + 'type': 'Int16', + 'unit': '-', + 'width': 1 + } + }, + 'sVcTest_t_UInt8': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt8', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcTest_t_UInt8', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + 'width': 1 + } + }, + } + NVMDef.init_logger(logging.getLogger()) + nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + no_nvm_a2l = False + nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.maxDiff = None + + h_file_name = Path(SRC_DIR, 'output', 'vcc_nvm_structs_critical.h') + with h_file_name.open() as hfptr: + h_file = hfptr.read() + with Path(SRC_DIR, 'reference_files', 'vcc_nvm_structs_critical.h').open() as hfptr_ref: + h_ref_file = hfptr_ref.read() + self.assertEqual(h_ref_file, h_file) + + def test_add_signal_with_nondefault_type_a2l_bosch(self): + """Test that we can add different types of signals to critical area - a2l-file + """ + self.proj_cnfg.get_ecu_info = MagicMock(return_value=('Bosch', '')) + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_critical) + nvm_vars_test = { + 'sVcTest_t_UInt32': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt32', + 'lsb': 2, + 'name': 'sVcTest_t_UInt32', + 'offset': 1, + 'type': 'UInt32', + 'unit': 's', + 'width': 1 + } + }, + 'sVcTest_t_Int16': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_Int16', + 'lsb': 1, + 'name': 'sVcTest_t_UInt16', + 'offset': 0, + 'type': 'Int16', + 'unit': '-', + 'width': 1 + } + }, + 'sVcTest_t_UInt8': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt8', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcTest_t_UInt8', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + 'width': 1 + } + }, + } + NVMDef.init_logger(logging.getLogger()) + nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + no_nvm_a2l = False + nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.maxDiff = None + + a_file_name = Path(SRC_DIR, 'output', 'vcc_nvm_structs_critical.a2l') + with a_file_name.open() as fptr: + a2l_file = fptr.read() + ref_file = Path(SRC_DIR, 'reference_files', 'vcc_nvm_structs_critical_bosch.a2l') + if self.create_new: + with ref_file.open(mode='w') as fptr_ref: + fptr_ref.write(a2l_file) + with ref_file.open() as fptr_ref: + a2l_ref_file = fptr_ref.read() + self.assertEqual(a2l_ref_file, a2l_file) + + def test_add_signal_with_nondefault_type_a2l_denso(self): + """Test that we can add different types of signals to critical area - a2l-file. + + Note: Denso does not have any area like this at the time of writing this test + """ + self.proj_cnfg.get_ecu_info = MagicMock(return_value=('Denso', 'G2')) + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_critical) + nvm_vars_test = { + 'sVcTest_t_UInt32': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt32', + 'lsb': 2, + 'name': 'sVcTest_t_UInt32', + 'offset': 1, + 'type': 'UInt32', + 'unit': 's', + 'width': 1 + } + }, + 'sVcTest_t_Int16': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_Int16', + 'lsb': 1, + 'name': 'sVcTest_t_UInt16', + 'offset': 0, + 'type': 'Int16', + 'unit': '-', + 'width': 1 + } + }, + 'sVcTest_t_UInt8': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt8', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcTest_t_UInt8', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + 'width': 1 + } + } + } + NVMDef.init_logger(logging.getLogger()) + nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + no_nvm_a2l = False + nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.maxDiff = None + + a_file_name = Path(SRC_DIR, 'output', 'vcc_nvm_structs_critical.a2l') + with a_file_name.open() as fptr: + a2l_file = fptr.read() + ref_file = Path(SRC_DIR, 'reference_files', 'vcc_nvm_structs_critical_denso.a2l') + if self.create_new: + with ref_file.open(mode='w') as fptr_ref: + fptr_ref.write(a2l_file) + with ref_file.open() as fptr_ref: + a2l_ref_file = fptr_ref.read() + self.assertEqual(a2l_ref_file, a2l_file) + + def test_add_signal_with_wrong_type(self): + """test that its not possible to add a signal of wrong type to a specific nwm area + """ + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_wrong_type) + self.nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, self.nvm_vars_test) + NVMDef.init_logger(logging.getLogger()) + + no_nvm_a2l = False + self.assertRaises(NVMDef.WrongTypeException, self.nvm_def.generate_nvm_config_files, no_nvm_a2l) + + def test_add_duplicate_signal_different_attributes(self): + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_single) + nvm_vars_test = { + 'sVcAcCtrl_t_CmprRunTiNVM': { + 'VcAcCtrl': { + 'class': 'CVC_DISP_NVM_P', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcAcCtrl/VcAcCtrl/Subsystem/VcAcCtrl/CoolingManager/' + '3_SystemInfo/36_CompressorRunTime/sVcAcCtrl_t_CmprRunTiNVM/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAcCtrl_t_CmprRunTiNVM', + 'offset': 0, + 'type': 'Float32', + 'unit': '-', + 'width': 1 + } + } + } + no_nvm_a2l = False + nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + NVMDef.init_logger(logging.getLogger()) + NVMDef.clear_log() + nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.assertEqual(nvm_def.get_nbr_problems()['critical'], 1) + + def test_add_duplicate_signal_different_memory_area(self): + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_single) + self.nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, self.nvm_vars_test) + nvm_vars_test = { + 'sVcAcCtrl_t_CmprRunTiNVM': { + 'VcAcCtrl': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcAcCtrl/VcAcCtrl/Subsystem/VcAcCtrl/CoolingManager/' + '3_SystemInfo/36_CompressorRunTime/sVcAcCtrl_t_CmprRunTiNVM/Unit Delay', + 'lsb': 1, + 'max': 'nan', + 'min': 'nan', + 'name': 'sVcAcCtrl_t_CmprRunTiNVM', + 'offset': 0, + 'type': 'UInt32', + 'unit': '-', + 'width': 1 + } + } + } + NVMDef.init_logger(logging.getLogger()) + NVMDef.clear_log() + nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + no_nvm_a2l = False + nvm_def.generate_nvm_config_files(no_nvm_a2l) + self.assertEqual(nvm_def.get_nbr_problems()['warning'], 2) + + def test_remove_signal_from_critical(self): + """Test that a2l- and h-files are updated when removing a signal from the critical area.""" + self.proj_cnfg.get_nvm_defs = MagicMock(return_value=self.nvm_configs_critical_remove) + nvm_vars_test = { + 'sVcTest_t_UInt32': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_UInt32', + 'lsb': 2, + 'name': 'sVcTest_t_UInt32', + 'offset': 1, + 'type': 'UInt32', + 'unit': 's', + 'width': 1 + } + }, + 'sVcTest_t_Int16': { + 'VcTest': { + 'class': 'CVC_DISP_NVM', + 'configs': ['all'], + 'description': 'Enter a nice description of your variable here', + 'handle': 'VcTest/VcTest_t_Int16', + 'lsb': 1, + 'name': 'sVcTest_t_UInt16', + 'offset': 0, + 'type': 'Int16', + 'unit': '-', + 'width': 1 + } + } + } + NVMDef.init_logger(logging.getLogger()) + NVMDef.clear_log() + self.nvm_def = NVMDef(self.proj_cnfg, self.unit_cfg, nvm_vars_test) + no_nvm_a2l = False + self.nvm_def.generate_nvm_config_files(no_nvm_a2l) + + h_file_name = Path(SRC_DIR, 'output', self.nvm_configs_critical_remove['fileName'] + '.h') + with h_file_name.open() as h_ptr: + h_file = h_ptr.read() + with Path(SRC_DIR, 'reference_files', 'vcc_nvm_struct_ref_critical_remove.h').open() as h_ref_ptr: + h_ref_file = h_ref_ptr.read() + self.maxDiff = None + self.assertEqual(h_ref_file, h_file) + + a2l_file_name = Path(SRC_DIR, 'output', self.nvm_configs_critical_remove['fileName'] + '.a2l') + with a2l_file_name.open() as a2l_ptr: + a2l_file = a2l_ptr.read() + ref_file = Path(SRC_DIR, 'reference_files', 'vcc_nvm_struct_ref_critical_remove.a2l') + if self.create_new: + with ref_file.open(mode='w') as a2l_ref_ptr: + a2l_ref_ptr.write(a2l_file) + with ref_file.open() as a2l_ref_ptr: + a2l_ref_file = a2l_ref_ptr.read() + self.assertEqual(a2l_ref_file, a2l_file) diff --git a/tests/pybuild/test_pt_matlab.py b/tests/pybuild/test_pt_matlab.py new file mode 100644 index 0000000..f4a756f --- /dev/null +++ b/tests/pybuild/test_pt_matlab.py @@ -0,0 +1,134 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Run 'pytest' from the 'pytools' sub-directory to discover and launch all tests.""" + +import unittest +from unittest.mock import patch, Mock + +from pybuild import pt_matlab + + +class TestMatlab(unittest.TestCase): + """Tests for Matlab Python library.""" + + def test_pathcmd_singledir(self): + """Test generation of path commands.""" + self.assertEqual(pt_matlab.cmd_path(r"C:\foo\bar"), r"addpath('C:\foo\bar')") + + def test_pathcmd_recursive(self): + """Test generation of path commands.""" + self.assertEqual( + pt_matlab.cmd_path(r"C:\foo\bar", True), r"addpath(genpath('C:\foo\bar'))" + ) + + def test_cmd_arg_str(self): + """Test argument conversion for strings.""" + self.assertEqual("'foobar'", pt_matlab.cmd_arg("foobar")) + + def test_cmd_arg_bool_true(self): + """Test argument conversion for boolean 'True' value.""" + self.assertEqual("true", pt_matlab.cmd_arg(True)) + + def test_cmd_arg_bool_false(self): + """Test argument conversion for boolean 'False' value.""" + self.assertEqual("false", pt_matlab.cmd_arg(False)) + + def test_cmd_arg_list(self): + """Test argument conversion for list values (only strings).""" + self.assertEqual("{'foo', 'bar'}", pt_matlab.cmd_arg(["foo", "bar"])) + + def test_is_model(self): + """Test pt_matlab.is_model.""" + self.assertTrue(pt_matlab.is_model("foo.mdl")) + self.assertTrue(pt_matlab.is_model("foo.slx")) + self.assertFalse(pt_matlab.is_model("foo.notmdl")) + + def test_extract_model_names(self): + """Test pt_matlab.extract_model_names.""" + dummy_files = [ + "Somme/Path/To/Model.mdl", + "Somme/Path/To/Model.slx", + "Somme/Path/To/Model_par.m", + "Some/Other/Path/To/ModelTwo.mdl", + ] + expected = ["Model", "ModelTwo"] + self.assertEqual(expected, pt_matlab.extract_model_names(dummy_files, ".mdl")) + + def test_cmd_callfunc(self): + """Test pt_matlab.cmd_callfunc.""" + self.assertEqual("foo()", pt_matlab.cmd_callfunc("foo")) + self.assertEqual("foo('bar')", pt_matlab.cmd_callfunc("foo", "bar")) + self.assertEqual("foo('bar', 'baz')", pt_matlab.cmd_callfunc("foo", "bar", "baz")) + + +class TestPtMatlab(unittest.TestCase): + """Test pt_matlab.""" + + FAKE_MATLAB_CALLS = ["fake_matlab_call1()", "fake_matlab_call2('fake_arg1')"] + + @patch("os.linesep", "\r\n") + def test_make_joined_cmds_windows(self): + """Try making multiline commands separated correct for Windows.""" + self.assertEqual( + "fake_matlab_call1();\r\nfake_matlab_call2('fake_arg1')", + pt_matlab.cmds_join(self.FAKE_MATLAB_CALLS), + ) + + @patch("os.linesep", "\n") + def test_make_joined_cmds_unix(self): + """Try making multiline commands separated correct for Unices.""" + self.assertEqual( + "fake_matlab_call1();\nfake_matlab_call2('fake_arg1')", + pt_matlab.cmds_join(self.FAKE_MATLAB_CALLS), + ) + + +class TestRunMScript(unittest.TestCase): + """Test running matlab script.""" + + def setUp(self): + """Set up.""" + pt_matlab.RETRY_TIME = 0 + pt_matlab.POLL_TIME = 0.001 + self.maxDiff = None + self.matlab = pt_matlab.Matlab(dry_run=True) + self.matlab.run_m_script = Mock( + side_effect=self.matlab.run_m_script + ) # wrap for call_count + + def test_no_attempts(self): + """Test number of attempts.""" + expected_exitcode = 2 + exitcode = self.matlab.run_m_script("mfile.m", wrap_cmd=True, attempts=0) + self.assertEqual(exitcode, expected_exitcode) + + def test_exitcode_returned(self): + """Test correct exitcode.""" + expected_exitcode = 0 + exitcode = self.matlab.run_m_script("mfile.m", wrap_cmd=True, attempts=1) + self.assertEqual(exitcode, expected_exitcode) + + def test_one_targetlink_error(self): + """Test number of targetlink errors.""" + self.matlab.targetlink_watcher.targetlink_error = True + expected_exitcode = 0 + expected_calls = 2 # targetlink_error is reset before the second attempt + exitcode = self.matlab.run_m_script("mfile.m", wrap_cmd=True, attempts=10) + self.assertEqual(exitcode, expected_exitcode) + self.assertEqual(self.matlab.run_m_script.call_count, expected_calls) + + def test_attempts_exceeded(self): + """Test attempts exceeded.""" + + def set_error(__value): + self.matlab.targetlink_watcher.targetlink_error = True + + self.matlab.sync_log = Mock(side_effect=set_error) + expected_exitcode = 2 + expected_calls = ( + 10 + 1 + ) # 10 attempts, 1 additional call when iteration exceeds attempts (no execution) + exitcode = self.matlab.run_m_script("mfile.m", wrap_cmd=True, attempts=10) + self.assertEqual(exitcode, expected_exitcode) + self.assertEqual(self.matlab.run_m_script.call_count, expected_calls) diff --git a/tests/pybuild/test_pt_win32.py b/tests/pybuild/test_pt_win32.py new file mode 100644 index 0000000..3ed9ee3 --- /dev/null +++ b/tests/pybuild/test_pt_win32.py @@ -0,0 +1,77 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for the pt_win32 module.""" + +import unittest +try: + import win32job + import win32api +except ImportError as import_error: + raise unittest.SkipTest("Failed to import win32api, probably wrong platform") from import_error + +from pybuild import pt_win32 + + +class TestPtWin32Process(unittest.TestCase): + """Tests for the pt_win32 module.""" + + def test_kill_on_job_close(self): + """Test that the process is killed when the job object is closed.""" + pt_process = pt_win32.PtWin32Process(kill_on_job_close=True) + limit_flags = pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'] + self.assertEqual(limit_flags, win32job.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE) + + pt_process.run(command='cmd') + self.assertEqual(pt_process.poll(), pt_win32.STILL_ACTIVE) + win32api.CloseHandle(pt_process.job_handle) + self.assertNotEqual(pt_process.poll(), pt_win32.STILL_ACTIVE) + + def test_add_limit_flags(self): + """Test adding limit flags.""" + limit_a = 8 + limit_b = 32 + limit_ab = limit_a | limit_b + pt_process = pt_win32.PtWin32Process(kill_on_job_close=False) + pt_process.add_limit_flags(limit_a) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], limit_a) + pt_process.add_limit_flags(limit_b) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], limit_ab) + + def test_remove_limit_flags(self): + """Test removing limit flags.""" + limit_a = 8 + limit_b = 32 + limit_ab = limit_a | limit_b + pt_process = pt_win32.PtWin32Process(kill_on_job_close=False) + pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'] = limit_ab + pt_process.remove_limit_flags(limit_a) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], limit_b) + pt_process.remove_limit_flags(limit_b) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], 0) + + def test_set_limit_flags(self): + """Test setting limit flags.""" + limit_a = 8 + limit_b = 32 + limit_ab = limit_a | limit_b + pt_process = pt_win32.PtWin32Process(kill_on_job_close=False) + pt_process.set_limit_flags(limit_a) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], limit_a) + pt_process.set_limit_flags(limit_b) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], limit_b) + pt_process.set_limit_flags(limit_ab) + self.assertEqual(pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'], limit_ab) + + def test_get_limit_flags(self): + """Test getting limit flags.""" + limit_a = 8 + limit_b = 32 + limit_ab = limit_a | limit_b + pt_process = pt_win32.PtWin32Process(kill_on_job_close=False) + pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'] = limit_ab + self.assertEqual(pt_process.get_limit_flags(), limit_ab) + pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'] = limit_a + self.assertEqual(pt_process.get_limit_flags(), limit_a) + pt_process.limit_info_dict['BasicLimitInformation']['LimitFlags'] = limit_b + self.assertEqual(pt_process.get_limit_flags(), limit_b) diff --git a/tests/pybuild/test_read_feat_cnfgs.py b/tests/pybuild/test_read_feat_cnfgs.py new file mode 100644 index 0000000..5473530 --- /dev/null +++ b/tests/pybuild/test_read_feat_cnfgs.py @@ -0,0 +1,133 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for FeatureConfigs.""" +import re +import unittest +from unittest.mock import MagicMock +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs +from .sw_cnfg import SW_FILE_DICT + +SRC_DIR = Path(__file__).parent + + +class TestFeatureConfigs(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = Path(SRC_DIR, 'cnfg_files') + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=str(prj_cnf_dir)) + self.build_cfg.get_did_cfg_file_name = MagicMock(return_value='DIDIds_FullRange') + self.build_cfg.get_prj_config = MagicMock(return_value='VED4_GENIII') + self.build_cfg.get_unit_src_dirs = MagicMock(return_value={'mocked': str(Path(prj_cnf_dir, 'unit_cfgs'))}) + self.build_cfg.get_local_defs_name = MagicMock(return_value='*_LocalDefs.h') + self.build_cfg.get_codeswitches_name = MagicMock(return_value='SPM_Codeswitch_Setup*.csv') + self.build_cfg.get_feature_conf_header_name = MagicMock(return_value='VcCodeSwDefines.h') + + @staticmethod + def check_header_file(f_cfg): + """Helper function for reading config definition c-header file + """ + header_file = Path(SRC_DIR, 'output', 'cnfg_def.h') + f_cfg.gen_unit_cfg_header_file(str(header_file)) + res_dict = {} + with header_file.open(encoding="utf-8") as f_ptr: + for define in re.finditer(r'#define\s+(\w+)\s+([\w\.]+)', f_ptr.read()): + res_dict[define.group(1)] = float(define.group(2)) + return res_dict + + def test_gen_unit_cfg_header_file_cfg1(self): + """Test that the c-header file is correctly generated for VED4_GENIII + """ + self.build_cfg.get_prj_config = MagicMock(return_value='VED4_GENIII') + f_cfg = FeatureConfigs(self.build_cfg) + res_dict = self.check_header_file(f_cfg) + self.assertEqual(res_dict, SW_FILE_DICT['VED4_GENIII']) + + def test_gen_unit_cfg_header_file_cfg2(self): + """Test that the c-header file is correctly generated for VEP4_GENIII + """ + self.build_cfg.get_prj_config = MagicMock(return_value='VEP4_GENIII') + f_cfg = FeatureConfigs(self.build_cfg) + res_dict = self.check_header_file(f_cfg) + self.maxDiff = None + self.assertDictEqual(res_dict, SW_FILE_DICT['VEP4_GENIII']) + + def test_check_if_active_in_config_cfg1(self): + """Check active in VED4_GENIII + """ + self.build_cfg.get_prj_config = MagicMock(return_value='VED4_GENIII') + f_cfg = FeatureConfigs(self.build_cfg) + config_def = [['Vc_Aes_B_CodeGenGsl == 1']] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ['Vc_Aes_B_CodeGenGsl'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ['Vc_Pvc_Hw_B_Petrol'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ['Vc_Pvc_Hw_B_Diesel'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = ['VcDeDa_111_EcoIndcn_1'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = ['VcDeDa_112_PwrIndcn_2'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + + def test_check_if_active_in_config_cfg2(self): + """Check active in VEP4_GENIII + """ + self.build_cfg.get_prj_config = MagicMock(return_value='VEP4_GENIII') + f_cfg = FeatureConfigs(self.build_cfg) + config_def = 'Vc_Aes_B_CodeGenGsl == 1' + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = ['Vc_Aes_B_CodeGenGsl'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + result = f_cfg.check_if_active_in_config(['all']) + self.assertEqual(result, True) + config_def = ['Vc_Pvc_Hw_B_Petrol'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = ['Vc_Pvc_Hw_B_Diesel'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ('(((Vc_Pvc_Hw_B_Erad==0)&&(Vc_Pvc_Hw_B_Efad==0)&&((Vc_Pvc_Hw_B_VeaGen1==1)||' + '(Vc_Pvc_Hw_B_VeaGen2==1)||(Vc_Pvc_Hw_B_VeaGen3==1)||(Vc_Pvc_Hw_B_Gep3Gen1==1))))') + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = 'VcDeDa_111_EcoIndcn_1' + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + config_def = ['VcDeDa_112_PwrIndcn_2'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + + def test_check_if_active_in_config_empty(self): + """Check empty active config + """ + self.build_cfg.get_prj_config = MagicMock(return_value='VEP4_GENIII') + f_cfg = FeatureConfigs(self.build_cfg) + config_def = [] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, True) + + def test_check_invalid_in_config_cfg1(self): + """Check active in VED4_GENIII + """ + self.build_cfg.get_prj_config = MagicMock(return_value='VED4_GENIII') + f_cfg = FeatureConfigs(self.build_cfg) + config_def = [['Vc_AcReg_B_Invalid == 1']] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) + config_def = ['Vc_AcReg_B_Invalid'] + result = f_cfg.check_if_active_in_config(config_def) + self.assertEqual(result, False) diff --git a/tests/pybuild/test_read_sig_ifs.py b/tests/pybuild/test_read_sig_ifs.py new file mode 100644 index 0000000..a37e0c8 --- /dev/null +++ b/tests/pybuild/test_read_sig_ifs.py @@ -0,0 +1,180 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for CsvSignalInterfaces. Read data from file.""" + +import copy +import unittest +from pathlib import Path +from unittest.mock import MagicMock, patch, mock_open, call + +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.signal_interfaces import CsvSignalInterfaces + + +class RawIOCfg: + """Hold a default consistent configuration matching the interface requirements file bundled with the tests. + + Instances can be modified to inject inconsistencies. + """ + + _tot_cfg = { + 'CAN-Input': { + 'sVcAc_D_EngRunReqClim': { + 'description': + 'Engine running ' + 'request (inhibit ' + 'stop) from climate', + 'element_index': 5, + 'init': + 0, + 'max': + 3, + 'min': + 0, + 'IOType': 'd', + 'type': + 'UInt8', + 'unit': + '-' + }, + 'sVcAcc_a_Max': { + 'description': + 'Max acceleration request from ' + 'ACC', + 'element_index': 6, + 'init': + 0, + 'max': + 5, + 'min': + -5, + 'IOType': 's', + 'type': + 'Float32', + 'unit': + 'm/s2' + } + }, + 'CAN-Output': { + 'sVcAc_D_AirCondCmpsrStats': { + 'description': 'Aircond compressor status', + 'element_index': 5, + 'init': 0, + 'max': 7, + 'min': 0, + 'IOType': 'd', + 'type': 'UInt8', + 'unit': '-' + } + }, + 'EMS-Input': {}, + 'EMS-Output': {}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': { + 'sVcTc_p_LockUp': { + 'description': 'AW Pressure request to LU', + 'element_index': 5, + 'init': 0, + 'max': 16383, + 'min': 0, + 'IOType': 'x', + 'type': 'Float32', + 'unit': 'gf/cm2' + } + }, + 'Private CAN-Output': {} + } + + def __init__(self): + self.restore() + + def restore(self): + """Restore something the tot_cfg.""" + self.tot_cfg = copy.deepcopy(self._tot_cfg) + + def get_raw_io_cnfg(self): + """Generate consistent data of total unit configuration.""" + return self.tot_cfg + + +class BaseSetUp(unittest.TestCase): + """Inerhitence from this class for all testcases. + + Start the calling this setUpClass method from the setUpClass method in the + test case, and then modify the base setup in the test case (if needed). + """ + + CNFG_DIR = Path(Path(__file__).parent, 'cnfg_files') + ACTIVE_INTERFACE_DIRECTORY = str(Path(CNFG_DIR, 'ActiveInterfaces')) + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + super().setUp() + self.raw_io_cfg = RawIOCfg() + self.ucfg = MagicMock(spec_set=UnitConfigs) + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_prj_config = MagicMock( + return_value='VED4_GENIII') + self.build_cfg.get_prj_cfg_dir = MagicMock( + return_value=str(self.CNFG_DIR)) + self.build_cfg.get_if_cfg_dir = MagicMock( + return_value=self.ACTIVE_INTERFACE_DIRECTORY) + self.maxDiff = None + + +class TestSignalIterfacesRead(BaseSetUp): + """Test the CsvSignalInterfaces class.""" + + def setUp(self): + """Read interface definition file.""" + super().setUp() + self.csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + + def test_get_raw_io_cnfg(self): + """Check raw config read from file.""" + result = self.csi.get_raw_io_cnfg() + expected_res = self.raw_io_cfg.get_raw_io_cnfg() + self.assertDictEqual(result, expected_res) + + @patch('pybuild.signal_interfaces.open', new_callable=mock_open()) + def test_verify_files_read(self, m): + """Verify that files are opened and read.""" + private_can_input_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'Private CAN-Input.csv'), + newline='') + private_can_output_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'Private CAN-Output.csv'), + newline='') + can_input_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'CAN-Input.csv'), + newline='') + can_output_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'CAN-Output.csv'), + newline='') + ems_input_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'EMS-Input.csv'), + newline='') + ems_output_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'EMS-Output.csv'), + newline='') + lin_input_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'LIN-Input.csv'), + newline='') + lin_output_call = call(Path(BaseSetUp.ACTIVE_INTERFACE_DIRECTORY, + 'LIN-Output.csv'), + newline='') + calls = [ + private_can_input_call, + private_can_output_call, + can_input_call, + can_output_call, + ems_input_call, + ems_output_call, + lin_input_call, + lin_output_call + ] + CsvSignalInterfaces(self.build_cfg, self.ucfg) + m.assert_has_calls(calls, any_order=True) diff --git a/tests/pybuild/test_sched_funcs.py b/tests/pybuild/test_sched_funcs.py new file mode 100644 index 0000000..d685b4c --- /dev/null +++ b/tests/pybuild/test_sched_funcs.py @@ -0,0 +1,69 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for SchedFuncs class.""" + +import unittest +from unittest.mock import MagicMock +from os.path import exists +from os import remove +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.sched_funcs import SchedFuncs +from pybuild.unit_configs import UnitConfigs + +SRC_DIR = Path(__file__).parent + + +class TestSchedFuncs(unittest.TestCase): + """Test case for testing the FeatureConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + prj_cnf_dir = Path(SRC_DIR, 'cnfg_files') + prj_out_dir = Path(SRC_DIR, 'output') + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=str(prj_cnf_dir)) + self.build_cfg.get_src_code_dst_dir = MagicMock(return_value=str(prj_out_dir)) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.build_cfg.get_scheduler_prefix = MagicMock(return_value='PROJ_') + + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + + self.init_file = str(Path(prj_out_dir, 'VcExtINI.c')) + if exists(self.init_file): + remove(self.init_file) + + self.ts_file = str(Path(prj_out_dir, 'ts_test.h')) + if exists(self.ts_file): + remove(self.ts_file) + + self.sched_funcs = SchedFuncs(self.build_cfg, self.unit_cfg) + + def test_init_failure(self): + """Check class init.""" + self.assertRaisesRegex( + TypeError, + 'Input arguments should be an instance of:' + f'BuildProjConfig, not {type(None)}' + f'AND/OR UnitConfigs, not {type(None)}', + SchedFuncs, None, None + ) + + def test_generate_sched_c_fncs(self): + """Check generated scheduling raster functions.""" + self.sched_funcs.generate_sched_c_fncs(False) + with open(self.init_file, encoding="utf-8") as fhandle: + result = fhandle.read() + with Path(SRC_DIR, 'reference_files', 'VcExtINI.c').open(encoding="utf-8") as fhandle: + expected = fhandle.read() + self.assertEqual(result, expected) + + def test_generate_ts_defines(self): + """Check the ts defines generated for all units.""" + self.sched_funcs.generate_ts_defines(self.ts_file) + with open(self.ts_file, encoding="utf-8") as fhandle: + result = fhandle.read() + with Path(SRC_DIR, 'reference_files', 'ts_test.h').open(encoding="utf-8") as fhandle: + expected = fhandle.read() + self.assertEqual(result, expected) diff --git a/tests/pybuild/test_sig_if_html_rep.py b/tests/pybuild/test_sig_if_html_rep.py new file mode 100644 index 0000000..8f66469 --- /dev/null +++ b/tests/pybuild/test_sig_if_html_rep.py @@ -0,0 +1,469 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for SigIfHtmlReport class.""" +from copy import deepcopy +import unittest +from unittest.mock import MagicMock +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.signal_interfaces import CsvSignalInterfaces +from pybuild.signal_if_html_rep import SigIfHtmlReport + +UNIT_CFG = { + 'VcAesSupM__gen3': { + 'calib_consts': { + 'cVcAesSupM_B_SupMonrHiBypFiMPerm': { + 'class': 'CVC_CAL', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Switch to bypass FiM permission ' + 'supercharger high boost monitor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Bool', + 'unit': ''} + }, + 'core': { + 'Events': { + 'VcEvSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPF1'}, + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPP1'}], + 'API_blk_type': 'Dem_SetEventStatus Pre-Passed', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'FIDs': { + 'VcFiSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM' + '/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/' + 'FiM_GetFunctionPermission'}], + 'API_blk_type': 'FiM_GetFunctionPermission', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond', + 'type': '-', + 'unit': '-'}}, + 'IUMPR': {}, + 'Ranking': { + 'VcRvSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost/Vc_SetRanking'}], + 'API_blk_type': 'Vcc_SetRanking', + 'blk_name': 'NamedConstant1', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'TstId': {} + }, + 'dids': {}, + 'inports': { + 'sVcEc_p_Amb': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'Ambient pressure sensor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3', + 'lsb': 1, + 'max': 200, + 'min': 0, + 'name': 'sVcEc_p_Amb', + 'offset': 0, + 'type': 'Float32', + 'unit': 'kPa'}, + 'yVcEc_B_ObdExe': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'OBD execution flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcXx_insignal1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcEc_B_ObdExe', + 'offset': 0, + 'type': 'Bool', + 'unit': '-'}}, + 'local_vars': { + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Over pressure downstream supercharger', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}, + 'rVcAesSupM_p_SupMonrPDif': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Supercharger actual and target pressure difference', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5', + 'lsb': '1', + 'max': '300', + 'min': ' 300', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}, + 'rVcAesSupM_p_SupMonrSCTarDly': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Low pass filtered supercharger target pressure', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2', + 'lsb': '1', + 'max': '300', + 'min': '0', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'nvm': {}, + 'outports': { + 'yVcAesSupM_B_SupChrgrErr': { + 'class': 'CVC_DISP', + 'configs': ['all'], + 'description': 'Supercharger Peak Pressure engine protection activation flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcAesAct_posn_EgrTar1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcAesSupM_B_SupChrgrErr', + 'offset': 0, + 'type': 'Bool', + 'unit': '%'}}, + 'pre_procs': ['Vc_Aes_SupM_B_CodeGenSprChrg'] + } +} + +PER_CFG_UNIT_CFG = { + 'calib_consts': { + 'cVcAesSupM_B_SupMonrHiBypFiMPerm': { + 'VcAesSupM__gen3': { + 'class': 'CVC_CAL', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Switch to bypass FiM permission supercharger ' + 'high boost monitor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Bool', + 'unit': ''}}}, + 'inports': { + 'sVcEc_p_Amb': { + 'VcAesSupM__gen3': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'Ambient pressure sensor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3', + 'lsb': 1, + 'max': 200, + 'min': 0, + 'name': 'sVcEc_p_Amb', + 'offset': 0, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'yVcEc_B_ObdExe': { + 'VcAesSupM__gen3': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'OBD execution flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcEc_B_ObdExe', + 'offset': 0, + 'type': 'Bool', + 'unit': '-'}}}, + 'local_vars': { + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Over pressure downstream supercharger', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'rVcAesSupM_p_SupMonrPDif': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Supercharger actual and target pressure difference', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5', + 'lsb': '1', + 'max': '300', + 'min': ' 300', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'rVcAesSupM_p_SupMonrSCTarDly': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Low pass filtered supercharger target pressure', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2', + 'lsb': '1', + 'max': '300', + 'min': '0', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}}, + 'outports': { + 'yVcAesSupM_B_SupChrgrErr': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['all'], + 'description': 'Supercharger Peak Pressure engine protection activation flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcAesSupM_B_SupChrgrErr', + 'offset': 0, + 'type': 'Bool', + 'unit': '%' + } + } + } +} +SRC_DIR = Path(__file__).parent + + +class TestSigIfHtmlReport(unittest.TestCase): + """Test case for testing the SigIfHtmlReport class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = str(Path(SRC_DIR, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value=UNIT_CFG) + self.unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value=PER_CFG_UNIT_CFG) + self.sig_if = MagicMock(spec_set=CsvSignalInterfaces) + self.sig_report = SigIfHtmlReport(self.build_cfg, self.unit_cfg, self.sig_if) + + def test_gen_header(self): + """Test generation of html header.""" + startstr = ''' + + + +''' + endstr = ''' + + +

    Signal interface report

    +''' + result = self.sig_report._gen_header() + self.assertTrue(result.startswith(startstr)) + self.assertTrue(result.endswith(endstr)) + + def test_gen_signal_toc(self): + """Check generated toc.""" + result = self.sig_report._gen_signal_toc() + expected = '''

    Signal index

    + +''' + self.assertEqual(result, expected) + + def test_gen_sigs_details(self): + """Check generated contents.""" + result = self.sig_report._gen_sigs_details() + expected = """

    Detailed Signal Information

    +

    yVcAesSupM_B_SupChrgrErr

    +

    Supercharger Peak Pressure engine protection activation flag

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    UnitTypeClassMinMaxLsbOffsetConfigs
    %BoolCVC_DISP--10['all']
    +

    + + + + + + + + + + + + + + +
    Defined in unitin projects
    VcAesSupM__gen3['CFG1']
    +""" + self.assertEqual(result, expected) + + def test_gen_html_end(self): + """Check generated document footer.""" + result = self.sig_report._gen_end() + expected = "\n\n" + self.assertEqual(result, expected) + + def test_generate_html_file(self): + """Check generated document file.""" + report_dst = Path(SRC_DIR, 'output', 'SigIf.html') + self.sig_report.generate_report_file(str(report_dst)) + with report_dst.open(encoding="utf-8") as fhandle: + result = fhandle.read() + with Path(SRC_DIR, 'reference_files', 'SigIf.html').open(encoding="utf-8") as fhandle: + expected = fhandle.read() + self.maxDiff = None + self.assertEqual(result, expected) + + +class TestSigIfHtmlReportIncomplete(unittest.TestCase): + """Test case for testing the SigIfHtmlReport class wit incomplete data.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = str(Path(SRC_DIR, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + tmp_unit_cfg = deepcopy(UNIT_CFG) + del tmp_unit_cfg['VcAesSupM__gen3']['outports']['yVcAesSupM_B_SupChrgrErr']['min'] + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value=tmp_unit_cfg) + tmp_per_cfg = deepcopy(PER_CFG_UNIT_CFG) + del tmp_per_cfg['outports']['yVcAesSupM_B_SupChrgrErr']['VcAesSupM__gen3']['min'] + self.unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value=tmp_per_cfg) + self.sig_if = MagicMock(spec_set=CsvSignalInterfaces) + self.sig_report = SigIfHtmlReport(self.build_cfg, self.unit_cfg, self.sig_if) + + def test_gen_sigs_details(self): + """Check generated contents.""" + result = self.sig_report._gen_sigs_details() + expected = """

    Detailed Signal Information

    +

    yVcAesSupM_B_SupChrgrErr

    +

    Supercharger Peak Pressure engine protection activation flag

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    UnitTypeClassMinMaxLsbOffsetConfigs
    %BoolCVC_DISP--10['all']
    +

    + + + + + + + + + + + + + + +
    Defined in unitin projects
    VcAesSupM__gen3['CFG1']
    +""" + self.maxDiff = None + self.assertEqual(result, expected) diff --git a/tests/pybuild/test_sig_if_html_rep_all.py b/tests/pybuild/test_sig_if_html_rep_all.py new file mode 100644 index 0000000..ae3b7dc --- /dev/null +++ b/tests/pybuild/test_sig_if_html_rep_all.py @@ -0,0 +1,512 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for SigIfHtmlReportAll class.""" + +from copy import deepcopy +import unittest +from unittest.mock import MagicMock +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.signal_interfaces import CsvSignalInterfaces +from pybuild.signal_if_html_rep_all import SigIfHtmlReportAll + +UNIT_CFG = { + 'VcAesSupM__gen3': { + 'calib_consts': { + 'cVcAesSupM_B_SupMonrHiBypFiMPerm': { + 'class': 'CVC_CAL', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Switch to bypass FiM permission ' + 'supercharger high boost monitor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Bool', + 'unit': ''} + }, + 'core': { + 'Events': { + 'VcEvSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPF1'}, + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPP1'}], + 'API_blk_type': 'Dem_SetEventStatus Pre-Passed', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'FIDs': { + 'VcFiSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM' + '/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/' + 'FiM_GetFunctionPermission'}], + 'API_blk_type': 'FiM_GetFunctionPermission', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond', + 'type': '-', + 'unit': '-'}}, + 'IUMPR': {}, + 'Ranking': { + 'VcRvSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost/Vc_SetRanking'}], + 'API_blk_type': 'Vcc_SetRanking', + 'blk_name': 'NamedConstant1', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'TstId': {} + }, + 'dids': {}, + 'inports': { + 'sVcEc_p_Amb': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'Ambient pressure sensor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3', + 'lsb': 1, + 'max': 200, + 'min': 0, + 'name': 'sVcEc_p_Amb', + 'offset': 0, + 'type': 'Float32', + 'unit': 'kPa'}, + 'yVcEc_B_ObdExe': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'OBD execution flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcXx_insignal1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcEc_B_ObdExe', + 'offset': 0, + 'type': 'Bool', + 'unit': '-'}}, + 'local_vars': { + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Over pressure downstream supercharger', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}, + 'rVcAesSupM_p_SupMonrPDif': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Supercharger actual and target pressure difference', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5', + 'lsb': '1', + 'max': '300', + 'min': ' 300', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}, + 'rVcAesSupM_p_SupMonrSCTarDly': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Low pass filtered supercharger target pressure', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2', + 'lsb': '1', + 'max': '300', + 'min': '0', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'nvm': {}, + 'outports': { + 'yVcAesSupM_B_SupChrgrErr': { + 'class': 'CVC_DISP', + 'configs': ['all'], + 'description': 'Supercharger Peak Pressure engine protection activation flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcAesAct_posn_EgrTar1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcAesSupM_B_SupChrgrErr', + 'offset': 0, + 'type': 'Bool', + 'unit': '%'}}, + 'pre_procs': ['Vc_Aes_SupM_B_CodeGenSprChrg'] + } +} + +PER_CFG_UNIT_CFG = { + 'calib_consts': { + 'cVcAesSupM_B_SupMonrHiBypFiMPerm': { + 'VcAesSupM__gen3': { + 'class': 'CVC_CAL', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Switch to bypass FiM permission supercharger ' + 'high boost monitor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Bool', + 'unit': ''}}}, + 'inports': { + 'sVcEc_p_Amb': { + 'VcAesSupM__gen3': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'Ambient pressure sensor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal3', + 'lsb': 1, + 'max': 200, + 'min': 0, + 'name': 'sVcEc_p_Amb', + 'offset': 0, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'yVcEc_B_ObdExe': { + 'VcAesSupM__gen3': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'OBD execution flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcXx_insignal1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcEc_B_ObdExe', + 'offset': 0, + 'type': 'Bool', + 'unit': '-'}}}, + 'local_vars': { + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Over pressure downstream supercharger', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'rVcAesSupM_p_SupMonrPDif': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Supercharger actual and target pressure difference', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5', + 'lsb': '1', + 'max': '300', + 'min': ' 300', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'rVcAesSupM_p_SupMonrSCTarDly': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Low pass filtered supercharger target pressure', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2', + 'lsb': '1', + 'max': '300', + 'min': '0', + 'offset': '0', + 'width': 1, + 'type': 'Float32', + 'unit': 'kPa'}}}, + 'outports': { + 'yVcAesSupM_B_SupChrgrErr': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['all'], + 'description': 'Supercharger Peak Pressure engine protection activation flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/tlop_VcAesAct_posn_EgrTar1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcAesSupM_B_SupChrgrErr', + 'offset': 0, + 'type': 'Bool', + 'unit': '%' + } + } + } +} +SRC_DIR = Path(__file__).parent + + +class TestSigIfHtmlReportAll(unittest.TestCase): + """Test case for testing the SigIfHtmlReportAll class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.sig_ifs = {} + self.unit_cfgs = {} + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = str(Path(SRC_DIR, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value=UNIT_CFG) + self.unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value=PER_CFG_UNIT_CFG) + self.prj = 'CFG1' + self.unit_cfgs.update({self.prj: self.unit_cfg}) + self.sig_if = MagicMock(spec_set=CsvSignalInterfaces) + self.sig_ifs.update({self.prj: self.sig_if}) + self.sig_report = SigIfHtmlReportAll(self.build_cfg, self.unit_cfgs, self.sig_ifs) + + def test_gen_header(self): + """Test generation of html header.""" + startstr = ''' + + + +''' + endstr = ''' + + +

    Signal interface report

    +''' + result = self.sig_report._gen_header() + self.assertTrue(result.startswith(startstr)) + self.assertTrue(result.endswith(endstr)) + + def test_gen_signal_toc(self): + """Check generated toc.""" + result_ext = self.sig_report._gen_signal_toc() + results = ''.join(result_ext.values()) + expected = """

    Signal index

    + +""" + self.assertEqual(results, expected) + + def test_gen_sigs_details(self): + """Check generated contents.""" + result_int = self.sig_report._gen_sigs_details() + results = ''.join(result_int.values()) + expected = """

    Detailed Signal Information

    +

    yVcAesSupM_B_SupChrgrErr

    +

    Supercharger Peak Pressure engine protection activation flag

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    UnitTypeClassMinMaxLsbOffsetConfigs
    %BoolCVC_DISP--10['all']
    +

    + + + + + + + + + + + + + + +
    Defined in unitin projects
    V c A e s S u p M _ _ g e n 3 CFG1
    + + + + + + + + + + + + + + +
    Consumed by unitsin projects
    +""" + self.assertEqual(results, expected) + + def test_gen_html_end(self): + """Check generated document footer.""" + result = self.sig_report._gen_end() + expected = "\n\n" + self.assertEqual(result, expected) + + def test_generate_html_file(self): + """Check generated document file.""" + report_dst = Path(SRC_DIR, 'output', 'SigIfAll.html') + self.sig_report.generate_report_file(report_dst) + with report_dst.open(encoding="utf-8") as fhandle: + result = fhandle.read() + expected_name = Path(SRC_DIR, 'reference_files', 'SigIfAll.html') + with expected_name.open(encoding="utf-8") as fhandle: + expected = fhandle.read() + self.assertEqual(result, expected) + + +class TestSigIfHtmlReportIncomplete(unittest.TestCase): + """Test case for testing the SigIfHtmlReportAll class wit incomplete data.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.sig_ifs = {} + self.unit_cfgs = {} + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + prj_cnf_dir = str(Path(SRC_DIR, 'cnfg_files')) + self.build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + self.build_cfg.get_prj_config = MagicMock(return_value='CFG1') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + tmp_unit_cfg = deepcopy(UNIT_CFG) + del tmp_unit_cfg['VcAesSupM__gen3']['outports']['yVcAesSupM_B_SupChrgrErr']['min'] + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value=tmp_unit_cfg) + tmp_per_cfg = deepcopy(PER_CFG_UNIT_CFG) + del tmp_per_cfg['outports']['yVcAesSupM_B_SupChrgrErr']['VcAesSupM__gen3']['min'] + self.unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value=tmp_per_cfg) + self.sig_if = MagicMock(spec_set=CsvSignalInterfaces) + self.prj = 'CFG1' + self.unit_cfgs.update({self.prj: self.unit_cfg}) + self.sig_ifs.update({self.prj: self.sig_if}) + self.sig_report = SigIfHtmlReportAll(self.build_cfg, self.unit_cfgs, self.sig_ifs) + + def test_gen_sigs_details(self): + """Check generated contents.""" + result_int = self.sig_report._gen_sigs_details() + results = ''.join(result_int.values()) + expected = """

    Detailed Signal Information

    +

    yVcAesSupM_B_SupChrgrErr

    +

    Supercharger Peak Pressure engine protection activation flag

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    UnitTypeClassMinMaxLsbOffsetConfigs
    %BoolCVC_DISP--10['all']
    +

    + + + + + + + + + + + + + + +
    Defined in unitin projects
    V c A e s S u p M _ _ g e n 3 CFG1
    + + + + + + + + + + + + + + +
    Consumed by unitsin projects
    +""" + self.assertEqual(results, expected) diff --git a/tests/pybuild/test_sig_ifs.py b/tests/pybuild/test_sig_ifs.py new file mode 100644 index 0000000..fa7dd97 --- /dev/null +++ b/tests/pybuild/test_sig_ifs.py @@ -0,0 +1,857 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for CsvSignalInterfaces.""" + +import copy +import unittest +import pprint +from unittest.mock import MagicMock, patch +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.signal_interfaces import CsvSignalInterfaces + + +class SigIfCfg: + """Hold a reference configuration.""" + _sig_if_cfg_orig = { + 'CAN-Input': {}, + 'EMS-Input': { + 'isig1': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + }, + 'isig2': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + }, + 'isig3': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + }, + }, + 'LIN-Input': {}, + 'Private CAN-Input': {}, + 'CAN-Output': {}, + 'EMS-Output': { + 'osig1': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + }, + 'osig2': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + }, + 'sigI1': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + }, + 'sigI2': { + 'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-', + } + }, + 'LIN-Output': {}, + 'Private CAN-Output': {} + } + + interfaces = copy.deepcopy(_sig_if_cfg_orig) + + @classmethod + def restore(cls): + """Restore default cfg.""" + cls.interfaces = copy.deepcopy(cls._sig_if_cfg_orig) + + +class TotUCfg: + """Hold a default consistent configuration. + + Instances can be modified to inject inconsistencies. + """ + + tmp_cfg = { + 'inports': { + 'isig1': { + 'VcFnc1': { + 'class': 'CVC_EXT', + 'configs': [['CFG', 'CFG1', 'CFG2']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig1', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'isig2': { + 'VcFnc2': { + 'class': 'CVC_EXT', + 'configs': [['CFG', 'CFG1', 'CFG2']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig2', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'isig3': { + 'VcFnc1': { + 'class': 'CVC_EXT', + 'configs': [['CFG', 'CFG1', 'CFG2']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig3', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'sigI1': { + 'VcFnc1': { + 'class': 'CVC_EXT', + 'configs': [['CFG', 'CFG1', 'CFG2']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig1', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'sigI2': { + 'VcFnc1': { + 'class': 'CVC_EXT', + 'configs': [['all']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig2', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + }, + 'outports': { + 'osig1': { + 'VcFnc2': { + 'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': '9', + 'min': 0, + 'name': 'sig1', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'osig2': { + 'VcFnc2': { + 'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': '9', + 'min': 0, + 'name': 'sig2', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'sigI1': { + 'VcFnc2': { + 'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig1', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + 'sigI2': { + 'VcFnc2': { + 'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig2', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + }, + } + } + _tot_cfg = copy.deepcopy(tmp_cfg) + + def __init__(self): + self.restore() + + def restore(self): + """Restore something the tot_cfg.""" + self.tot_cfg = copy.deepcopy(self._tot_cfg) + + def get_tot_ucfg_consistent(self): + """Generate consistent data of total unit configuration.""" + return self.tot_cfg + + +def mock_parse_io_cfg(mock_cfg, *_): + """Does not read config from file, but get conf data from fixed dicts.""" + # Arrrgh! Stupid name-mangling. + mock_cfg.interfaces = SigIfCfg.interfaces + + +class BaseSetUp(unittest.TestCase): + """Inerhitence from this class for all testcases. + + Start the calling this setUpClass method from the setUpClass method in the + test case, and then modify the base setup in the test case (if needed). + """ + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + super().setUp() + self.tot_cfg = TotUCfg() + SigIfCfg.restore() + + self.ucfg = MagicMock(spec_set=UnitConfigs) + self.ucfg.get_per_cfg_unit_cfg = MagicMock( + side_effect=self.tot_cfg.get_tot_ucfg_consistent) + + config_dir = Path(Path(__file__).parent, 'cnfg_files') + build_cfg = MagicMock(spec_set=BuildProjConfig) + build_cfg.get_prj_config = MagicMock(return_value='CFG1') + build_cfg.get_prj_cfg_dir = MagicMock( + return_value=str(config_dir)) + build_cfg.get_if_cfg_dir = MagicMock( + return_value=str(Path(config_dir, 'ActiveInterfaces'))) + self.build_cfg = build_cfg + + # Patch the CsvSignalInterfaces class to not read the configuration file, + # but instead use the dicts in this test file. + patcher_sig_parse = patch.object(CsvSignalInterfaces, + '_parse_io_cnfg', + mock_parse_io_cfg) + patcher_sig_parse.start() + self.addCleanup(patcher_sig_parse.stop) + self.maxDiff = None + + +class TestSignalIterfacesConsistent(BaseSetUp): + """Test the CsvSignalInterfaces class with consistent data.""" + + def setUp(self): + super().setUp() + SigIfCfg.restore() + self.sigif = CsvSignalInterfaces(self.build_cfg, self.ucfg) + + def test__init__(self): + """Check that the class can be initialized.""" + self.assertIsInstance(self.sigif, CsvSignalInterfaces) + + def test_get_raw_io_cnfg(self): + """Check that the class returns correct raw io config.""" + result = self.sigif.get_raw_io_cnfg() + expected = SigIfCfg.interfaces + self.assertDictEqual(result, expected) + + def test_get_io_config(self): + """Check that the class returns correct io config for + specific project.""" + result = self.sigif.get_io_config()[0] + expected = { + 'CAN-Input': {}, + 'CAN-Output': {}, + 'EMS-Input': {'isig1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'isig2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'isig3': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'EMS-Output': {'osig1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'osig2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'sigI1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'sigI2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {}} + self.assertDictEqual(result, expected) + + def test_get_external_io(self): + """Check that the class returns correct external io config.""" + result = self.sigif.get_io_config()[0] + expected = { + 'CAN-Input': {}, + 'CAN-Output': {}, + 'EMS-Input': {'isig1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'isig2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'isig3': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'EMS-Output': {'osig1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'osig2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'sigI1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'sigI2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'LIN-Input': {}, + 'LIN-Output': {}, + 'Private CAN-Input': {}, + 'Private CAN-Output': {}} + self.assertDictEqual(result, expected) + + def test_get_external_inputs(self): + """Check that the class returns correct external inputs list.""" + result = self.sigif.get_external_inputs() + expected = { + 'CAN-Input': {}, + 'EMS-Input': {'isig1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'isig2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'isig3': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'LIN-Input': {}, + 'Private CAN-Input': {}} + self.assertDictEqual(result, expected) + + def test_get_external_outputs(self): + """Check that the class returns correct external outputs list.""" + result = self.sigif.get_external_outputs() + expected = { + 'CAN-Output': {}, + 'EMS-Output': {'osig1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'osig2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'sigI1': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}, + 'sigI2': {'IOType': 'x', + 'description': 'Torque arbitraion state', + 'init': 0, + 'max': 9, + 'min': 0, + 'offset': 0, + 'type': 'UInt8', + 'unit': '-'}}, + 'LIN-Output': {}, + 'Private CAN-Output': {}} + self.assertDictEqual(result, expected) + + def test_check_config(self): + """Check that the class returns correct configuration check data.""" + result = self.sigif.check_config() + expected = { + 'sigs': { + 'ext': {}, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + def test_check_config_missing(self): + """Check that the class can handle incorrect indata.""" + self.ucfg.get_per_cfg_unit_cfg = MagicMock(return_value={}) + result = self.sigif.check_config() + expected = { + 'sigs': { + 'ext': {}, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + +class TestSignalIterfacesExtIncons(BaseSetUp): + """Test the CsvSignalInterfaces class with external incosistent data.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + BaseSetUp.setUp(self) + + def test_clean(self): + """Check that the unused external output signals are detected.""" + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + def test_missing_ext_inp_vcc(self): + """Check that the missing external input signals are detected.""" + del self.tot_cfg.tot_cfg['outports']['osig1'] + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + 'missing': { + 'osig1': {} + } + }, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + def test_unused_ext_outp_vcc(self): + """Check that the unused external output signals are detected.""" + del self.tot_cfg.tot_cfg['inports']['isig1'] + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + 'unused': {'isig1': {}} + }, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + def test_unused_ext_inp_io(self): + """Check that the missing input signals in the ext io are detected. + + They should be detected as missing internal input signals. + """ + del SigIfCfg.interfaces['EMS-Input']['isig1'] + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': { + 'VcFnc1': { + 'missing': { + 'isig1': {} + } + } + } + } + } + self.assertDictEqual(result, expected) + + def test_unused_ext_outp_io(self): + """Check that the missing output signals in the ext io are detected. + + They should be detcted as unsued internal input signals. + """ + del SigIfCfg.interfaces['EMS-Output']['osig1'] + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': { + 'VcFnc2': { + 'unused': { + 'osig1': {} + } + } + } + } + } + self.assertDictEqual(result, expected) + + def test_incos_ext_inp(self): + """Check signal definition incosistencies between ext inp & int SW def. + + Faults are injected by chaging the external IO definition. + """ + SigIfCfg.interfaces['EMS-Input']['isig1']['max'] = 10 + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + 'inconsistent_defs': { + 'VcFnc1': { + 'isig1': { + 'max': '10 != 9' + } + } + } + }, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + def test_incos_ext_outp(self): + """Check signal definition incosistencies between ext outp & int SW def. + + Faults are injected by chaging the external IO definition. + """ + SigIfCfg.interfaces['EMS-Output']['osig2']['min'] = 1 + SigIfCfg.interfaces['EMS-Output']['osig2']['max'] = 10 + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + 'inconsistent_defs': { + 'VcFnc2': { + 'osig2': { + 'min': '1 != 0', + 'max': '10 != 9' + } + } + } + }, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + def test_incos_int_outp(self): + """Check signal definition incosistencies between ext outp & int SW def. + + Faults are injected by chaging the VCC SW definition. + """ + self.tot_cfg.tot_cfg['inports']['isig1']['VcFnc1']['min'] = 1 + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + 'inconsistent_defs': { + 'VcFnc1': { + 'isig1': { + 'min': '0 != 1' + } + } + } + }, + 'int': {} + } + } + self.assertDictEqual(result, expected) + + +class TestSignalIterfacesIntIncons(BaseSetUp): + """Test the CsvSignalInterfaces class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + BaseSetUp.setUp(self) + + def test_incos_int_incons_def(self): + """Test inconsistencies between VCC SW units.""" + self.tot_cfg.tot_cfg['inports']['sigI1']['VcFnc1']['min'] = 2 + self.tot_cfg.tot_cfg['inports']['sigI1']['VcFnc1']['max'] = 2 + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': { + 'VcFnc1': { + 'inconsistent_defs': { + 'sigI1': { + 'min': '0 != 2', + 'max': '9 != 2' + } + } + } + } + } + } + self.assertDictEqual(result, expected) + + def test_incos_int_missing(self): + """Test inconsistencies between VCC SW units.""" + del self.tot_cfg.tot_cfg['outports']['sigI1'] + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + 'missing': { + 'sigI1': {} + } + }, + 'int': { + 'VcFnc1': { + 'missing': { + 'sigI1': {} + } + } + } + } + } + self.assertDictEqual(result, expected) + + def test_incos_int_unused(self): + """Test inconsistencies between VCC SW units.""" + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': { + } + } + } + self.assertDictEqual(result, expected) + + def test_incos_int_multiple_def(self): + """Test detection of multiple definitions in VCC SW units.""" + self.tot_cfg.tot_cfg['outports']['sigI2']['VcFnc3'] = \ + { + 'class': 'CVC_DISP', + 'configs': [['all']], + 'description': 'Torque arbitraion state', + 'handle': 'path/to/simulink/blk', + 'lsb': 1, + 'max': 9, + 'min': 0, + 'name': 'sig1', + 'offset': 0, + 'type': 'UInt8', + 'unit': '-' + } + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + pprint.pprint(csi._unit_cfg.get_per_cfg_unit_cfg()) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': { + 'VcFnc2': { + 'multiple_defs': { + 'sigI2': {} + } + }, + 'VcFnc3': { + 'multiple_defs': { + 'sigI2': {} + } + } + } + } + } + self.assertDictEqual(result, expected) + + def test_clean(self): + """Test detection of multiple definitions in VCC SW units.""" + csi = CsvSignalInterfaces(self.build_cfg, self.ucfg) + result = csi.check_config() + expected = { + 'sigs': { + 'ext': { + }, + 'int': { + } + } + } + self.assertDictEqual(result, expected) diff --git a/tests/pybuild/test_sig_incons_html_rep.py b/tests/pybuild/test_sig_incons_html_rep.py new file mode 100644 index 0000000..738764b --- /dev/null +++ b/tests/pybuild/test_sig_incons_html_rep.py @@ -0,0 +1,312 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for the html report generated from the signal consistency check.""" + +import os +import os.path +import unittest +from pathlib import Path +from pybuild.signal_incons_html_rep import SigConsHtmlReport + +INDATA = { + "sigs": { + "ext": { + "missing": { + "sVcAcCtrl_D_ElacDiagcFb": {"GEP3_BEV"} + }, + "unused": {}, + "inconsistent_defs": { + "EXT_UNIT_NAME": { + "sVcAc_D_AirCondCmpsrStats": {"max": "15 != 7"} + } + } + }, + "int": { + "INT_UNIT_NAME": { + "missing": { + "sVcBec_Pw_HvBattClimaPwr": {"VED4_GENIII"} + }, + "unused": { + "sVcAcCtrl_D_ElacDiagcFb": {"VED4_GENIII"} + }, + "multiple_defs": { + "yVcAesEch_B_EChrgrActv": {"VEP4_GENIII"} + }, + "inconsistent_defs": { + "sVcAcOvr_p_AirCondHiSide_bar": { + "max": "100 != 5000", + "unit": "bar != kPa" + } + } + } + } + } +} + +REPORT_UNIT_TOC = '''

    Unit index

    + + +''' + +REPORT_EXT_TOC = '''

    Missing external signals

    +

    Unused external signals

    +''' + +REPORT_MISSING = '''

    Missing signals

    +

    Inports whose signals are not generated in the listed configuration(s).

    + + + + + + + + + + + + + +
    VariableConfigurations
    sVcBec_Pw_HvBattClimaPwrVED4_GENIII
    +''' + +REPORT_UNUSED = '''

    Unused signals

    +

    Outports that are generated, but not used in the listed configuration(s).

    + + + + + + + + + + + + + +
    VariableConfigurations
    sVcAcCtrl_D_ElacDiagcFbVED4_GENIII
    +''' + +REPORT_MULTI = '''

    Multiple defined signals

    +

    Outports that are generated more than once in the listed configuration(s).

    + + + + + + + + + + + + + +
    VariableConfigurations
    yVcAesEch_B_EChrgrActvVEP4_GENIII
    +''' + +REPORT_INT_INCONS = '''

    Internal signal inconsistencies

    +

    Inports that have different variable definitions than the producing outport.

    + + + + + + + + + + + + + + + + + + + + +
    VariableVariable parameterDifference
    sVcAcOvr_p_AirCondHiSide_barmax100 != 5000
    unitbar != kPa
    +''' + +REPORT_EXT_INCONS = '''

    External signal inconsistencies

    +

    In-/Out-ports that have different variable definitions than in the interface definition file.

    + + + + + + + + + + + + + + + +
    VariableVariable parameterDifference
    sVcAc_D_AirCondCmpsrStatsmax15 != 7
    +''' + +REPORT_UNIT = ('''

    INT_UNIT_NAME

    \n''' + + REPORT_MISSING + + REPORT_UNUSED + + REPORT_MULTI + + REPORT_INT_INCONS) + +REPORT_EXT_UNIT = ('''

    EXT_UNIT_NAME

    \n''' + + REPORT_EXT_INCONS) + +REPORT_UNITS = ('''

    Detailed Unit Information

    \n''' + + REPORT_EXT_UNIT + + REPORT_UNIT) + +REPORT_EXT_SIGNALS = '''

    Missing external signals

    +

    comment

    + + + + + + + + + + + + + +
    VariableConfigurations
    sVcAcCtrl_D_ElacDiagcFbGEP3_BEV
    +''' + +REPORT_END = ''' + +''' + +OUTPUT_DIR = Path(Path(__file__).parent, 'output') + + +def remove(*files): + """Try to remove file.""" + for file_ in files: + try: + os.remove(file_) + except FileNotFoundError: + pass + + +def exists(*files): + """Check if file exists.""" + for file_ in files: + if not os.path.isfile(file_): + raise AssertionError('File {} does not exist.'.format(file_)) + return True + + +class TestSigConsHtmlReport(unittest.TestCase): + """Test case for the html report generated from the signal consistency check.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.maxDiff = None + self.sig_cons = SigConsHtmlReport(INDATA) + + def test_gen_header(self): + """Test generation of html header.""" + startstr = ''' + + + +''' + endstr = ''' + + +

    Signal consistency report

    +''' + result = self.sig_cons._gen_header() + self.assertTrue(result.startswith(startstr)) + self.assertTrue(result.endswith(endstr)) + + def test_gen_unit_toc(self): + """Test generation of a unit TOC.""" + result = self.sig_cons._gen_unit_toc() + self.assertEqual(result, REPORT_UNIT_TOC) + + def test_gen_units(self): + """Test generation of the information regarding all the units.""" + result = self.sig_cons._gen_units() + self.assertEqual(result, REPORT_UNITS) + + def test_set_to_str(self): + """Test conversion of a set to a sorted string.""" + set_ = set() + result = self.sig_cons._set_to_str(set_) + self.assertEqual(result, '') + set_ = {"1", "2", "3"} + result = self.sig_cons._set_to_str(set_) + self.assertEqual(result, '1, 2, 3') + + def test_gen_unit(self): + """Test generation of report for the unit specific information.""" + result = self.sig_cons._gen_unit('EXT_UNIT_NAME') + self.assertEqual(result, REPORT_EXT_UNIT) + result = self.sig_cons._gen_unit('INT_UNIT_NAME') + self.assertEqual(result, REPORT_UNIT) + + def test_gen_missing_sigs(self): + """Test generation of unit specific information for missing signal.""" + unit_data = INDATA['sigs']['int']['INT_UNIT_NAME'] + result = self.sig_cons._gen_missing_sigs(unit_data) + self.assertEqual(result, REPORT_MISSING) + + def test_gen_unused_sigs(self): + """Test generation of unit specific information for unused signals.""" + unit_data = INDATA['sigs']['int']['INT_UNIT_NAME'] + result = self.sig_cons._gen_unused_sigs(unit_data) + self.assertEqual(result, REPORT_UNUSED) + + def test_gen_multiple_def_sigs(self): + """Test generation of unit specific information for signals generated more than once.""" + unit_data = INDATA['sigs']['int']['INT_UNIT_NAME'] + result = self.sig_cons._gen_multiple_def_sigs(unit_data) + self.assertEqual(result, REPORT_MULTI) + + def test_gen_ext_inconsistent_defs(self): + """Test generation of report of inconsistent variable definition parameters.""" + result = self.sig_cons._gen_ext_inconsistent_defs('EXT_UNIT_NAME') + self.assertEqual(result, REPORT_EXT_INCONS) + + def test_gen_int_inconsistent_defs(self): + """Test generation of report of inconsistent variable definition parameters.""" + unit_data = INDATA['sigs']['int']['INT_UNIT_NAME'] + result = self.sig_cons._gen_int_inconsistent_defs(unit_data) + self.assertEqual(result, REPORT_INT_INCONS) + + def test_gen_ext_signals_report(self): + """Test generation of report for external signals.""" + result = self.sig_cons._gen_ext_signals_report('missing', 'comment') + self.assertEqual(result, REPORT_EXT_SIGNALS) + + def test_gen_html_end(self): + """Test generation of end of the body and html document.""" + result = self.sig_cons._gen_end() + self.assertEqual(result, REPORT_END) + + def test_generate_html_file(self): + """Test that write to file generates output.""" + filename = str(Path(OUTPUT_DIR, 'SigCheck.html')) + remove(filename) + self.sig_cons.generate_report_file(filename) + exists(filename) + + def test_generate_html_file_empty(self): + """Test that write to file with minimal indata generates output.""" + filename = str(Path(OUTPUT_DIR, 'SigCheck.html')) + remove(filename) + sig_cons = SigConsHtmlReport({'sigs': {'ext': {}, 'int': {}}}) + sig_cons.generate_report_file(filename) + exists(filename) diff --git a/tests/pybuild/test_sig_incons_html_rep_all.py b/tests/pybuild/test_sig_incons_html_rep_all.py new file mode 100644 index 0000000..2de8617 --- /dev/null +++ b/tests/pybuild/test_sig_incons_html_rep_all.py @@ -0,0 +1,368 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for the html report generated from the signal consistency check.""" +import os +import os.path +import unittest +from pathlib import Path +from pybuild.signal_incons_html_rep_all import SigConsHtmlReportAll + +INDATA = { + "CFG1": { + "sigs": { + "ext": { + "missing": { + "sVcAcCtrl_D_ElacDiagcFb": ["GEP3_BEV"] + }, + "unused": {}, + "inconsistent_defs": { + "MDL1": { + "sVcAc_D_AirCondCmpsrStats": {"max": "15 != 7"} + }, + "MDL2": { + "sVcAc_D_AirCondCmpsrStats": {"max": "15 != 7"} + } + } + }, + "int": { + "MDL2": { + "missing": { + "sVcBec_Pw_HvBattClimaPwr": ["VED4_GENIII"] + }, + "unused": { + "sVcAcCtrl_D_ElacDiagcFb": ["VED4_GENIII"] + }, + "multiple_defs": { + "yVcAesEch_B_EChrgrActv": ["VEP4_GENIII"] + }, + "inconsistent_defs": { + "sVcAcOvr_p_AirCondHiSide_bar": { + "max": "100 != 5000", + "unit": "bar != kPa" + } + } + } + } + }, + "never_active_signals": { + "MDL2": ["sVcNeverActiveOne_B_SomethingFalse", "sVcNeverActiveTwo_B_SomethingFalse"] + } + } +} + +REPORT_UNIT_TOC = None + +REPORT_EXT_TOC = '''

    Missing external signals

    +

    Unused external signals

    +''' + +REPORT_MISSING = ''' + + + + + + + + + + + + + +
    VariableConfigurations
    sVcBec_Pw_HvBattClimaPwr VED4_GENIII
    +''' + +REPORT_UNUSED = ''' + + + + + + + + + + + + + +
    VariableConfigurations
    sVcAcCtrl_D_ElacDiagcFb VED4_GENIII
    +''' + +REPORT_NEVER_ACTIVE = ''' + + + + + + + + + + + + + + + + + +
    VariableConfigurations
    sVcNeverActiveOne_B_SomethingFalse
    sVcNeverActiveTwo_B_SomethingFalse
    +''' + +REPORT_MULTI = ''' + + + + + + + + + + + + + +
    VariableConfigurations
    yVcAesEch_B_EChrgrActv VEP4_GENIII
    +''' + +REPORT_INT_INCONS = """ + + + + + + + + + + + + + + + + + + + + + + +
    VariableVariable parameterDifferenceConfigurations
    sVcAcOvr_p_AirCondHiSide_barmax100 != 5000 CFG1
    unitbar != kPa CFG1
    +""" + +REPORT_EXT_INCONS = """ + + + + + + + + + + + + + + + + +
    VariableVariable parameterDifferenceConfigurations
    sVcAc_D_AirCondCmpsrStatsmax15 != 7CFG1
    +""" +REPORT_EXT_UNIT = ('''

    MDL1

    \n''' + + '''

    External signal inconsistencies

    \n''' + + '''

    In-/Out-ports that have different variable definitions ''' + + '''than in the interface definition file.

    ''' + + REPORT_EXT_INCONS) + +REPORT_UNIT = ('

    MDL2

    \n' + + '

    Missing signals

    \n' + + '

    Inports whose signals are not generated in the listed configuration(s).

    ' + + REPORT_MISSING + + '

    Unused signals

    \n' + + '

    Outports that are generated, but not used in the listed configuration(s).

    ' + + REPORT_UNUSED + + '

    Multiple defined signals

    \n' + + '

    Outports that are generated more than once in the listed configuration(s).

    ' + + REPORT_MULTI + + '

    Internal signal inconsistencies

    \n' + + '

    Inports that have different variable definitions than the producing outport.

    ' + + REPORT_INT_INCONS + + '

    External signal inconsistencies

    \n' + '

    In-/Out-ports that have different variable definitions' + ' than in the interface definition file.

    ' + + REPORT_EXT_INCONS + + '

    Never active signals

    \n' + '

    Never active signals will not appear in generated .c file, ' + 'signals probablty lead to terminators in Simulink model.

    ' + + REPORT_NEVER_ACTIVE) + +REPORT_UNITS = ('''

    Detailed Unit Information

    \n''' + + REPORT_EXT_UNIT + + REPORT_UNIT) + +REPORT_EXT_SIGNALS = '''

    Missing external signals

    +

    comment

    + + + + + + + + + + + + + +
    VariableConfigurations
    sVcAcCtrl_D_ElacDiagcFb GEP3_BEV
    +''' + +REPORT_END = ''' + +''' + + +def remove(*files): + """Try to remove file.""" + for file_ in files: + try: + os.remove(file_) + except FileNotFoundError: + pass + + +def exists(*files): + """Check if file exists.""" + for file_ in files: + if not os.path.isfile(file_): + raise AssertionError('File {} does not exist.'.format(file_)) + return True + + +class TestSigConsHtmlReportAll(unittest.TestCase): + """Test case for the html report generated from the signal consistency check.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.maxDiff = None + self.sig_cons = SigConsHtmlReportAll(INDATA) + + def test_gen_header(self): + """Test generation of html header.""" + startstr = ''' + + + +''' + endstr = ''' + + +

    Signal consistency report

    +''' + result = self.sig_cons._gen_header() + self.assertTrue(result.startswith(startstr)) + self.assertTrue(result.endswith(endstr)) + + def test_gen_unit_toc(self): + """Test generation of a unit TOC.""" + result = self.sig_cons._gen_unit_toc() + self.assertEqual(result, REPORT_UNIT_TOC) + + def test_gen_units(self): + """Test generation of the information regarding all the units.""" + result_int = self.sig_cons._gen_units() + results = '' + for prj, result in result_int.items(): + results += result + self.assertEqual(results, REPORT_UNITS) + + def test_set_to_str(self): + """Test conversion of a set to a sorted string.""" + set_ = set() + result = self.sig_cons._set_to_str(set_) + self.assertEqual(result, '') + set_ = {"1", "2", "3"} + result = self.sig_cons._set_to_str(set_) + self.assertEqual(result, '1, 2, 3') + + def test_gen_unit1(self): + """Test generation of report for the unit specific information.""" + self.sig_cons._prj = 'CFG1' + result = self.sig_cons._gen_unit('CFG1', 'MDL1') + self.assertEqual(result, REPORT_EXT_UNIT) + + def test_gen_unit2(self): + """Test generation of report for the unit specific information.""" + self.sig_cons._prj = 'CFG1' + result = self.sig_cons._gen_unit('CFG1', 'MDL2') + self.assertEqual(result, REPORT_UNIT) + + def test_gen_missing_sigs(self): + """Test generation of unit specific information for missing signal.""" + unit_data = INDATA['CFG1']['sigs']['int']['MDL2'] + self.sig_cons._unit_data_all = {} + self.sig_cons._unit_data_all.update({'CFG1': unit_data}) + result = self.sig_cons._gen_missing_sigs(unit_data, self.sig_cons._unit_data_all) + self.assertEqual(result, REPORT_MISSING) + + def test_gen_unused_sigs(self): + """Test generation of unit specific information for unused signals.""" + unit_data = INDATA['CFG1']['sigs']['int']['MDL2'] + self.sig_cons._unit_data_all = {} + self.sig_cons._unit_data_all.update({'CFG1': unit_data}) + result = self.sig_cons._gen_unused_sigs(unit_data, self.sig_cons._unit_data_all) + self.assertEqual(result, REPORT_UNUSED) + + def test_gen_multiple_def_sigs(self): + """Test generation of unit specific information for signals generated more than once.""" + unit_data = INDATA['CFG1']['sigs']['int']['MDL2'] + self.sig_cons._unit_data_all = {} + self.sig_cons._unit_data_all.update({'CFG1': unit_data}) + result = self.sig_cons._gen_multiple_def_sigs(unit_data, self.sig_cons._unit_data_all) + self.assertEqual(result, REPORT_MULTI) + + def test_gen_ext_inconsistent_defs(self): + """Test generation of report of inconsistent variable definition parameters.""" + result = self.sig_cons._gen_ext_inconsistent_defs('CFG1', 'MDL1') + self.assertEqual(result, REPORT_EXT_INCONS) + + def test_gen_int_inconsistent_defs(self): + """Test generation of report of inconsistent variable definition parameters.""" + unit_data = INDATA['CFG1']['sigs']['int']['MDL2'] + self.sig_cons._unit_data_all = {} + self.sig_cons._unit_data_all.update({'CFG1': unit_data}) + result = self.sig_cons._gen_int_inconsistent_defs(unit_data, self.sig_cons._unit_data_all) + self.assertEqual(result, REPORT_INT_INCONS) + + def test_gen_ext_signals_report(self): + """Test generation of report for external signals.""" + self.sig_cons._prj = "CFG1" + result = self.sig_cons._gen_ext_signals_report('missing', 'comment') + self.assertEqual(result, REPORT_EXT_SIGNALS) + + def test_gen_html_end(self): + """Test generation of end of the body and html document.""" + result = self.sig_cons._gen_end() + self.assertEqual(result, REPORT_END) + + def test_generate_html_file(self): + """Test that write to file generates output.""" + filename = str(Path(Path(__file__).parent, 'output', 'SigCheck.html')) + remove(filename) + self.sig_cons.generate_report_file(filename) + exists(filename) + + def test_generate_html_file_empty(self): + """Test that write to file with minimal indata generates output.""" + filename = str(Path(Path(__file__).parent, 'output', 'SigCheck.html')) + remove(filename) + sig_cons = SigConsHtmlReportAll({'sigs': {'ext': {}, 'int': {}}}) + sig_cons.generate_report_file(filename) + exists(filename) diff --git a/tests/pybuild/test_signal_inconsistency_check.py b/tests/pybuild/test_signal_inconsistency_check.py new file mode 100644 index 0000000..963fafb --- /dev/null +++ b/tests/pybuild/test_signal_inconsistency_check.py @@ -0,0 +1,648 @@ +"""Test signal_inconsistency_check.py""" + +import os +import unittest +from argparse import Namespace +from unittest.mock import MagicMock, patch + +from pybuild.signal_inconsistency_check import ( + EXIT_CODE_INCORRECT_CSV, + EXIT_CODE_MISSING_CONSUMER, + EXIT_CODE_NEVER_ACTIVE_SIGNALS, + EXIT_CODE_OK, + EXIT_CODE_UNPRODUCED, + SignalInconsistency, +) + +MODEL_ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class TestSignalInconsistency(unittest.TestCase): + """Test SignalInconsistency""" + + @classmethod + def setUpClass(cls): + """Common objects and variables""" + cls._args = Namespace(models=["test_model", "test_model1"], ci_url="") + cls._args1 = Namespace( + models=["test_model", "test_model1", "test_model2"], ci_url="" + ) + cls._skip_all_ext = {"mdl1": {"sig1_ext"}, "mdl2": {"sig2_ext", "sig3_Ext"}} + cls._used_inports = {"sig_1", "sig_2", "sig_22", "sig_3"} + cls._sig_incons = SignalInconsistency(TestSignalInconsistency._args1) + + def test_get_model_names_from_gerrit(self): + """Test _get_mode_names_from_gerrit""" + paths = [ + os.path.join("Models", "SSPPL", "VcDepExt", "VcDepExt.mdl"), + os.path.join("Models", "SSPTHM", "VcAmbMod", "VcAmbMod.mdl"), + os.path.join("Models", "SSPTHMC", "VcAcCtrl", "VcAcCtrl.mdl"), + ] + result = SignalInconsistency(TestSignalInconsistency._args)._get_model_names( + paths + ) + expected_result = ["VcDepExt", "VcAmbMod", "VcAcCtrl"] + self.assertEqual(result, expected_result) + + def test_check_unproduced_signals(self): + """Test check_unproduced_signals""" + unproduced_signals = { + "test_model": { + "sVcAcCtrl_D_ElacDiagcFb": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_AirCondCmpsrStats": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_CoolgForHvBattSts": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "signal_B_dummytestingSts": [{"GEP3_BEV"}], + }, + "test_model1": { + "sVcAcCtrl_D_Elac": [{"VEP"}], + "sVcAc_D_Air": [{"VEP"}], + "sVcAc_D_Cool": [{"VEP"}], + }, + } + exit_code, _ = SignalInconsistency( + TestSignalInconsistency._args + ).check_unproduced_signals(unproduced_signals) + self.assertEqual(exit_code, EXIT_CODE_UNPRODUCED) + + def test_check_never_active_signals(self): + """Test check_never_active_signals""" + exit_code, _ = SignalInconsistency( + TestSignalInconsistency._args + ).check_never_active_signals({}) + self.assertEqual(exit_code, EXIT_CODE_OK) + + never_active_signals = { + "test_model": { + "sVcNeverActiveOne_B_SomethingFalse": [{"GEP3_BEV"}, {"VED"}, {"SPA"}] + }, + "test_model1": {"sVcNeverActiveTwo_B_SomethingFalse": [{"VEP"}]}, + } + exit_code, _ = SignalInconsistency( + TestSignalInconsistency._args + ).check_never_active_signals(never_active_signals) + self.assertEqual(exit_code, EXIT_CODE_NEVER_ACTIVE_SIGNALS) + + def test_check_missing_consumer_signals(self): + """Test check_missing_consumer_signals""" + missing_consumer_signals = { + "test_model": { + "sVcAcCtrl_D_ElacDiagcFb": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_AirCondCmpsrStats": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_CoolgForHvBattSts": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + }, + "test_model1": { + "ElacDiagcFb": [{"VEP"}], + "AirCondCmpsrStats": [{"VEP"}], + "CoolgForHvBattSts": [{"VEP"}], + }, + } + + skip_all = { + "test_model": { + "sVcAcCtrl_D_ElacDiagcFb", + "sVcAc_D_AirCondCmpsrStats", + "sVcAc_D_CoolgForHvBattSts", + }, + "test_model1": {"ElacDiagcFb", "AirCondCmpsrStats", "CoolgForHvBattSts"}, + } + keep_all = {"test_model": {}, "test_model1": {}} + + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args) + + # Check that method return correct exit code if signals are missing consumers. + signal_inconsistency.fetch_signals_to_skip = MagicMock(return_value=keep_all) + exit_code, _ = signal_inconsistency.check_missing_consumer_signals( + missing_consumer_signals + ) + self.assertEqual(exit_code, EXIT_CODE_MISSING_CONSUMER) + + # Check that method return correct exit code if signals are added to Unconsumed.csv. + signal_inconsistency.fetch_signals_to_skip = MagicMock(return_value=skip_all) + exit_code, _ = signal_inconsistency.check_missing_consumer_signals( + missing_consumer_signals + ) + self.assertEqual(exit_code, EXIT_CODE_OK) + + def test_sort_internal_inconsistency_by_model(self): + """Test _sort_internal_inconsistency_by_model""" + + signal_inconsistency_results = { + "GEP3_BEV": { + "sigs": { + "int": { + "test_model": { + "missing": { + "sVcAcCtrl_D_ElacDiagcFb": {"GEP3_BEV"}, + "sVcAc_D_AirCondCmpsrStats": {"GEP3_BEV"}, + "sVcAc_D_CoolgForHvBattSts": {"GEP3_BEV"}, + "signal_B_dummytestingSts": {"GEP3_BEV"}, + }, + "unused": { + "sVcAcCtrl_D_ElacDiagcFb": {"GEP3_BEV"}, + "sVcAc_D_AirCondCmpsrStats": {"GEP3_BEV"}, + "sVcAc_D_CoolgForHvBattSts": {"GEP3_BEV"}, + }, + } + } + }, + "never_active_signals": {}, + }, + "VED": { + "sigs": { + "int": { + "test_model": { + "missing": { + "sVcAcCtrl_D_ElacDiagcFb": {"VED"}, + "sVcAc_D_AirCondCmpsrStats": {"VED"}, + "sVcAc_D_CoolgForHvBattSts": {"VED"}, + }, + "unused": { + "sVcAcCtrl_D_ElacDiagcFb": {"VED"}, + "sVcAc_D_AirCondCmpsrStats": {"VED"}, + "sVcAc_D_CoolgForHvBattSts": {"VED"}, + }, + } + } + }, + "never_active_signals": {}, + }, + "VEP": { + "sigs": { + "int": { + "test_model1": { + "missing": { + "sVcAcCtrl_D_Elac": {"VEP"}, + "sVcAc_D_Air": {"VEP"}, + "sVcAc_D_Cool": {"VEP"}, + }, + "unused": { + "ElacDiagcFb": {"VEP"}, + "AirCondCmpsrStats": {"VEP"}, + "CoolgForHvBattSts": {"VEP"}, + }, + } + } + }, + "never_active_signals": {}, + }, + "SPA": { + "sigs": { + "int": { + "test_model": { + "missing": { + "sVcAcCtrl_D_ElacDiagcFb": {"SPA"}, + "sVcAc_D_AirCondCmpsrStats": {"SPA"}, + "sVcAc_D_CoolgForHvBattSts": {"SPA"}, + }, + "unused": { + "sVcAcCtrl_D_ElacDiagcFb": {"SPA"}, + "sVcAc_D_AirCondCmpsrStats": {"SPA"}, + "sVcAc_D_CoolgForHvBattSts": {"SPA"}, + }, + }, + "test_model2": { + "missing": { + "sVcAcCtrl_D_Elac": {"SPA"}, + "sVcAc_D_Air": {"SPA"}, + "sVcAc_D_Cool": {"SPA"}, + } + }, + } + }, + "never_active_signals": { + "test_model": [ + "sVcNeverActiveOne_B_SomethingFalse", + "sVcNeverActiveTwo_B_SomethingFalse", + ] + }, + }, + } + expected_output_missing = { + "test_model": { + "sVcAcCtrl_D_ElacDiagcFb": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_AirCondCmpsrStats": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_CoolgForHvBattSts": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "signal_B_dummytestingSts": [{"GEP3_BEV"}], + }, + "test_model1": { + "sVcAcCtrl_D_Elac": [{"VEP"}], + "sVcAc_D_Air": [{"VEP"}], + "sVcAc_D_Cool": [{"VEP"}], + }, + "test_model2": { + "sVcAcCtrl_D_Elac": [{"SPA"}], + "sVcAc_D_Air": [{"SPA"}], + "sVcAc_D_Cool": [{"SPA"}], + }, + } + expected_output_unused = { + "test_model": { + "sVcAcCtrl_D_ElacDiagcFb": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_AirCondCmpsrStats": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + "sVcAc_D_CoolgForHvBattSts": [{"GEP3_BEV"}, {"VED"}, {"SPA"}], + }, + "test_model1": { + "ElacDiagcFb": [{"VEP"}], + "AirCondCmpsrStats": [{"VEP"}], + "CoolgForHvBattSts": [{"VEP"}], + }, + } + expected_output_never_active = { + "test_model": { + "sVcNeverActiveOne_B_SomethingFalse": [{"SPA"}], + "sVcNeverActiveTwo_B_SomethingFalse": [{"SPA"}], + } + } + + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency.signal_inconsistency_results = signal_inconsistency_results + ( + output_missing, + output_unused, + output_never_active, + ) = signal_inconsistency._sort_internal_inconsistency_by_model() + + self.assertDictEqual(output_missing, expected_output_missing) + self.assertEqual(output_unused, expected_output_unused) + self.assertDictEqual(output_never_active, expected_output_never_active) + + def test_merge_tuple_list(self): + """Test _merge_tuple_list""" + test_data = { + "test_model": [ + ("signal1", {"GEP3_HEP7"}), + ("signal1", {"VED4_GEN3"}), + ("signal2", {"GEP3_HEP7"}), + ], + "test_model2": [ + ("sig1", {"GEP3_HEP7"}), + ("sig2", {"VED4_GEN3"}), + ("sig1", {"SPA"}), + ], + "test_model3": [("si1", {"GEP3"}), ("si1", {"VED4"}), ("si1", {"GEP3"})], + } + + exptected_result = { + "test_model": { + "signal1": [{"GEP3_HEP7"}, {"VED4_GEN3"}], + "signal2": [{"GEP3_HEP7"}], + }, + "test_model2": {"sig1": [{"GEP3_HEP7"}, {"SPA"}], "sig2": [{"VED4_GEN3"}]}, + "test_model3": {"si1": [{"GEP3"}, {"VED4"}, {"GEP3"}]}, + } + + res = SignalInconsistency(TestSignalInconsistency._args)._merge_tuple_list( + test_data + ) + self.assertDictEqual(res, exptected_result) + + def test_aggregate_inports(self): + """Test aggregate_inports""" + per_unit_cfgs = { + "GEP": { + "VcAcCtrl": { + "inports": { + "TEST_SIG1": {}, + "TEST_SIG2": {}, + "VcAcCtrl.SIG_GEP": {}, + } + } + }, + "VED": { + "VcAcCtrl": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "SIG_VED": {}} + }, + "MDL_VED": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "MDL_VED.SIG_VED": {}} + }, + }, + "VEP": { + "VcAcCtrl": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "UNIQUE_VEP": {}} + }, + "MDL_VEP": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "MDL_VEP.SIG_VEP": {}} + }, + }, + } + + expected_result = { + "SIG_VED", + "TEST_SIG1", + "TEST_SIG2", + "VcAcCtrl.SIG_GEP", + "MDL_VED.SIG_VED", + "MDL_VEP.SIG_VEP", + "UNIQUE_VEP", + } + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency.per_unit_cfgs = per_unit_cfgs + result = signal_inconsistency.aggregate_model_inports() + self.assertEqual(expected_result, result) + + @patch("pybuild.signal_interfaces.CsvSignalInterfaces") + def test_aggregate_supplier_inports(self, mock): + """Test aggregate external outports""" + mock_instance = mock.return_value + + def side_effect_get_external_outputs(): + out = { + "EMS-Output": {"1sig1": {}, "1sig11": {}}, + "CAN-Output": {"1sig22": {}, "1sig23": {}}, + } + return out + + mock_instance.get_external_outputs = MagicMock( + side_effect=side_effect_get_external_outputs + ) + + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency.signal_ifs = {"prj1": mock_instance} + + result = signal_inconsistency.aggregate_supplier_inports() + expected_result = {"1sig1", "1sig11", "1sig22", "1sig23"} + self.assertEqual(result, expected_result) + + def test_check_unconsumed_files1(self): + """Test exit code when all signals in unconsumed.csv is being consumed""" + skip_all = {"mdl1": {"sig_1"}, "mdl2": {"sig_2", "sig_22"}, "mdl3": {"sig_3"}} + TestSignalInconsistency._sig_incons.get_consumer_int = MagicMock( + return_value=[("mdl1", "sig1")] + ) + TestSignalInconsistency._sig_incons.get_consumer_ext = MagicMock( + return_value=[("", "")] + ) + TestSignalInconsistency._sig_incons.mdl_is_producer_in_prj = MagicMock( + return_value=True + ) + TestSignalInconsistency._sig_incons.fetch_signals_to_skip = MagicMock( + return_value=skip_all + ) + result, _ = TestSignalInconsistency._sig_incons.check_unconsumed_files( + TestSignalInconsistency._used_inports, set() + ) + self.assertEqual(result, EXIT_CODE_INCORRECT_CSV) + TestSignalInconsistency._sig_incons.get_consumer_int.assert_called() + TestSignalInconsistency._sig_incons.get_consumer_ext.assert_not_called() + + def test_check_unconsumed_files_2(self): + """Test exit code when one signal in unconsumed.csv is being consumed""" + skip_one = {"mdl1": {"sig_1"}} + TestSignalInconsistency._sig_incons.get_consumer_int = MagicMock( + return_value=[("mdl1", "sig1")] + ) + TestSignalInconsistency._sig_incons.get_consumer_ext = MagicMock( + return_value=[("", "")] + ) + TestSignalInconsistency._sig_incons.mdl_is_producer_in_prj = MagicMock( + return_value=True + ) + TestSignalInconsistency._sig_incons.fetch_signals_to_skip = MagicMock( + return_value=skip_one + ) + result, _ = TestSignalInconsistency._sig_incons.check_unconsumed_files( + TestSignalInconsistency._used_inports, set() + ) + self.assertEqual(result, EXIT_CODE_INCORRECT_CSV) + TestSignalInconsistency._sig_incons.get_consumer_ext.assert_not_called() + + def test_check_unconsumed_files_3(self): + """Test exit code when unconsumed.csv files are empty""" + TestSignalInconsistency._sig_incons.get_consumer_ext = MagicMock( + return_value=[("", "")] + ) + TestSignalInconsistency._sig_incons.fetch_signals_to_skip = MagicMock( + return_value={} + ) + result, _ = TestSignalInconsistency._sig_incons.check_unconsumed_files( + TestSignalInconsistency._used_inports, set() + ) + self.assertEqual(result, EXIT_CODE_OK) + TestSignalInconsistency._sig_incons.get_consumer_ext.assert_not_called() + + def test_check_unconsumed_files_4(self): + """Test exit code is returned if unconsumed.csv files are empty""" + skip_none1 = {"mdl1": {"s"}, "mdl2": {"si", "sig"}, "mdl3": {"sig_"}} + TestSignalInconsistency._sig_incons.get_consumer_ext = MagicMock( + return_value=[("", "")] + ) + TestSignalInconsistency._sig_incons.fetch_signals_to_skip = MagicMock( + return_value=skip_none1 + ) + result, _ = TestSignalInconsistency._sig_incons.check_unconsumed_files( + TestSignalInconsistency._used_inports, set() + ) + self.assertEqual(result, EXIT_CODE_OK) + TestSignalInconsistency._sig_incons.get_consumer_ext.assert_not_called() + + def test_check_unconsumed_files_5(self): + """Test exit code only external signals""" + used_ext_outports = {"sig1_ext", "sig2_ext", "sig3_ext"} + signal_inconsistency1 = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency1.mdl_is_producer_in_prj = MagicMock(return_value=True) + signal_inconsistency1.fetch_signals_to_skip = MagicMock( + return_value=TestSignalInconsistency._skip_all_ext + ) + signal_inconsistency1.get_consumer_int = MagicMock(return_value=[("", "")]) + signal_inconsistency1.get_consumer_ext = MagicMock(return_value=[("", "")]) + result, _ = signal_inconsistency1.check_unconsumed_files( + set(), used_ext_outports + ) + self.assertEqual(result, EXIT_CODE_INCORRECT_CSV) + signal_inconsistency1.get_consumer_int.assert_not_called() + signal_inconsistency1.get_consumer_ext.assert_called() + + def test_check_unconsumed_files_6(self): + """Test exit code no internal inports and no external outports""" + signal_inconsistency2 = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency2.get_consumer_int = MagicMock(return_value=[("", "")]) + signal_inconsistency2.get_consumer_ext = MagicMock(return_value=[("", "")]) + signal_inconsistency2.mdl_is_producer_in_prj = MagicMock(return_value=True) + signal_inconsistency2.fetch_signals_to_skip = MagicMock( + return_value=TestSignalInconsistency._skip_all_ext + ) + result, _ = signal_inconsistency2.check_unconsumed_files(set(), set()) + self.assertEqual(result, EXIT_CODE_OK) + signal_inconsistency2.get_consumer_int.assert_not_called() + signal_inconsistency2.get_consumer_ext.assert_not_called() + + def test_get_consumer_int(self): + """Test get consumer int""" + per_unit_cfgs = { + "GEP": { + "VcAcCtrl": { + "inports": { + "TEST_SIG1": {}, + "TEST_SIG2": {}, + "VcAcCtrl.SIG_GEP": {}, + } + } + }, + "VED": { + "VcAcCtrl": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "SIG_VED": {}} + }, + "MDL_VED": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "MDL_VED.SIG_VED": {}} + }, + }, + "VEP": { + "VcAcCtrl": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "UNIQUE_VEP": {}} + }, + "MDL_VEP": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "MDL_VEP.SIG_VEP": {}} + }, + }, + } + + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency.per_unit_cfgs = per_unit_cfgs + result = signal_inconsistency.get_consumer_int("MDL_VEP.SIG_VEP") + mdl, prj = result[0] # list with tuples + self.assertEqual(mdl, "MDL_VEP") + self.assertEqual(prj, "VEP") + + expected_result = [ + ("VcAcCtrl", "GEP"), + ("VcAcCtrl", "VED"), + ("MDL_VED", "VED"), + ("VcAcCtrl", "VEP"), + ("MDL_VEP", "VEP"), + ] + result = signal_inconsistency.get_consumer_int("TEST_SIG2") + self.assertEqual(result, expected_result) + + @patch("pybuild.signal_interfaces.CsvSignalInterfaces") + def test_get_consumer_ext(self, mock): + """Test aggregate external outports""" + mock_instance = mock.return_value + + def side_effect_get_external_outputs(prj): + out = { + "prj1": { + "EMS-Output": {"1sig1": {}, "1sig11": {}}, + "CAN-Output": {"1sig22": {}, "1sig23": {}}, + }, + "prj2": { + "LIN-Output": {"2sig1": {}, "2sig11": {}}, + "CAN-Output": {"2sig22": {}, "2sig23": {}}, + }, + "prj3": { + "Private CAN-Output": {"1sig1": {}, "3sig11": {}}, + "EMS-Output": {"3sig22": {}, "3sig23": {}}, + }, + } + return out[prj] + + mock_instance.get_external_outputs = MagicMock( + side_effect=side_effect_get_external_outputs + ) + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency.signal_ifs = { + "prj1": mock_instance, + "prj2": mock_instance, + "prj3": mock_instance, + } + result = signal_inconsistency.get_consumer_ext("1sig1") + expected_result = [("EMS-Output", "prj1"), ("Private CAN-Output", "prj3")] + self.assertEqual(result, expected_result) + + def test_mdl_is_producer_in_prj(self): + """Test mdl is producing signal in project""" + per_unit_cfgs = { + "GEP": { + "VcAcCtrl": { + "outports": { + "TEST_SIG1": {}, + "TEST_SIG2": {}, + "VcAcCtrl.SIG_GEP": {}, + } + } + }, + "VED": { + "VcAcCtrl": { + "outports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "SIG_VED": {}} + }, + "MDL_VED": { + "outports": { + "TEST_SIG1": {}, + "TEST_SIG2": {}, + "MDL_VED.SIG_VED": {}, + } + }, + }, + "VEP": { + "VcAcCtrl": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "UNIQUE_VEP": {}} + }, + "MDL_VEP": { + "inports": {"TEST_SIG1": {}, "TEST_SIG2": {}, "MDL_VEP.SIG_VEP": {}} + }, + }, + } + + signal_inconsistency = SignalInconsistency(TestSignalInconsistency._args1) + signal_inconsistency.per_unit_cfgs = per_unit_cfgs + # Model is producer + result = signal_inconsistency.mdl_is_producer_in_prj( + "VcAcCtrl", "VED", "TEST_SIG1" + ) + self.assertEqual(result, True) + + # Model is not producer + result = signal_inconsistency.mdl_is_producer_in_prj( + "VcAcCtrl", "VED", "does_not_exist_signal" + ) + self.assertEqual(result, False) + + # Model does not exist in project + result = signal_inconsistency.mdl_is_producer_in_prj( + "does_not_exist", "VED", "TEST_SIG1" + ) + self.assertEqual(result, False) + + # Project does not exist + result = signal_inconsistency.mdl_is_producer_in_prj( + "VcAcCtrl", "does_not_exist_prj", "TEST_SIG1" + ) + self.assertEqual(result, False) + + # Model does not have outports + result = signal_inconsistency.mdl_is_producer_in_prj( + "VcAcCtrl", "VEP", "TEST_SIG1" + ) + self.assertEqual(result, False) + + def test_get_intersect_exit_code(self): + """Test get_intersect_exit_code""" + test_data = [("a", "a"), ("a", "b"), ("a", "c")] + intersecting_signals = {"sig1", "sig2", "sig3"} + self._sig_incons.get_consumer_int = MagicMock(return_value=test_data) + self._sig_incons.get_consumer_ext = MagicMock(return_value=test_data) + self._sig_incons.mdl_is_producer_in_prj = MagicMock(return_value=True) + + # Testing for internal signals fail. + exit_code_int, _ = self._sig_incons.get_intersect_exit_code( + "mdl", intersecting_signals + ) + self.assertEqual(exit_code_int, EXIT_CODE_INCORRECT_CSV) + + # Testing for external signals fail. + exit_code_ext, _ = self._sig_incons.get_intersect_exit_code( + "mdl", intersecting_signals, False + ) + self.assertEqual(exit_code_ext, EXIT_CODE_INCORRECT_CSV) + + self._sig_incons.mdl_is_producer_in_prj = MagicMock(return_value=False) + # Testing for internal signals success. + exit_code_int, _ = self._sig_incons.get_intersect_exit_code( + "mdl", intersecting_signals + ) + self.assertEqual(exit_code_int, EXIT_CODE_OK) + + # Testing for external signals success. + exit_code_ext, _ = self._sig_incons.get_intersect_exit_code( + "mdl", intersecting_signals, False + ) + self.assertEqual(exit_code_ext, EXIT_CODE_OK) diff --git a/tests/pybuild/test_signal_interfaces_yaml.py b/tests/pybuild/test_signal_interfaces_yaml.py new file mode 100644 index 0000000..af6dd7a --- /dev/null +++ b/tests/pybuild/test_signal_interfaces_yaml.py @@ -0,0 +1,59 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +import os +import unittest + +from pathlib import Path + +from pybuild.signal_interfaces import YamlSignalInterfaces + +BASEDIR = Path(__file__).parent / "cnfg_files/test-repo" +CSP_PROJECT_ROOT = BASEDIR / "Projects/CSP/CATC" + +EXTERNAL_INPUT_SIGNAL = "sVcFioc_Te_AmbTMecRimSnsr" +EXTERNAL_OUTPUT_SIGNAL = "yVcTestTx_B_CircCnctVlvReq" +EXTERNAL_INPUT_MODEL = "VcTestRx" +EXTERNAL_OUTPUT_MODEL = "VcTestTx" + + +class TestYamlSignalInterface(unittest.TestCase): + + def setUp(self): + + project_cfg_file = CSP_PROJECT_ROOT / "ProjectCfg.json" + os.chdir(project_cfg_file.parents[3]) + self.yaml_signal_interface = YamlSignalInterfaces.from_config_file(project_cfg_file) + + def test_get_external_io(self): + normal = self.yaml_signal_interface.get_external_io()[0] + ext_input = normal["input"] + ext_output = normal["output"] + self.assertIn(EXTERNAL_INPUT_SIGNAL, ext_input) + self.assertIn(EXTERNAL_OUTPUT_SIGNAL, ext_output) + + def test_get_external_inputs(self): + external_inputs = self.yaml_signal_interface.get_external_inputs() + ext_output = external_inputs["input"] + self.assertIn(EXTERNAL_INPUT_SIGNAL, ext_output) + + def test_get_external_outputs(self): + external_outputs = self.yaml_signal_interface.get_external_outputs() + ext_output = external_outputs["output"] + self.assertIn(EXTERNAL_OUTPUT_SIGNAL, ext_output) + + def test_check_external_outp(self): + self.yaml_signal_interface._check_external_outp() + result = self.yaml_signal_interface._result + model_inconsistencies = result["sigs"]["ext"]["inconsistent_defs"][EXTERNAL_OUTPUT_MODEL] + self.assertNotIn(EXTERNAL_INPUT_SIGNAL, model_inconsistencies) + + def test_check_external_inp(self): + self.yaml_signal_interface._check_external_inp() + result = self.yaml_signal_interface._result + model_inconsistencies = result["sigs"]["ext"]["inconsistent_defs"][EXTERNAL_INPUT_MODEL] + self.assertNotIn(EXTERNAL_OUTPUT_SIGNAL, model_inconsistencies) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/pybuild/test_signals.py b/tests/pybuild/test_signals.py new file mode 100644 index 0000000..4a175b4 --- /dev/null +++ b/tests/pybuild/test_signals.py @@ -0,0 +1,91 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for Signals class.""" + +import copy +import unittest +from unittest.mock import MagicMock +from pathlib import Path +from pybuild.build_proj_config import BuildProjConfig +from pybuild.signal_interfaces import CsvSignalInterfaces +from .io_cnfg import IO_CNFG_DICT, INPUT_CNFG_DICT, OUTPUT_CNFG_DICT, DBG_CNFG_DICT, DEP_IO_CNFG_DICT + +CNFG_DIR = Path(Path(__file__).parent, 'cnfg_files') + + +class TestSignalsInterfaces(unittest.TestCase): + """Test case for testing the SignalsInterfaces class.""" + + loc_defs = { + 'Enable1': '(Vc_AcReg_B_CodegenPHEV == 1)' + ' && ' + '(Vc_Ac_Ctrl_B_CodeGenTorqueEstOff == 1)' + } + + def setUp(self): + """Load the definition file used for all tests.""" + self._build_cfg = MagicMock(config_set=BuildProjConfig) + prj_cnf_dir = str(CNFG_DIR) + self._build_cfg.get_prj_cfg_dir = MagicMock(return_value=prj_cnf_dir) + if_cnf_dir = str(Path(CNFG_DIR, 'ActiveInterfaces')) + self._build_cfg.get_if_cfg_dir = MagicMock(return_value=if_cnf_dir) + + self._build_cfg.get_prj_config = MagicMock(return_value='VEP4_GENIII') + self.vep = copy.deepcopy(self._build_cfg) + + self._build_cfg.get_prj_config = MagicMock(return_value='VED4_GENIII') + self.ved = copy.deepcopy(self._build_cfg) + + self._unit_cfg = MagicMock() + # Fixa unit config nedan!!! + self._unit_cfg.get_per_cfg_unit_cfg = MagicMock(return_value={}) + self._unit_cfg.get_local_defs = MagicMock(return_value=self.loc_defs) + self._signal_ifs = CsvSignalInterfaces(self.ved, self._unit_cfg) + self.maxDiff = None + + def test_get_external_inputs_cfg1(self): + """Test that the external inputs method work for VED4_GENIII.""" + signal_ifs = CsvSignalInterfaces(self.ved, self._unit_cfg) + result = signal_ifs.get_external_inputs() + expected_res = INPUT_CNFG_DICT['VED4_GENIII'] + self.assertDictEqual(result, expected_res) + + def test_get_external_inputs_cfg2(self): + """Test that the external inputs method work for VEP4_GENIII. + + Furthermore, check that the default project can be overridden with + the argument to get_external_inputs(conf). + """ + signal_ifs = CsvSignalInterfaces(self.vep, self._unit_cfg) + result = signal_ifs.get_external_inputs() + expected_res = INPUT_CNFG_DICT['VEP4_GENIII'] + self.assertDictEqual(result, expected_res) + + def test_get_external_outputs_cfg1(self): + """Test that the external outputs method work for VED4_GENIII.""" + signal_ifs = CsvSignalInterfaces(self.ved, self._unit_cfg) + result = signal_ifs.get_external_outputs() + expected_res = OUTPUT_CNFG_DICT['VED4_GENIII'] + self.assertDictEqual(result, expected_res) + + def test_get_external_outputs_cfg2(self): + """Test that the external outputs method work for VEP4_GENIII.""" + signal_ifs = CsvSignalInterfaces(self.vep, self._unit_cfg) + result = signal_ifs.get_external_outputs() + expected_res = OUTPUT_CNFG_DICT['VEP4_GENIII'] + self.assertDictEqual(result, expected_res) + + def test_get_external_io(self): + """Return a tuple with nrm, dep, dbg dicts.""" + signal_ifs = CsvSignalInterfaces(self.ved, self._unit_cfg) + nrm_dict, dep_dict, _, dbg_dict = signal_ifs.get_external_io() + self.assertDictEqual(nrm_dict, IO_CNFG_DICT['VED4_GENIII']) + self.assertDictEqual(dep_dict, DEP_IO_CNFG_DICT['VED4_GENIII']) + self.assertDictEqual(dbg_dict, DBG_CNFG_DICT['VED4_GENIII']) + # Test another configuration + signal_ifs = CsvSignalInterfaces(self.vep, self._unit_cfg) + nrm_dict, dep_dict, _, dbg_dict = signal_ifs.get_external_io() + self.assertDictEqual(nrm_dict, IO_CNFG_DICT['VEP4_GENIII']) + self.assertDictEqual(dep_dict, DEP_IO_CNFG_DICT['VEP4_GENIII']) + self.assertDictEqual(dbg_dict, DBG_CNFG_DICT['VEP4_GENIII']) diff --git a/tests/pybuild/test_unit_configs.py b/tests/pybuild/test_unit_configs.py new file mode 100644 index 0000000..a21d2f4 --- /dev/null +++ b/tests/pybuild/test_unit_configs.py @@ -0,0 +1,472 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit tests for FeatureConfigs.""" +import unittest +from unittest.mock import MagicMock +from pathlib import Path +from copy import deepcopy + +from pybuild.unit_configs import UnitConfigs +from pybuild.build_proj_config import BuildProjConfig +from pybuild.feature_configs import FeatureConfigs + +CNFG_DIR = Path(Path(__file__).parent, 'cnfg_files') + + +def check_if_active_in_config(config_def): + """Check if unit is active.""" + if config_def == ['not_in_config']: + return False + return True + + +class TestUnitConfigs(unittest.TestCase): + """Test case for testing the UnitConfigs class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.mock_build_cfg = MagicMock(spec_set=BuildProjConfig) + self.mock_build_cfg.get_unit_cfg_dirs.return_value = { + 'VcAesSupM__gen3': str(Path(CNFG_DIR, 'unit_cfgs'))} + self.mock_build_cfg.get_local_defs_name.return_value = "*_LocalDefs.h" + self.mock_build_cfg.get_feature_conf_header_name.return_value = "VcCodeSwDefines.h" + self.mock_build_cfg.get_included_units.return_value = ['VcAesSupM__gen3'] + + self.mock_feat_cfg = MagicMock(spec_set=FeatureConfigs) + self.mock_feat_cfg.check_if_active_in_config = check_if_active_in_config + + UnitConfigs.clear_log() + self.unit_cfgs = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + + self.expected_unit_cfgs = { + 'VcAesSupM__gen3': { + 'version': '0.2.1', + 'calib_consts': { + 'cVcAesSupM_B_SupMonrHiBypFiMPerm': { + 'class': 'CVC_CAL', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Switch to bypass FiM permission ' + 'supercharger high boost monitor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': '1', + 'type': 'Bool', + 'unit': ''} + }, + 'core': { + 'Events': { + 'VcEvSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPF1'}, + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPP1'}], + 'API_blk_type': 'Dem_SetEventStatus Pre-Passed', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'FIDs': { + 'VcFiSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM' + '/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/' + 'FiM_GetFunctionPermission'}], + 'API_blk_type': 'FiM_GetFunctionPermission', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond', + 'type': '-', + 'unit': '-'}}, + 'IUMPR': {}, + 'Ranking': { + 'VcRvSupChrPMdlPlausHi': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost/Vc_SetRanking'}], + 'API_blk_type': 'Vcc_SetRanking', + 'blk_name': 'NamedConstant1', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'TstId': {} + }, + 'dids': {}, + 'inports': { + 'sVcEc_p_Amb': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'Ambient pressure sensor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcXx_insignal3', + 'lsb': 1, + 'max': 200, + 'min': 0, + 'name': 'sVcEc_p_Amb', + 'offset': 0, + 'type': 'Float32', + 'unit': 'kPa'}, + 'yVcEc_B_ObdExe': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'OBD execution flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcXx_insignal1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcEc_B_ObdExe', + 'offset': 0, + 'type': 'Bool', + 'unit': '-'}}, + 'local_vars': { + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Over pressure downstream supercharger', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': '1', + 'type': 'Float32', + 'unit': 'kPa'}, + 'rVcAesSupM_p_SupMonrSCTarDly': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Low pass filtered supercharger ' + 'target pressure', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2', + 'lsb': '1', + 'max': '300', + 'min': '0', + 'offset': '0', + 'width': '1', + 'type': 'Float32', + 'unit': 'kPa'}}, + 'nvm': {}, + 'outports': { + 'yVcAesSupM_B_SupChrgrErr': { + 'class': 'CVC_DISP', + 'configs': ['all'], + 'description': 'Supercharger Peak Pressure engine ' + 'protection activation flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcAesAct_posn_EgrTar1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcAesSupM_B_SupChrgrErr', + 'offset': 0, + 'type': 'Bool', + 'unit': '%'}}, + 'pre_procs': ['Vc_Aes_SupM_B_CodeGenSprChrg'] + } + } + + def test_unit_config_init_args(self): + """Check that constructor arguments are validated.""" + # Call with arguments reversed + self.assertRaises(TypeError, UnitConfigs, self.mock_feat_cfg, self.mock_build_cfg) + + def test_unit_config_init_valid(self): + """Check that no errors are logged with valid data.""" + ucnf = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + self.assertIsInstance(ucnf, UnitConfigs) + self.assertEqual(UnitConfigs.get_nbr_problems(), {'critical': 0, 'warning': 0}) + + def test_unit_config_init_invalid_cfg(self): + """Check that errors are logged with invalid build config.""" + self.mock_build_cfg.get_included_units.return_value = ['VcAesSupM__gen3', 'dummy_unit'] + ucnf = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + self.assertIsInstance(ucnf, UnitConfigs) + self.assertEqual(UnitConfigs.get_nbr_problems(), {'critical': 1, 'warning': 0}) + + def test_unit_config_init_invalid_files(self): + """Check that errors are logged with invalid config files.""" + self.mock_build_cfg.get_unit_cfg_dirs.return_value = { + 'VcAesSupM__gen3': str(Path(CNFG_DIR, 'unit_cfgs')), + ' invalid name': str(Path(CNFG_DIR, 'invalid_unit_cfgs')), + 'InvalidConfig': str(Path(CNFG_DIR, 'invalid_unit_cfgs')), + 'InvalidJsonData': str(Path(CNFG_DIR, 'invalid_unit_cfgs')), + } + ucnf = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + self.assertIsInstance(ucnf, UnitConfigs) + self.assertEqual(UnitConfigs.get_nbr_problems(), {'critical': 1, 'warning': 0}) + + def test_unit_config_init_invalid_unit_files(self): + """Check that errors are logged with invalid units and config files.""" + self.mock_build_cfg.get_included_units.return_value = ['VcAesSupM__gen3', 'InvalidConfig'] + self.mock_build_cfg.get_unit_cfg_dirs.return_value = { + 'VcAesSupM__gen3': str(Path(CNFG_DIR, 'unit_cfgs')), + ' invalid name': str(Path(CNFG_DIR, 'invalid_unit_cfgs')), + 'InvalidConfig': str(Path(CNFG_DIR, 'invalid_unit_cfgs')), + 'InvalidJsonData': str(Path(CNFG_DIR, 'invalid_unit_cfgs')), + } + ucnf = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + self.assertIsInstance(ucnf, UnitConfigs) + self.assertEqual(UnitConfigs.get_nbr_problems(), {'critical': 1, 'warning': 2}) + + def test_per_unit_configs(self): + """Check that unit cfgs are parsed and filtered correctly. Project VEP4_GENIII.""" + result = self.unit_cfgs.get_per_unit_cfg() + self.maxDiff = None + self.assertEqual(result, self.expected_unit_cfgs) + + def test_all_unit_configs(self): + """Check that unit cfgs are parsed and filtered correctly. All projects.""" + result = self.unit_cfgs.get_per_unit_cfg_total() + self.maxDiff = None + handle = 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/1_SupMonr/11_SupChrgrSys/111_SignalCalc/Sum5' + addition = { + 'rVcAesSupM_p_SupMonrPDif': { + 'class': 'CVC_DISP', + 'configs': ['not_in_config'], + 'description': 'Supercharger ' + 'actual ' + 'and ' + 'target ' + 'pressure ' + 'difference', + 'handle': handle, + 'lsb': '1', + 'max': '300', + 'min': ' 300', + 'offset': '0', + 'type': 'Float32', + 'unit': 'kPa', + 'width': '1'}, + } + expected = deepcopy(self.expected_unit_cfgs) + expected['VcAesSupM__gen3']['local_vars'].update(addition) + self.assertDictEqual(result, expected) + + def test_per_cfg_configs(self): + """Check that unit cfgs are re-formatted and filtered correctly. Project VEP4_GENIII.""" + result = self.unit_cfgs.get_per_cfg_unit_cfg() + expected = { + 'version': self.expected_unit_cfgs, + 'calib_consts': { + 'cVcAesSupM_B_SupMonrHiBypFiMPerm': { + 'VcAesSupM__gen3': { + 'class': 'CVC_CAL', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Switch to bypass FiM permission supercharger ' + 'high boost monitor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/112_EnaCond/B_SupMonrHiBypFiMPerm', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': '1', + 'type': 'Bool', + 'unit': ''}}}, + 'core': { + 'VcEvSupChrPMdlPlausHi': { + 'VcAesSupM__gen3': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPF1'}, + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost/Dem_SetEventStatusPP1'}], + 'API_blk_type': 'Dem_SetEventStatus Pre-Passed', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/114_InformationStorage/' + '141_CoreHiBoost', + 'type': '-', + 'unit': '-'}}, + 'VcFiSupChrPMdlPlausHi': { + 'VcAesSupM__gen3': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM' + '/VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond/' + 'FiM_GetFunctionPermission'}], + 'API_blk_type': 'FiM_GetFunctionPermission', + 'blk_name': 'NamedConstant2', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/112_EnaCond', + 'type': '-', + 'unit': '-'}}, + 'VcRvSupChrPMdlPlausHi': { + 'VcAesSupM__gen3': { + 'API_blk': [ + {'config': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'path': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost/Vc_SetRanking'}], + 'API_blk_type': 'Vcc_SetRanking', + 'blk_name': 'NamedConstant1', + 'class': '-', + 'description': '-', + 'lsb': '-', + 'max': '-', + 'min': '-', + 'offset': '-', + 'subsystem': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'VcAesSupM/1_SupMonr/11_SupChrgrSys/' + '114_InformationStorage/141_CoreHiBoost', + 'type': '-', + 'unit': '-'}} + }, + 'inports': { + 'sVcEc_p_Amb': { + 'VcAesSupM__gen3': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'Ambient pressure sensor', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcXx_insignal3', + 'lsb': 1, + 'max': 200, + 'min': 0, + 'name': 'sVcEc_p_Amb', + 'offset': 0, + 'type': 'Float32', + 'unit': 'kPa'}}, + 'yVcEc_B_ObdExe': { + 'VcAesSupM__gen3': { + 'class': 'CVC_EXT', + 'configs': [['Vc_Aes_SupM_B_CodeGenSprChrg']], + 'description': 'OBD execution flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcXx_insignal1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcEc_B_ObdExe', + 'offset': 0, + 'type': 'Bool', + 'unit': '-'}}}, + 'local_vars': { + 'rVcAesSupM_p_SupChrgrPDsAtmDiff': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Over pressure downstream supercharger', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '2_EngProtn/21_SupChrgrPPeak/211_PPeakTest/Sum5', + 'lsb': '1', + 'max': ' ', + 'min': ' ', + 'offset': '0', + 'width': '1', + 'type': 'Float32', + 'unit': 'kPa'}}, + 'rVcAesSupM_p_SupMonrSCTarDly': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['Vc_Aes_SupM_B_CodeGenSprChrg'], + 'description': 'Low pass filtered ' + 'supercharger target pressure', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/VcAesSupM/' + '1_SupMonr/11_SupChrgrSys/111_SignalCalc/FirstOrderFilter/Sum2', + 'lsb': '1', + 'max': '300', + 'min': '0', + 'offset': '0', + 'width': '1', + 'type': 'Float32', + 'unit': 'kPa'}}}, + 'outports': { + 'yVcAesSupM_B_SupChrgrErr': { + 'VcAesSupM__gen3': { + 'class': 'CVC_DISP', + 'configs': ['all'], + 'description': 'Supercharger Peak Pressure engine protection ' + 'activation flag', + 'handle': 'VcAesSupM__gen3/VcAesSupM/Subsystem/VcAesSupM/' + 'tlop_VcAesAct_posn_EgrTar1', + 'lsb': 1, + 'max': '-', + 'min': '-', + 'name': 'yVcAesSupM_B_SupChrgrErr', + 'offset': 0, + 'type': 'Bool', + 'unit': '%' + } + } + } + } + self.maxDiff = None + self.assertDictEqual(result, expected) + + def test_if_in_unit_cfg(self): + """Check that symbol existence test is correct.""" + self.assertTrue(self.unit_cfgs.check_if_in_unit_cfg('VcAesSupM__gen3', 'sVcEc_p_Amb')) + self.assertFalse(self.unit_cfgs.check_if_in_unit_cfg('VcAesSupM__gen3', 'dummy_symbol')) + + def test_if_in_per_cfg_unit_cfg(self): + """Check that per project symbol existence test is correct.""" + self.assertTrue(self.unit_cfgs.check_if_in_per_cfg_unit_cfg('core', 'VcRvSupChrPMdlPlausHi')) + self.assertFalse(self.unit_cfgs.check_if_in_per_cfg_unit_cfg('core', 'dummy_symbol')) + + def test_code_generators(self): + """Check that code generators are correctly identified.""" + unit_cfgs = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + self.assertEqual(unit_cfgs.code_generators, {'target_link'}) + self.assertEqual(unit_cfgs.base_types_headers, '#include "tl_basetypes.h"\n') + + def test_code_generators_ec(self): + """Check that code generators are correctly identified for embedded coder.""" + mock_build_cfg = self.mock_build_cfg + mock_build_cfg.get_unit_cfg_dirs.return_value = { + 'VcAesSupM__gen3': str(Path(CNFG_DIR, 'unit_cfgs_ec'))} + unit_cfgs = UnitConfigs(self.mock_build_cfg, self.mock_feat_cfg) + self.assertEqual(unit_cfgs.code_generators, {'embedded_coder'}) + self.assertEqual(unit_cfgs.base_types_headers, '#include "rtwtypes.h"\n') diff --git a/tests/pybuild/test_user_defined_types.py b/tests/pybuild/test_user_defined_types.py new file mode 100644 index 0000000..380daf4 --- /dev/null +++ b/tests/pybuild/test_user_defined_types.py @@ -0,0 +1,924 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for UserDefinedTypes class.""" + +import unittest +from pathlib import Path +from unittest.mock import patch, mock_open, MagicMock +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.user_defined_types import UserDefinedTypes + +REF_DIR = Path(Path(__file__).parent, 'reference_files') +CFG_DIR = Path(Path(__file__).parent, 'cnfg_files') +INTERFACE_ENUM = { + "EnumTest": [ + { + "item": "ClimaOff", + "in": "ENUMTEST_CLIMAOFF", + "out": "namespace::types::EnumTest::ClimaOff" + }, + { + "item": "ClimaHeatgToHvacAndHvBatt", + "in": "ENUMTEST_CLIMAHEATGTOHVACANDHVBATT", + "out": "namespace::types::EnumTest::ClimaHeatgToHvacAndHvBatt" + }, + { + "item": "ClimaHeatgToHvBatt", + "in": "ENUMTEST_CLIMAHEATGTOHVBATT", + "out": "namespace::types::EnumTest::ClimaHeatgToHvBatt" + }, + { + "item": "ClimaHeatgToHvac", + "in": "ENUMTEST_CLIMAHEATGTOHVAC", + "out": "namespace::types::EnumTest::ClimaHeatgToHvac" + }, + { + "item": "ClimaFlow", + "in": "ENUMTEST_CLIMAFLOW", + "out": "namespace::types::EnumTest::ClimaFlow" + }, + { + "item": "Degas", + "in": "ENUMTEST_DEGAS", + "out": "namespace::types::EnumTest::Degas" + }, + { + "item": "FailSafe", + "in": "ENUMTEST_FAILSAFE", + "out": "namespace::types::EnumTest::FailSafe" + }, + { + "default": "ClimaOff", + "in": "ENUMTEST_CLIMAOFF", + "out": "namespace::types::EnumTest::ClimaOff" + } + ] +} +INTERFACE_UNIT_CFG = { + "VcTestModel": { + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": {}, + "inports": { + "sVcTestModel_Enm_EnumTest": { + "handle": "Path/To/Block", + "name": "sVcTestModel_Enm_TestEnum", + "configs": "((ALWAYS_ACTIVE))", + "description": "Some description.", + "type": "EnumTest", + "unit": "-,$EnumTest", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1, + "default": "ClimaOff" + }, + "sVcTestModel_Enm_EnumTestTwo": { + "handle": "Path/To/Block", + "name": "sVcTestModel_Enm_EnumTestTwo", + "configs": "((ALWAYS_ACTIVE))", + "description": "Some description.", + "type": "EnumTestTwo", + "unit": "-,$EnumTestTwo", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1, + "default": "ClimaOff" + }, + "sVcTestModel_Enm_EnumTestThree": { + "handle": "Path/To/Block", + "name": "sVcTestModel_Enm_EnumTestThree", + "configs": "((ALWAYS_ACTIVE))", + "description": "Some description.", + "type": "EnumTestThree", + "unit": "-,$EnumTestThree", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1, + "default": "ClimaOff" + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": {}, + "calib_consts": {} + }, + "VcTestModel3": { + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": {}, + "inports": { + "sVcTestModel3_Enm_TestEnum": { + "handle": "Path/To/Block", + "name": "sVcTestModel3_Enm_TestEnum", + "configs": "((ALWAYS_ACTIVE))", + "description": "Some description.", + "type": "EnumTest", + "unit": "-,$EnumTest", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1, + "default": "ClimaOff" + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": {}, + "calib_consts": {} + } +} + + +class TestUserDefinedTypes(unittest.TestCase): + """Test case for testing the UserDefinedTypes class.""" + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfig) + self.build_cfg.get_enum_def_dir = MagicMock(return_value='.') + self.build_cfg.get_root_dir = MagicMock(return_value='.') + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + self.unit_cfg.get_unit_code_generator.return_value = 'target_link' + UserDefinedTypes.clear_log() + + def test_init(self): + """Test normal class initialization. + + NOTE: It is okay for two units to define the same enums/structs, as long as they are consistent. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel': str(Path(REF_DIR, 'SS1', 'test_model')), + 'VcTestModel1': str(Path(REF_DIR, 'SS1', 'test_model1')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + expected_enums = { + 'VcTestModel': { + 'EnumTest': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': None + }, + 'EnumTestTwo': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTWO_COOLGREQ': 0, + 'ENUMTESTTWO_HEATGREQ': 1 + }, + 'default_value': None + }, + 'EnumTestThree': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTHREE_DTELECCOOLG': 0, + 'ENUMTESTTHREE_DTELECPASCOOLG': 1, + 'ENUMTESTTHREE_DTELECHEATG': 2, + 'ENUMTESTTHREE_DTELECPASHEATG': 3, + 'ENUMTESTTHREE_DTELECACTVHEATG': 4, + 'ENUMTESTTHREE_DTELECPASACTVHEATG': 5, + 'ENUMTESTTHREE_DTELECPAS': 6, + 'ENUMTESTTHREE_DEGAS': 7, + 'ENUMTESTTHREE_FAILSAFE': 8 + }, + 'default_value': None + } + }, + 'VcTestModel1': { + 'EnumTest': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': None + }, + 'EnumTestTwo': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTWO_COOLGREQ': 0, + 'ENUMTESTTWO_HEATGREQ': 1 + }, + 'default_value': None + } + } + } + expected__struct_members = { + 'sVcTestModel_D_One': 'Float32', + 'yVcTestModel_B_One': 'Bool' + } + expected_structs = { + 'VcTestModel': { + 'sVcTestModel_Bus_Dummy': { + 'members': expected__struct_members + } + }, + 'VcTestModel1': { + 'sVcTestModel_Bus_Dummy': { + 'members': expected__struct_members + } + } + } + self.assertDictEqual(expected_structs, udt.structs_per_unit) + self.assertDictEqual(expected_enums, udt.enums_per_unit) + self.assertDictEqual({'critical': 0, 'warning': 6}, udt.get_nbr_problems()) + + def test_init_interface_enums(self): + """Test initialization with interface enumerations.""" + self.build_cfg.get_root_dir = MagicMock(return_value=CFG_DIR.resolve()) + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value=INTERFACE_UNIT_CFG) + + # Enum EnumTest not defined in project + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + self.assertDictEqual({'critical': 1, 'warning': 0}, udt.get_nbr_problems()) + result = udt.get_interface_data_types() + self.assertDictEqual({'enums': {}}, result) + udt.clear_log() + + # Enum is defined in project + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel': str(Path(REF_DIR, 'SS1', 'test_model')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + result = udt.get_interface_data_types() + self.assertDictEqual({'enums': INTERFACE_ENUM}, result) + udt.clear_log() + + # Enum is wrong in interface, number of members differ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel3': str(Path(REF_DIR, 'SS1', 'test_model3')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + self.assertDictEqual({'critical': 1, 'warning': 0}, udt.get_nbr_problems()) + result = udt.get_interface_data_types() + self.assertDictEqual({'enums': {}}, result) + udt.clear_log() + + def test_init_multiply_defined_in_unit(self): + """Test initialization when a unit defines the same enum/struct twice, inconsistently. + + NOTE: Multiply defined enums/structs are ignored, old is NOT overwritten. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + expected_structs = { + 'VcTestModel2': { + 'sVcTestModel2_Bus_Dummy': { + 'members': { + 'sVcTestModel2_D_One': 'Float32', + 'yVcTestModel2_B_One': 'Bool' + } + }, + 'sVcTestModel_Bus_Dummy': { + 'members': { + 'sVcTestModel_D_One': 'Float32', + 'yVcTestModel_B_One': 'UInt8' + } + } + } + } + expected_enums = { + 'VcTestModel2': { + 'EnumTest': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': None + }, + 'EnumTestThree': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTHREE_DTELECCOOLG': 0, + 'ENUMTESTTHREE_DTELECPASCOOLG': 1, + 'ENUMTESTTHREE_DTELECHEATG': 2, + 'ENUMTESTTHREE_DTELECPASHEATG': 3, + 'ENUMTESTTHREE_DTELECACTVHEATG': 4, + 'ENUMTESTTHREE_DTELECPASACTVHEATG': 5, + 'ENUMTESTTHREE_DTELECPAS': 6, + 'ENUMTESTTHREE_DEGAS': 7, + 'ENUMTESTTHREE_FAILSAFE': 8, + 'ENUMTESTTHREE_EXTRAVERSUSUNITONE': 9 + }, + 'default_value': None + } + } + } + self.assertDictEqual(expected_enums, udt.enums_per_unit) + self.assertDictEqual(expected_structs, udt.structs_per_unit) + self.assertDictEqual({'critical': 2, 'warning': 4}, udt.get_nbr_problems()) + + def test_init_multiply_defined_in_project(self): + """Test initialization where two units define the same enumeration/struct differently. + + NOTE: Multiply defined enums/structs are ignored, old is NOT overwritten. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel': str(Path(REF_DIR, 'SS1', 'test_model')), + 'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + expected_enums = { + 'VcTestModel': { + 'EnumTest': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': None + }, + 'EnumTestTwo': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTWO_COOLGREQ': 0, + 'ENUMTESTTWO_HEATGREQ': 1 + }, + 'default_value': None + }, + 'EnumTestThree': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTHREE_DTELECCOOLG': 0, + 'ENUMTESTTHREE_DTELECPASCOOLG': 1, + 'ENUMTESTTHREE_DTELECHEATG': 2, + 'ENUMTESTTHREE_DTELECPASHEATG': 3, + 'ENUMTESTTHREE_DTELECACTVHEATG': 4, + 'ENUMTESTTHREE_DTELECPASACTVHEATG': 5, + 'ENUMTESTTHREE_DTELECPAS': 6, + 'ENUMTESTTHREE_DEGAS': 7, + 'ENUMTESTTHREE_FAILSAFE': 8 + }, + 'default_value': None + } + }, + 'VcTestModel2': { + 'EnumTest': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': None + }, + 'EnumTestThree': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTHREE_DTELECCOOLG': 0, + 'ENUMTESTTHREE_DTELECPASCOOLG': 1, + 'ENUMTESTTHREE_DTELECHEATG': 2, + 'ENUMTESTTHREE_DTELECPASHEATG': 3, + 'ENUMTESTTHREE_DTELECACTVHEATG': 4, + 'ENUMTESTTHREE_DTELECPASACTVHEATG': 5, + 'ENUMTESTTHREE_DTELECPAS': 6, + 'ENUMTESTTHREE_DEGAS': 7, + 'ENUMTESTTHREE_FAILSAFE': 8, + 'ENUMTESTTHREE_EXTRAVERSUSUNITONE': 9 + }, + 'default_value': None + } + } + } + expected_structs = { + 'VcTestModel': { + 'sVcTestModel_Bus_Dummy': { + 'members': { + 'sVcTestModel_D_One': 'Float32', + 'yVcTestModel_B_One': 'Bool' + } + } + }, + 'VcTestModel2': { + 'sVcTestModel2_Bus_Dummy': { + 'members': { + 'sVcTestModel2_D_One': 'Float32', + 'yVcTestModel2_B_One': 'Bool' + } + }, + 'sVcTestModel_Bus_Dummy': { + 'members': { + 'sVcTestModel_D_One': 'Float32', + 'yVcTestModel_B_One': 'UInt8' + } + } + } + } + self.assertDictEqual(expected_structs, udt.structs_per_unit) + self.assertDictEqual(expected_enums, udt.enums_per_unit) + self.assertDictEqual({'critical': 4, 'warning': 7}, udt.get_nbr_problems()) + + def test_calculate_underlying_data_type(self): + """Test the _calculate_underlying_data_type method. + + NOTE: This method is part of initializing UserDefinedTypes, however, it shall be tested further. + """ + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + udt.clear_log() # Clear to only count warnings/criticals regarding underlying data types + + # 8 bit integers + self.unit_cfg.get_unit_code_generator.return_value = 'target_link' + expected = 'Int8' + enum_members = [('MIN_VALUE', -1), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + + expected = 'UInt8' + enum_members = [('MIN_VALUE', 0), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + self.unit_cfg.get_unit_code_generator.return_value = 'embedded_coder' + expected = 'int8_T' + enum_members = [('MIN_VALUE', -1), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + expected = 'uint8_T' + enum_members = [('MIN_VALUE', 0), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + # 16 bit integers + self.unit_cfg.get_unit_code_generator.return_value = 'target_link' + expected = 'Int16' + enum_members = [('MIN_VALUE', -200), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + expected = 'UInt16' + enum_members = [('MIN_VALUE', 0), ('FILLER', 0), ('MAX_VALUE', 256)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + self.unit_cfg.get_unit_code_generator.return_value = 'embedded_coder' + expected = 'int16_T' + enum_members = [('MIN_VALUE', -200), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + expected = 'uint16_T' + enum_members = [('MIN_VALUE', 0), ('FILLER', 0), ('MAX_VALUE', 256)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 0, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + # Invalid sizes + self.unit_cfg.get_unit_code_generator.return_value = 'target_link' + expected = None + enum_members = [('MIN_VALUE', -32769), ('FILLER', 0), ('MAX_VALUE', 1)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 1, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + expected = None + enum_members = [('MIN_VALUE', -32768), ('FILLER', 0), ('MAX_VALUE', 32768)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 1, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + self.unit_cfg.get_unit_code_generator.return_value = 'embedded_coder' + expected = None + enum_members = [('MIN_VALUE', -200), ('FILLER', 0), ('MAX_VALUE', 32768)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 1, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + expected = None + enum_members = [('MIN_VALUE', 0), ('FILLER', 0), ('MAX_VALUE', 65536)] + underlying_data_type = udt._calculate_underlying_data_type('dummy_unit', 'dummy_enum_name', enum_members) + self.assertEqual(expected, underlying_data_type) + self.assertDictEqual({'critical': 1, 'warning': 0}, udt.get_nbr_problems()) + udt.clear_log() + + def test_generate_enum_header_file_tl(self): + """Test the _generate_target_link_enum_header_file method. + + NOTE: This method is part of UserDefinedTypes.generate_common_header_files, which is not tested on its own. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2'))} + ) + unit_cfg = self.unit_cfg + type(unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + udt = UserDefinedTypes(self.build_cfg, unit_cfg) + + result = [] + m_open = mock_open() + m_open.return_value.write = result.append + with patch.object(Path, 'open', m_open, create=True): + udt._generate_enum_header_file(Path("VcEnumerations.h")) + + expected = [ + '#ifndef VCENUMERATIONS_H\n', + '#define VCENUMERATIONS_H\n', + '#include "tl_basetypes.h"\n', + '/* VCC Enumerations */\n', + '\n', + 'typedef enum EnumTest_tag {\n', + " ENUMTEST_CLIMAOFF = 0, \n", + " ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, \n", + " ENUMTEST_CLIMAHEATGTOHVBATT = 2, \n", + " ENUMTEST_CLIMAHEATGTOHVAC = 3, \n", + " ENUMTEST_CLIMAFLOW = 4, \n", + " ENUMTEST_DEGAS = 5, \n", + " ENUMTEST_FAILSAFE = 6 \n", + '} EnumTest;\n', + '\n', + 'typedef enum EnumTestThree_tag {\n', + " ENUMTESTTHREE_DTELECCOOLG = 0, \n", + " ENUMTESTTHREE_DTELECPASCOOLG = 1, \n", + " ENUMTESTTHREE_DTELECHEATG = 2, \n", + " ENUMTESTTHREE_DTELECPASHEATG = 3, \n", + " ENUMTESTTHREE_DTELECACTVHEATG = 4, \n", + " ENUMTESTTHREE_DTELECPASACTVHEATG = 5, \n", + " ENUMTESTTHREE_DTELECPAS = 6, \n", + " ENUMTESTTHREE_DEGAS = 7, \n", + " ENUMTESTTHREE_FAILSAFE = 8, \n", + " ENUMTESTTHREE_EXTRAVERSUSUNITONE = 9 \n", + '} EnumTestThree;\n', + '#endif /* VCENUMERATIONS_H */\n' + ] + + self.assertEqual("".join(result), "".join(expected)) + + def test_generate_enum_header_file_ec(self): + """Test the _generate_target_link_enum_header_file method. + + NOTE: This method is part of UserDefinedTypes.generate_common_header_files, which is not tested on its own. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2'))} + ) + unit_cfg = self.unit_cfg + type(unit_cfg).base_types_headers = '#include "rtwtypes.h"\n' + udt = UserDefinedTypes(self.build_cfg, unit_cfg) + + result = [] + m_open = mock_open() + m_open.return_value.write = result.append + with patch.object(Path, 'open', m_open, create=True): + udt._generate_enum_header_file(Path("VcEnumerations.h")) + + expected = [ + '#ifndef VCENUMERATIONS_H\n', + '#define VCENUMERATIONS_H\n', + '#include "rtwtypes.h"\n', + '/* VCC Enumerations */\n', + '\n', + 'typedef enum EnumTest_tag {\n', + " ENUMTEST_CLIMAOFF = 0, \n", + " ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, \n", + " ENUMTEST_CLIMAHEATGTOHVBATT = 2, \n", + " ENUMTEST_CLIMAHEATGTOHVAC = 3, \n", + " ENUMTEST_CLIMAFLOW = 4, \n", + " ENUMTEST_DEGAS = 5, \n", + " ENUMTEST_FAILSAFE = 6 \n", + '} EnumTest;\n', + '\n', + 'typedef enum EnumTestThree_tag {\n', + " ENUMTESTTHREE_DTELECCOOLG = 0, \n", + " ENUMTESTTHREE_DTELECPASCOOLG = 1, \n", + " ENUMTESTTHREE_DTELECHEATG = 2, \n", + " ENUMTESTTHREE_DTELECPASHEATG = 3, \n", + " ENUMTESTTHREE_DTELECACTVHEATG = 4, \n", + " ENUMTESTTHREE_DTELECPASACTVHEATG = 5, \n", + " ENUMTESTTHREE_DTELECPAS = 6, \n", + " ENUMTESTTHREE_DEGAS = 7, \n", + " ENUMTESTTHREE_FAILSAFE = 8, \n", + " ENUMTESTTHREE_EXTRAVERSUSUNITONE = 9 \n", + '} EnumTestThree;\n', + '#endif /* VCENUMERATIONS_H */\n' + ] + self.assertEqual("".join(result), "".join(expected)) + + def test_generate_enum_header_file_mixed(self): + """Test the _generate_target_link_enum_header_file method. + + NOTE: This method is part of UserDefinedTypes.generate_common_header_files, which is not tested on its own. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2'))} + ) + unit_cfg = self.unit_cfg + type(unit_cfg).base_types_headers = '#include "rtwtypes.h"\n#include "tl_basetypes.h"\n' + udt = UserDefinedTypes(self.build_cfg, unit_cfg) + + result = [] + m_open = mock_open() + m_open.return_value.write = result.append + with patch.object(Path, 'open', m_open, create=True): + udt._generate_enum_header_file(Path("VcEnumerations.h")) + + expected = [ + '#ifndef VCENUMERATIONS_H\n', + '#define VCENUMERATIONS_H\n', + '#include "rtwtypes.h"\n#include "tl_basetypes.h"\n', + '/* VCC Enumerations */\n', + '\n', + 'typedef enum EnumTest_tag {\n', + " ENUMTEST_CLIMAOFF = 0, \n", + " ENUMTEST_CLIMAHEATGTOHVACANDHVBATT = 1, \n", + " ENUMTEST_CLIMAHEATGTOHVBATT = 2, \n", + " ENUMTEST_CLIMAHEATGTOHVAC = 3, \n", + " ENUMTEST_CLIMAFLOW = 4, \n", + " ENUMTEST_DEGAS = 5, \n", + " ENUMTEST_FAILSAFE = 6 \n", + '} EnumTest;\n', + '\n', + 'typedef enum EnumTestThree_tag {\n', + " ENUMTESTTHREE_DTELECCOOLG = 0, \n", + " ENUMTESTTHREE_DTELECPASCOOLG = 1, \n", + " ENUMTESTTHREE_DTELECHEATG = 2, \n", + " ENUMTESTTHREE_DTELECPASHEATG = 3, \n", + " ENUMTESTTHREE_DTELECACTVHEATG = 4, \n", + " ENUMTESTTHREE_DTELECPASACTVHEATG = 5, \n", + " ENUMTESTTHREE_DTELECPAS = 6, \n", + " ENUMTESTTHREE_DEGAS = 7, \n", + " ENUMTESTTHREE_FAILSAFE = 8, \n", + " ENUMTESTTHREE_EXTRAVERSUSUNITONE = 9 \n", + '} EnumTestThree;\n', + '#endif /* VCENUMERATIONS_H */\n' + ] + + self.assertEqual("".join(result), "".join(expected)) + + def test_generate_struct_header_file_tl(self): + """Test the _generate_target_link_struct_header_file method. + + NOTE: This method is part of UserDefinedTypes.generate_common_header_files, which is not tested on its own. + """ + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2'))} + ) + unit_cfg = self.unit_cfg + type(unit_cfg).base_types_headers = '#include "tl_basetypes.h"\n' + udt = UserDefinedTypes(self.build_cfg, unit_cfg) + + result = [] + m_open = mock_open() + m_open.return_value.write = result.append + with patch.object(Path, 'open', m_open, create=True): + udt._generate_struct_header_file(Path("VcStructs.h")) + + expected = [ + '#ifndef VCSTRUCTS_H\n', + '#define VCSTRUCTS_H\n', + '#include "tl_basetypes.h"\n', + '#include "VcEnumerations.h"\n', + '/* VCC Structs */\n', + '\n', + 'struct sVcTestModel2_Bus_Dummy {\n', + ' Float32 sVcTestModel2_D_One;\n', + ' Bool yVcTestModel2_B_One;\n', + '};\n', + '\n', + 'struct sVcTestModel_Bus_Dummy {\n', + ' Float32 sVcTestModel_D_One;\n', + ' UInt8 yVcTestModel_B_One;\n', + '};\n', + '#endif /* VCSTRUCTS_H */\n' + ] + + self.assertEqual("".join(result), "".join(expected)) + + def test_get_enumerations(self): + """Test the get_enumerations method.""" + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel': str(Path(REF_DIR, 'SS1', 'test_model')), + 'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + expected = { + 'EnumTest': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': None, + 'units': ['VcTestModel', 'VcTestModel2'] + }, + 'EnumTestTwo': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTWO_COOLGREQ': 0, + 'ENUMTESTTWO_HEATGREQ': 1 + }, + 'default_value': None, + 'units': ['VcTestModel'] + }, + 'EnumTestThree': { + 'underlying_data_type': 'UInt8', + 'members': { + 'ENUMTESTTHREE_DTELECCOOLG': 0, + 'ENUMTESTTHREE_DTELECPASCOOLG': 1, + 'ENUMTESTTHREE_DTELECHEATG': 2, + 'ENUMTESTTHREE_DTELECPASHEATG': 3, + 'ENUMTESTTHREE_DTELECACTVHEATG': 4, + 'ENUMTESTTHREE_DTELECPASACTVHEATG': 5, + 'ENUMTESTTHREE_DTELECPAS': 6, + 'ENUMTESTTHREE_DEGAS': 7, + 'ENUMTESTTHREE_FAILSAFE': 8 + }, + 'default_value': None, + 'units': ['VcTestModel', 'VcTestModel2'] + } + } + self.assertDictEqual(expected, udt.get_enumerations()) + self.assertDictEqual({'critical': 4, 'warning': 7}, udt.get_nbr_problems()) + + def test_get_structs(self): + """Test the get_structs method.""" + self.build_cfg.get_unit_src_dirs = MagicMock( + return_value={ + 'VcTestModel': str(Path(REF_DIR, 'SS1', 'test_model')), + 'VcTestModel2': str(Path(REF_DIR, 'SS1', 'test_model2')) + } + ) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + expected = { + 'sVcTestModel_Bus_Dummy': { + 'members': { + 'sVcTestModel_D_One': 'Float32', + 'yVcTestModel_B_One': 'Bool' + }, + 'units': ['VcTestModel', 'VcTestModel2'] + }, + 'sVcTestModel2_Bus_Dummy': { + 'members': { + 'sVcTestModel2_D_One': 'Float32', + 'yVcTestModel2_B_One': 'Bool' + }, + 'units': ['VcTestModel2'] + } + } + self.assertDictEqual(expected, udt.get_structs()) + self.assertDictEqual({'critical': 4, 'warning': 7}, udt.get_nbr_problems()) + + def test_get_default_enum_value(self): + """Test the get_default_enum_value method.""" + unit = 'VcTestModel' + unit_cfg = { + "VcTestModel": { + "version": "0.2.1", + "includes": [], + "integrity_level": "QM", + "outports": {}, + "inports": { + "sVcTestModel_Enm_TestEnum": { + "handle": "Path/To/Block", + "name": "sVcTestModel_Enm_TestEnum", + "configs": "((ALWAYS_ACTIVE))", + "description": "Some description.", + "type": "SimulinkEnum", + "unit": "-,$SimulinkEnum", + "offset": 0, + "lsb": 1, + "min": "-", + "max": "-", + "class": "CVC_EXT", + "width": 1, + "default": "One" + } + }, + "core": { + "Events": {}, + "IUMPR": {}, + "FIDs": {}, + "Ranking": {}, + "TstId": {} + }, + "dids": {}, + "nvm": {}, + "pre_procs": [], + "local_vars": {}, + "calib_consts": {} + } + } + self.unit_cfg.get_per_unit_cfg = MagicMock(return_value=unit_cfg) + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + + result = udt.get_default_enum_value(unit, 'SimulinkEnum') + expected = 'SIMULINKENUM_ONE' + self.assertEqual(expected, result) + # interface_data_types.yml "not found" + self.assertDictEqual({'critical': 0, 'warning': 1}, udt.get_nbr_problems()) + + result = udt.get_default_enum_value(unit, 'SimulinkEnumTwo') + self.assertIsNone(result) + # interface_data_types.yml "not found" and real warnings (not in config and no m-file) + self.assertDictEqual({'critical': 0, 'warning': 3}, udt.get_nbr_problems()) + + def test_convert_interface_enum_to_simulink(self): + """Test the convert_interface_enum_to_simulink method.""" + udt = UserDefinedTypes(self.build_cfg, self.unit_cfg) + expected = { + 'underlying_data_type': None, + 'members': { + 'ENUMTEST_CLIMAOFF': 0, + 'ENUMTEST_CLIMAHEATGTOHVACANDHVBATT': 1, + 'ENUMTEST_CLIMAHEATGTOHVBATT': 2, + 'ENUMTEST_CLIMAHEATGTOHVAC': 3, + 'ENUMTEST_CLIMAFLOW': 4, + 'ENUMTEST_DEGAS': 5, + 'ENUMTEST_FAILSAFE': 6 + }, + 'default_value': 'ENUMTEST_CLIMAOFF' + } + result = udt.convert_interface_enum_to_simulink(INTERFACE_ENUM['EnumTest']) + self.assertDictEqual(expected, result) diff --git a/tests/pybuild/test_versioncheck.py b/tests/pybuild/test_versioncheck.py new file mode 100644 index 0000000..a245ab1 --- /dev/null +++ b/tests/pybuild/test_versioncheck.py @@ -0,0 +1,68 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Tests for pybuild version compatibility check module.""" + +import unittest +from pybuild import __config_version__ +from pybuild.versioncheck import Version + + +class TestVersionCheck(unittest.TestCase): + """Unit tests for pybuild version compatibility check module.""" + + def test_float_version(self): + version = Version(1.04) + self.assertTupleEqual((version[0], version[1], version[2]), (1, 4, 0)) + version = Version(0.3) + self.assertTupleEqual((version[0], version[1], version[2]), (0, 3, 0)) + + self.assertRaises(ValueError, Version, -1.1) + + def test_int_version(self): + version = Version(10) + self.assertTupleEqual((version[0], version[1], version[2]), (10, 0, 0)) + + self.assertRaises(ValueError, Version, -1) + + def test_string_version(self): + version = Version('1.0.0') + self.assertTupleEqual((version[0], version[1], version[2]), (1, 0, 0)) + + self.assertRaises(ValueError, Version, '1') + self.assertRaises(ValueError, Version, '1.0') + self.assertRaises(ValueError, Version, '1.0.0.0') + self.assertRaises(ValueError, Version, '1,0.0') + self.assertRaises(ValueError, Version, 'wrong') + + def test_is_compatible(self): + current_version = Version(__config_version__) + + self.assertTrue(Version.is_compatible(__config_version__)) + + higher_major = '{0}.{1}.{2}'.format(current_version[0] + 1, current_version[1], current_version[2]) + self.assertFalse(Version.is_compatible(higher_major)) + + if current_version[0] - 1 >= 0: + lower_major = '{0}.{1}.{2}'.format(current_version[0] - 1, current_version[1], current_version[2]) + self.assertFalse(Version.is_compatible(lower_major)) + + if current_version[1] - 1 >= 0: + same_major_lower_minor = '{0}.{1}.{2}'.format( + current_version[0], + current_version[1] - 1, + current_version[2]) + self.assertTrue(Version.is_compatible(same_major_lower_minor)) + + same_major_higher_minor = '{0}.{1}.{2}'.format(current_version[0], current_version[1] + 1, current_version[2]) + self.assertFalse(Version.is_compatible(same_major_higher_minor)) + + if current_version[2] - 1 >= 0: + same_major_lower_patch = '{0}.{1}.{2}'.format( + current_version[0], + current_version[1], + current_version[2] - 1) + self.assertTrue(Version.is_compatible(same_major_lower_patch)) + + same_major_higher_patch = '{0}.{1}.{2}'.format(current_version[0], current_version[1], current_version[2] + 1) + self.assertFalse(Version.is_compatible(same_major_higher_patch)) diff --git a/tests/test_dummy.py b/tests/test_dummy.py deleted file mode 100644 index c652251..0000000 --- a/tests/test_dummy.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_dummy(): - assert 1 == 1 diff --git a/tests/zone_controller/test_calibration.py b/tests/zone_controller/test_calibration.py new file mode 100644 index 0000000..0e8b950 --- /dev/null +++ b/tests/zone_controller/test_calibration.py @@ -0,0 +1,105 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for pybuild.zone_controller.calibration.""" + +from unittest import TestCase +from unittest.mock import MagicMock +from pybuild.zone_controller.calibration import ZoneControllerCalibration + + +class TestZoneControllerCalibration(TestCase): + """Test case for testing composition_yaml.""" + + maxDiff = None + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + build_cfg = MagicMock() + build_cfg.name = "XVC" + build_cfg.get_src_code_dst_dir.return_value = None + build_cfg.get_swc_name.return_value = "testName_SC" + dummy_calib_data = { + "class_info": { + "dummy_signal_one": { + "type": "Float32", + "width": 1 + }, + "dummy_signal_two": { + "type": "UInt8", + "width": 1 + }, + "dummy_signal_three": { + "type": "UInt8", + "width": [1, 2] + }, + "dummy_signal_four": { + "type": "UInt8", + "width": [2, 2] + } + }, + "data_types": {} + } + self.zone_controller_calibation = ZoneControllerCalibration(build_cfg, dummy_calib_data) + + def test_get_header_file_content(self): + """Test ZoneControllerCalibration.get_header_file_content.""" + result = self.zone_controller_calibation.get_header_file_content() + expected = [ + "#ifndef CALIBRATION_INTERFACE_H\n", + "#define CALIBRATION_INTERFACE_H\n", + "#define CVC_CAL\n", + '#include \n', + '#include "tl_basetypes.h"\n', + '#include "Rte_testName_SC.h"\n', + "\n", + "#define testName_SC_START_SEC_VCC_CAL\n", + '#include "testName_SC_MemMap.h"\n', + "extern CVC_CAL Float32 dummy_signal_one;\n", + "extern CVC_CAL UInt8 dummy_signal_two;\n", + "extern CVC_CAL UInt8 dummy_signal_three[2];\n", + "extern CVC_CAL UInt8 dummy_signal_four[2][2];\n", + "extern CVC_CAL Float32 ctestName_SC_TriggerReadRteCData;\n", + "#define testName_SC_STOP_SEC_VCC_CAL\n", + '#include "testName_SC_MemMap.h"\n', + "\n", + "extern Float32 Rte_CData_testName_SC_dummy_signal_one(void);\n", + "extern UInt8 Rte_CData_testName_SC_dummy_signal_two(void);\n", + "extern const UInt8* Rte_CData_testName_SC_dummy_signal_three(void);\n", + "extern const UInt8* Rte_CData_testName_SC_dummy_signal_four(void);\n", + "extern Float32 Rte_CData_testName_SC_ctestName_SC_TriggerReadRteCData(void);\n", + "\n", + "void testName_SC_ZcCalibrationStep(void);\n", + "\n", + "#endif /* CALIBRATION_INTERFACE_H */\n" + ] + self.assertListEqual(result, expected) + + def test_get_source_file_content(self): + """Test ZoneControllerCalibration.get_source_file_content.""" + result = self.zone_controller_calibation.get_source_file_content() + expected = [ + '#include "calibration_interface.h"\n', + "\n", + "#define testName_SC_START_SEC_VCC_CAL\n", + '#include "testName_SC_MemMap.h"\n', + "CVC_CAL Float32 ctestName_SC_TriggerReadRteCData = 0;\n", + "#define testName_SC_STOP_SEC_VCC_CAL\n", + '#include "testName_SC_MemMap.h"\n', + "\n", + "#define testName_SC_START_SEC_CODE\n", + '#include "testName_SC_MemMap.h"\n', + "void testName_SC_ZcCalibrationStep(void)\n{\n", + " if (ctestName_SC_TriggerReadRteCData != Rte_CData_testName_SC_ctestName_SC_TriggerReadRteCData())\n", + " {\n", + " dummy_signal_one = Rte_CData_testName_SC_dummy_signal_one();\n", + " dummy_signal_two = Rte_CData_testName_SC_dummy_signal_two();\n", + " memcpy(Rte_CData_testName_SC_dummy_signal_three(), &dummy_signal_three, sizeof(UInt8));\n", + " memcpy(Rte_CData_testName_SC_dummy_signal_four(), &dummy_signal_four, sizeof(UInt8));\n", + " ctestName_SC_TriggerReadRteCData = Rte_CData_testName_SC_ctestName_SC_TriggerReadRteCData();\n", + " }\n", + "}\n", + "#define testName_SC_STOP_SEC_CODE\n", + '#include "testName_SC_MemMap.h"\n' + ] + self.assertListEqual(result, expected) diff --git a/tests/zone_controller/test_composition_yaml.py b/tests/zone_controller/test_composition_yaml.py new file mode 100644 index 0000000..0cfc325 --- /dev/null +++ b/tests/zone_controller/test_composition_yaml.py @@ -0,0 +1,157 @@ +# Copyright 2024 Volvo Car Corporation +# Licensed under Apache 2.0. + +"""Unit test script for pybuild.zone_controller.generate_yaml.""" + +import copy +import os +import unittest +from pathlib import Path +from unittest.mock import MagicMock, patch + +from pybuild.build_proj_config import BuildProjConfig +from pybuild.unit_configs import UnitConfigs +from pybuild.zone_controller.composition_yaml import CompositionYaml +from test_data.zone_controller.test_composition_yaml import ( + composition_yaml_setup, + composition_yaml, + composition_yaml_with_a2l_axis_data, + composition_yaml_with_calls_all_fields, + composition_yaml_with_calls_no_optional_fields, +) + +SRC_DIR = Path(__file__).parent + + +class BuildProjConfigMock(BuildProjConfig): + """Class mocking BuildProjConfig""" + name = "" + + +class TestCompositionYaml(unittest.TestCase): + """Test case for testing composition_yaml.""" + + maxDiff = None + + def setUp(self): + """Set-up common data structures for all tests in the test case.""" + self.build_cfg = MagicMock(spec_set=BuildProjConfigMock) + self.build_cfg.name = "XVC" + self.build_cfg.get_scheduler_prefix = MagicMock(return_value="prefix_") + self.build_cfg.get_src_code_dst_dir = MagicMock( + return_value=os.path.abspath("output") + ) + self.build_cfg.get_composition_arxml = MagicMock(return_value="some_arxml.arxml") + self.build_cfg.get_units_raster_cfg = MagicMock( + return_value=({"SampleTimes": {"testRunnable": 10}}) + ) + self.build_cfg.get_composition_name = MagicMock(return_value="compositionName") + self.build_cfg.get_swc_name = MagicMock(return_value="testName_SC") + self.build_cfg.get_gen_ext_impl_type = MagicMock(return_value=True) + + self.unit_cfg = MagicMock(spec_set=UnitConfigs) + self.unit_cfg.get_per_cfg_unit_cfg.return_value = copy.deepcopy( + composition_yaml_setup.get_per_cfg_unit_cfg_return_value + ) + + self.zc_spec = copy.deepcopy(composition_yaml_setup.zc_spec) + + self.calibration_definitions = copy.deepcopy(composition_yaml_setup.calibration_definitions) + + with patch.object( + CompositionYaml, + "_get_all_calibration_definitions", + return_value=self.calibration_definitions + ): + self.composition_yaml = CompositionYaml(self.build_cfg, self.zc_spec, self.unit_cfg, {}) + + # Common expected results variables + self.base_configuration = copy.deepcopy(composition_yaml_setup.base_configuration) + self.base_port_interfaces = copy.deepcopy(composition_yaml_setup.base_port_interfaces) + self.base_accesses = copy.deepcopy(composition_yaml_setup.base_accesses) + self.base_shared = copy.deepcopy(composition_yaml_setup.base_shared) + self.base_static = copy.deepcopy(composition_yaml_setup.base_static) + self.base_data_types = copy.deepcopy(composition_yaml_setup.base_data_types) + + def test_check_unsupported_fields(self): + """Test CompositionYaml.check_unsupported_fields.""" + self.composition_yaml.warning = MagicMock() + test_data = { + "name": "sVcGpaDemo_D_BrkCtrlr", + "type": "UInt8", + "class": "CVC_DISP", + "lsb": 1, + "offset": "-", + "width": 1, + } + self.composition_yaml.check_unsupported_fields("dummy", test_data) + self.composition_yaml.warning.assert_not_called() + test_data["lsb"] = 10 + self.composition_yaml.check_unsupported_fields("dummy", test_data) + self.composition_yaml.warning.assert_called_once() + + def test_composition_yaml(self): + """Checking that the dict is generated correctly""" + result = self.composition_yaml.gather_yaml_info() + self.assertDictEqual(composition_yaml.expected_result, result) + + def test_composition_yaml_with_a2l_axis_data(self): + """Checking that the dict is generated correctly, including a2l axis data.""" + self.unit_cfg.get_per_cfg_unit_cfg.return_value = \ + composition_yaml_with_a2l_axis_data.get_per_cfg_unit_cfg_return_value + a2l_axis_data = composition_yaml_with_a2l_axis_data.a2l_axis_data + calibration_definitions = \ + self.calibration_definitions + composition_yaml_with_a2l_axis_data.calibration_definitions + with patch.object(CompositionYaml, "_get_all_calibration_definitions", return_value=calibration_definitions): + self.composition_yaml = CompositionYaml(self.build_cfg, self.zc_spec, self.unit_cfg, a2l_axis_data) + + result = self.composition_yaml.gather_yaml_info() + self.assertDictEqual(composition_yaml_with_a2l_axis_data.expected_result, result) + + def test_composition_yaml_with_calls_all_fields(self): + """Checking that the dict is generated correctly, with calls including all fields.""" + self.zc_spec["calls"] = { + "CallOne": { + "interface": "InterfaceOne", + "direction": "IN", + "operation": "OperationOne", + "timeout": 0.1, + } + } + with patch.object( + CompositionYaml, + "_get_all_calibration_definitions", + return_value=self.calibration_definitions + ): + self.composition_yaml = CompositionYaml(self.build_cfg, self.zc_spec, self.unit_cfg, {}) + result = self.composition_yaml.gather_yaml_info() + self.assertDictEqual(composition_yaml_with_calls_all_fields.expected_result, result) + + def test_composition_yaml_with_calls_no_optional_fields(self): + """Checking that the dict is generated correctly, with calls without optional fields.""" + self.zc_spec["calls"] = { + "CallOne": { + "direction": "IN", + "operation": "OperationOne", + } + } + with patch.object( + CompositionYaml, + "_get_all_calibration_definitions", + return_value=self.calibration_definitions + ): + self.composition_yaml = CompositionYaml(self.build_cfg, self.zc_spec, self.unit_cfg, {}) + result = self.composition_yaml.gather_yaml_info() + self.assertDictEqual(composition_yaml_with_calls_no_optional_fields.expected_result, result) + + def test_get_init_values_expecting_failure(self): + """Test CompositionYaml.get_init_values with a non-existing calibration definition.""" + self.composition_yaml.clear_log() + json_variables = {"signal_name": "dummy"} + c_definitions = ["CVC_CAL Float32 signal_name_other = 1.F; "] + with patch.object(CompositionYaml, "_get_all_calibration_definitions", return_value=c_definitions): + init_values = self.composition_yaml.get_init_values(json_variables) + logged_problems = self.composition_yaml.get_problems() + self.assertEqual(init_values, {}) + self.assertEqual(logged_problems["warning"], []) + self.assertEqual(logged_problems["critical"], ["Missing init values for calibration variables:\nsignal_name"]) diff --git a/tox.ini b/tox.ini index 15625bd..1655aeb 100644 --- a/tox.ini +++ b/tox.ini @@ -16,10 +16,11 @@ max-line-length = 120 platform = linux basepython = python3 deps = + -rrequirements.txt -rtest-requirements.txt [testenv:flake8] -commands = flake8 powertrain_build tests +commands = flake8 pybuild tests [testenv:pytest] commands = python -m pytest tests

    mMfun4jkFFW(Wew?#4N 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 J|M;1k{|ED8_ay)T literal 0 HcmV?d00001 diff --git a/docs/images/reset_port_workaround.PNG b/docs/images/reset_port_workaround.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9e6397b936f9bc8d5bd887764505f3065af78aec GIT binary patch literal 4547 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 literal 0 HcmV?d00001 diff --git a/docs/images/signal_inconsistency_log_example.png b/docs/images/signal_inconsistency_log_example.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2b5fb840d3475da9111939deafd9bf73cbddc7 GIT binary patch literal 153284 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

)qnV4Dbv-0rr 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